超強力な Pytest 自動テスト フレームワーク フィクスチャ渡しパラメータの実戦 (ケース)


序文

再利用性を向上させるために、テスト ケースを作成するときにさまざまなフィクスチャを使用します。たとえば、最も一般的なログイン操作、ほとんどのユース ケースの前提条件はログインです。

異なるユースケースで異なるテストアカウントにログインする必要があると仮定すると、フィクスチャにログインするときにアカウントを書き換えることはできず、ログイン操作はパラメータを渡すことによって完了する必要があります。

ケース 1: 単一のパラメータを渡す

import pytest


@pytest.fixture()
def login(request):
    name = request.param
    print(f"== 账号是:{
      
      name} ==")
    return name


data = ["pyy1", "polo"]
ids = [f"login_test_name is:{
      
      name}" for name in data]


@pytest.mark.parametrize("login", data, ids=ids, indirect=True)
def test_name(login):
    print(f" 测试用例的登录账号是:{
      
      login} ")

の結果

collecting ... collected 2 items

10fixture_request.py::test_name[login_test_name is:pyy1] == 账号是:pyy1 ==
PASSED          [ 50%] 测试用例的登录账号是:pyy1 

10fixture_request.py::test_name[login_test_name is:polo] == 账号是:polo ==
PASSED          [100%] 测试用例的登录账号是:polo 

indirect=True パラメーターを追加すると、login がパラメーターではなく関数として実行され、データがパラメーター (def test_name (
login)) として関数に渡されます。ここで、login はフィクスチャによって返される値です。

ケース 2: 複数のパラメータ

@pytest.fixture()
def logins(request):
    param = request.param
    print(f"账号是:{
      
      param['username']},密码是:{
      
      param['pwd']}")
    return param


data = [
    {
    
    "username": "name1", "pwd": "pwd1"},
    {
    
    "username": "name2", "pwd": "pwd2"},
]


@pytest.mark.parametrize("logins", data, indirect=True)
def test_name_pwd(logins):
    print(f"账号是:{
      
      logins['username']},密码是:{
      
      logins['pwd']}")

の結果

10fixture_request.py::test_name_pwd[logins0] 账号是:name1,密码是:pwd1
PASSED                      [ 50%]账号是:name1,密码是:pwd1

10fixture_request.py::test_name_pwd[logins1] 账号是:name2,密码是:pwd2
PASSED                      [100%]账号是:name2,密码是:pwd2

複数のパラメータを渡す必要がある場合は、辞書を介して渡す必要があります

ケース 3: 複数のフィクスチャ (デコレータは 1 つだけ)

こちらの方がよく使われます

# 多个fixture
@pytest.fixture(scope="module")
def input_user(request):
    user = request.param
    print("登录账户:%s" % user)
    return user


@pytest.fixture(scope="module")
def input_psw(request):
    psw = request.param
    print("登录密码:%s" % psw)
    return psw


data = [
    ("name1", "pwd1"),
    ("name2", "pwd2")
]


@pytest.mark.parametrize("input_user,input_psw", data, indirect=True)
def test_more_fixture(input_user, input_psw):
    print("fixture返回的内容:", input_user, input_psw)

の結果

10fixture_request.py::test_more_fixture[name1-pwd1] 登录账户:name1
登录密码:pwd1
PASSED               [ 50%]fixture返回的内容: name1 pwd1

10fixture_request.py::test_more_fixture[name2-pwd2] 登录账户:name2
登录密码:pwd2
PASSED               [100%]fixture返回的内容: name2 pwd2

ケース 4: 複数のフィクスチャ (オーバーレイ デコレータ)

# 多个fixture
@pytest.fixture(scope="function")
def input_user(request):
    user = request.param
    print("登录账户:%s" % user)
    return user


@pytest.fixture(scope="function")
def input_psw(request):
    psw = request.param
    print("登录密码:%s" % psw)
    return psw


name = ["name1", "name2"]
pwd = ["pwd1", "pwd2"]


@pytest.mark.parametrize("input_user", name, indirect=True)
@pytest.mark.parametrize("input_psw", pwd, indirect=True)
def test_more_fixture(input_user, input_psw):
    print("fixture返回的内容:", input_user, input_psw)

の結果

10fixture_request.py::test_more_fixture[pwd1-name1] 登录账户:name1
登录密码:pwd1
PASSED               [ 25%]fixture返回的内容: name1 pwd1

10fixture_request.py::test_more_fixture[pwd1-name2] 登录账户:name2
登录密码:pwd1
PASSED               [ 50%]fixture返回的内容: name2 pwd1

10fixture_request.py::test_more_fixture[pwd2-name1] 登录账户:name1
登录密码:pwd2
PASSED               [ 75%]fixture返回的内容: name1 pwd2

10fixture_request.py::test_more_fixture[pwd2-name2] 登录账户:name2
登录密码:pwd2
PASSED               [100%]fixture返回的内容: name2 pwd2

テストケースの数=2*2=4

以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。

1. Pythonプログラミングの入門から習得まで

画像の説明を追加してください

2.インターフェース自動化プロジェクトの実戦

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実戦

画像の説明を追加してください

5. 一流メーカーの再開

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8、JMeterのパフォーマンステスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

果敢に前進し、高みを目指してください。夢を追い求め、奮闘し続けてください。あらゆる努力は自己突破の機会であり、粘り強く努力すれば、必ずあなたの足元に成功が花開きます。自分を信じて、どんな困難も乗り越えて、輝かしい人生を自分で切り開いていきましょう!

苦難を恐れず勇敢に進む 夢を追う 最善を尽くす 恐れずに耐える 限りなく努力し輝きを生み出す 地に足をつけて頂上へ登る 自己実現に向けて努力する 積極的に収穫する未来; 自信に満ちて、何もしない ノー; 人生は短く、闘いは終わりがありません。

たゆまぬ努力だけが混乱の霧を晴らし、輝かしい明日に向かって進むことができます。たとえ前途多難であっても、夢を胸に闘い続ければ、地に足をつけていれば必ず成功します。自分を信じて、限界を超えて、前へ!

おすすめ

転載: blog.csdn.net/m0_70102063/article/details/131438883