単体テストフレームワーク-pytest

単体テストフレームワーク-pytest

公式ウェブサイト

よく使われるプラグイン

  • pytest-html: HTML レポートを生成します
  • pytest-xdist: 同時テストの実装
  • pytest-ordering: テストケースの順序設定を実装する
  • pytest-rerunfailures: テストケース失敗の再試行
  • allure-pytest: テストレポートを生成する
依存関係を導入する

プロジェクトのルート ディレクトリに作成します。requirements.txt

pytest
pytest-html
pytest-xdist
pytest-ordering
pytest-rerunfailures
allure-pytest

注文の実行

pip install -r requirements.txt

インストールが成功したことを確認する

pytest --version

Pytest の使用

仕様
  • モジュール名は次でtest_始まるか_test終わる必要があります。
  • テストクラスは Test で始まる必要があり、__init__メソッドを含めることはできません
  • テストメソッドは test で始める必要があります
動作モード
  • メイン機能モード

    pytest.main()
    
  • コマンドラインモード

    pytest
    
  • pytest.ini 構成ファイルを読み取って実行します。

    • 通常はプロジェクトのルート ディレクトリに配置されます
    • エンコーディング: ANSI 必要に応じて、notepad++ を使用してエンコーディング形式を変更できます。
    • 機能: pytest のデフォルトの動作を変更します。
    • 実行ルール: main 関数とコマンド ライン モードの両方がファイルを読み取ります。
    [pytest]
    #命令行参数,用空格分隔
    addopts = -vs
    # 测试用例文件夹,可以自己配置
    testpaths = ./testcase
    # 配置测试搜索的模块文件名称
    python_files = test*.py
    # 配置测试搜索的测试类名
    python_classes = Test*
    # 配置测试搜索的测试函数名
    python_functions = test
    #测试分组
    markers =
    	g11n:国际化测试组
    	i10n:本地化测试组
    
  • 指定されたモジュールを実行する

    pytest.main(['test_module.py'])
    
  • ディレクトリを指定してください

    pytest.main(['dir_name'])
    
  • nodeid を介して実行するテスト ケースを指定します。nodeid は、モジュール名、セパレータ、クラス名、メソッド名、および関数名で構成されます。

    pytest.main('./dir_name/module.py::class_name::fun_name')
    
パラメータの詳細
  • -s: テストケースのデバッグ内容を表示します。

  • -v: テスト ケースの詳細を表示します。

  • -n: テスト ケースのマルチスレッド実行

  • –reruns: 再試行回数を設定します。

  • -x: 1 つのテスト ケースが失敗するとすぐにテストを停止します。

  • –maxfail: いくつかのテストが失敗した場合に実行を停止するように設定します。

  • -k: テスト ケース文字列の一部に基づいてテスト ケースを指定します。

  • -m: テストグループを指定します

執行順序
  • 単体テスト: ASCII サイズに従って実行

  • pytest: デフォルトは上から下へ

テストケースの順序を指定します: pytest-ordering をインストールする必要があります

@pytest.mark.run(order=)
グループテスト
@pytest.mark.mark_name
  • mark_name: カスタマイズされたグループ名

テストの実行

pytest -m "mark_name"

複数のグループを実行する

pytest -m "mark1 or mark2"
テストをスキップする
  • 無条件に

    @pytest.mark.skip(reason="原因")
    
  • 条件付きスキップ

    @pytest.mark.skipif(expr, reason="原因")
    
レポートの生成
  • HTML

    pytest --html ./save_path/report.html
    
  • アリュール

    ダウンロード

    • プロジェクトを解凍し、環境変数に設定して、インストールが成功したかどうかを確認します。
    allure --version
    
    • JSON形式で一時レポートを生成する
    --alluredir  ./temp
    
    • 魅力レポートの生成
    allure generate ./temp -o ./report --clean
    

    -o: レポート出力ディレクトリ

    –clean: ディレクトリをクリアします

テストフィクスチャ(フロントおよびリア)
  • setup_class: すべてのテスト ケースが実行される前に 1 回実行します。
  • teardown_class: すべてのテスト ケースが実行された後に 1 回実行します。
  • setup_method: 各テスト ケースが実行される前に 1 回実行されます。
  • Teardown_method: 各テスト ケースは 1 回実行されます

いくつかのテスト ケースは前後に実装されます。@pytest.fixture()

パラメータ

  • スコープ: スコープ
    • 関数メソッドレベルの接頭辞と接尾辞 (デフォルト)
    • class クラスレベルの接頭辞と接尾辞
    • モジュール モジュールレベルの接頭辞と接尾辞
    • パッケージ/セッション パッケージレベルのプレフィックスとプレフィックス
  • params:パラメータ化
    • サポートされているパラメータのタイプ: (リスト: [] タプル () 辞書リスト [{}, {}, {}]、辞書タプル: ({}, {}, {})))
  • autouse: 自動実行 デフォルト値: False False の場合、呼び出す必要があるメソッドのパラメータとして関数名を使用する必要があります。
  • ids: params パラメータ化を使用する場合、パラメータ リスト内の各値に変数名を設定します。
  • name: @pytest.fixture でマークされたメソッドのエイリアスを表します
# yield返回后面可以有代码,return后面不能有代码,返回值即为测试方法的所传入的参数
# 参数名必须为request,否则报错[not found]
# 使用name对标记的方法起别名后不能使用原函数名作为参数,否则报错
@pytest.fixture(scope='function', params=['赵姗姗', '马化腾', '张一鸣'], ids=['zss', 'mht', 'zym'], name='fixt')
def my_fixture2(request):
    print("前置")
    yield request.param
    print("后置")

conftest.py はフィクスチャと組み合わせて使用​​されます

  • 通常、conftest.py ファイルは各テスト パッケージの下に含めることができ、プレフィクスチャとポストフィクスチャは通常このファイルで定義されており、インポートせずに他のモジュールで使用できます。
  • フィクスチャは、現在のパッケージとその親パッケージの conftest.py で定義されたものを使用できますが、兄弟パッケージは使用できません。
断言
assert
データ駆動型
    @pytest.mark.parametrize('args', ['zss', 'nan', 'lis'])
    def test_ddt(self, args):
        print(args)

    @pytest.mark.parametrize('name,age', [('张三', 21), ('李四', 22), ('王五', 23)])
    def test_ddt2(self, name, age):
        print(name)
        print(age)
  • パラメータ 1: 反復の変数名
  • パラメータ 2: 反復値

おすすめ

転載: blog.csdn.net/qq_52751442/article/details/132837455