ネットワーク全体が超充実、Pytest自動テストフレームワークpytest-xdist分散テストプラグイン(実戦)


序文

通常、たとえば、多数の機能テスト ケースがある場合、ユース ケースが 1,000 個あり、各ユース ケースの実行に 1 分かかると仮定すると、1 人のテスターが実行すると、実行に 1,000 分かかります。

プロジェクトが緊急性の高い場合、複数のテストリソースを連携させてタスクを2回に分ける必要があるため、実行時間が半分に短縮されます。小規模なパートナーが10社あれば、実行時間は10分の1となり、大幅に短縮されます。 ; テスト時間を節約します。

プロジェクトのテスト時間を節約するために、10 個のテストが同時に並行してテストされますが
、これは分散シナリオです。同様に、自動化されたテスト ケースが多数ある場合、順番に 1 つずつ実行すると非常に時間がかかります。 pytest-xdist の登場は、自動テスト ケースを分散方式で実行できるようにすることで、自動テスト時間を節約するためのものです。pytest
-xdist はプロセス レベルの同時実行です。

分散実行ユースケースの設計原則 (キーポイント)

ユースケースは独立しており、ユースケース間に依存関係はなく、完全に独立して実行可能 【独立動作】 ユースケースの実行に順序はなく、ランダムな順序で正常に実行可能 【ランダム実行

それぞれユースケースは繰り返し実行でき、実行結果は他のユースケースに影響を与えません [他のユースケースには影響しません]

プラグインのインストール

pip3 install pytest-xdist -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

pytest-xdist は、いくつかの独自のテスト実行モードで pytest を拡張します。

テスト実行の並列化: 複数の CPU またはホストがある場合は、それらを組み合わせたテスト実行に使用できます。これにより、開発をスピードアップしたり、リモート コンピュータの特別なリソースを使用したりできます。

--looponfail: 子プロセスでテストを繰り返し実行します。各実行後、pytest はプロジェクト内のファイルが変更されるまで待機してから、以前に失敗したテストを実行します。すべてのテストに合格するまでこのプロセスを繰り返し、その後、完全な実行を再度実行します。

クロスプラットフォームのカバレッジ: 異なる Python インタープリターまたは異なるプラットフォームを指定し、それらすべてでテストを並行して実行できます。

クイックスタート

コードパッケージの構造

14xdist是项目文件夹名称
│  conftest.py
│  test_1.py
│  __init__.py
│              
├─test_51job
│  │  conftest.py
│  │  test_case1.py
│  │  __init__.py 
│          
├─test_toutiao
│  │  test_case2.py
│
├─test_weibo
│  │  conftest.py
│  │  test_case3.py
│  │  __init__.py 
│          

特定のコード

一番外側のconftest.py

# 外层conftest.py

@pytest.fixture(scope="session")
def login():
    print("====登录功能,返回账号,token===")
    name = "testyy"
    token = "npoi213bn4"
    yield name, token
    print("====退出登录!!!====")**strong text**

一番外側のtest_1.py

import pytest


@pytest.mark.parametrize("n", list(range(5)))
def test_get_info(login, n):
    sleep(1)
    name, token = login
    print("***基础用例:获取用户个人信息***", n)
    print(f"用户名:{
      
      name}, token:{
      
      token}")

分散テストを行わない場合のコマンドと必要な実行時間

pytest -s

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

ユース ケースの実行には約 1 秒 (各ユース ケースに sleep(1) が追加されるため)、合計 30 のユース ケースがあり、実行に合計 30 秒かかることがわかります。ユース ケースが 1000 件ある場合、実行時間は実際には1000秒です

分散テストを使用したコマンドと必要な実行時間

pytest -s -n auto

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

最終的な実行時間は 6 秒しか必要ないことがわかります。私のコンピュータには本物の 6 コアと偽の 12 コアがあります。
-n auto: システム内の CPU コアの数を自動的に検出できます。テスト結果から、検出されたのは論理コアです。プロセッサー 偽の 12 コアの数。
自動を使用すると、テスト ケースを実行するためにすべての CPU を使用するのと同じになり、現時点では CPU 使用率が特に高くなります。

ユースケースを実行するために必要な CPU の数を指定できます

pytest -s -n 2

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

pytest-xdist は pytest-html とうまく組み合わせることができます

pytest -s -n auto --html=report.html --self-contained-html

pytest-xdist は特定の順序で実行されます
。 pytest-xdist はデフォルトで順不同で実行され、順序は --dist パラメータで制御できます。

 --dist=loadscope 

同じモジュール module の下の関数と同じテスト クラス class の下のメソッドに従ってグループ化され、各テスト グループを実行可能なワーカーに送信して、同じグループのテスト ケースが同じプロセスで実行されるようにします。現在のところ、カスタム グループ化は不可能です
。クラス別のグループ化は、モジュール別のグループ化よりも優先されます。

 --dist=loadfile 

同じファイル名でグループ化し、各テスト グループを実行可能ワーカーに送信して、同じグループのテスト ケースが同じプロセスで実行されるようにします。

scope=session のフィクスチャをテスト セッションで 1 回だけ実行する方法

pytest-xdist は、各ワーカー プロセスが独自のテスト ケース セットの下ですべてのテスト ケースを実行できるようにします。

これは、異なるプロセスで、異なるテスト ケースがより高いレベルのスコープ (セッションなど) で同じフィクスチャを呼び出す可能性があり、そのフィクスチャが複数回実行されることになり、scope=session の期待を満たさないことを意味します。

解決

pytest-xdist には、セッション全体のフィクスチャが 1 回だけ実行されることを保証するためのサポートが組み込まれていませんが、これはプロセス間通信にロック ファイルを使用することで可能になります。

例:
次の例では、ログインを 1 回だけ実行する必要があります (構成オプションなどを定義するために 1 回だけ実行する必要があるため)。
フィクスチャが初めてリクエストされたとき、FileLock を使用してフィクスチャ データを 1 回だけ生成します。
他のプロセスが再度このフィクスチャをリクエストすると、データがファイルから読み取られます。

import pytest
from filelock import FileLock


@pytest.fixture(scope="session")
def login():
    print("====登录功能,返回账号,token===")
    with FileLock("session.lock"):
        name = "testyy"
        token = "npoi213bn4"
        # web ui自动化
        # 声明一个driver,再返回

        # 接口自动化
        # 发起一个登录请求,将token返回都可以这样写

    yield name, token
    print("====退出登录!!!====")
以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。

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

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

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

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

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

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

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

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

5. 一流メーカーの再開

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

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

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

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

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

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

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

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

挫折は成功の母であり、あらゆる失敗は勝利への一歩です。忍耐強く努力して、風と雨を通してのみ虹を見ることができます。自分の能力を信じ、夢を追い、勇敢に前進すれば、やがて輝きがもたらされます。歳月は容赦ないものですが、努力は永遠であり、闘いは終わりがありません。未来はあなたのものです!

一生懸命働くことによってのみ自分を超えることができます、闘いを続けることによってのみ夢を実現することができます、最善を尽くすことによってのみ成功を得ることができます、自分を信じている限り、克服できない困難はありません!来て!

不断の努力があってこそ輝かしい未来が得られる、献身はどんな言葉よりも力強い、果敢に前進、恐れず、あらゆる挑戦は成長の機会、戦い続ければ成功は必ずあなたのものとなる。

おすすめ

転載: blog.csdn.net/csdnchengxi/article/details/131458518