内容:ガイド
序文
通常、たとえば、多数の機能テスト ケースがある場合、ユース ケースが 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. まとめ(最後にちょっとしたサプライズ)
挫折は成功の母であり、あらゆる失敗は勝利への一歩です。忍耐強く努力して、風と雨を通してのみ虹を見ることができます。自分の能力を信じ、夢を追い、勇敢に前進すれば、やがて輝きがもたらされます。歳月は容赦ないものですが、努力は永遠であり、闘いは終わりがありません。未来はあなたのものです!
一生懸命働くことによってのみ自分を超えることができます、闘いを続けることによってのみ夢を実現することができます、最善を尽くすことによってのみ成功を得ることができます、自分を信じている限り、克服できない困難はありません!来て!
不断の努力があってこそ輝かしい未来が得られる、献身はどんな言葉よりも力強い、果敢に前進、恐れず、あらゆる挑戦は成長の機会、戦い続ければ成功は必ずあなたのものとなる。