すべてのpytest
テストを順次ではなく並行して実行したい。
私の現在のセットアップは次のようになります:
class Test1(OtherClass):
@pytest.mark.parametrize("activity_name", ["activity1", "activity2"])
@pytest.mark.flaky(reruns=1)
def test_1(self, activity_name, generate_test_id):
"""
"""
test_id = generate_random_test_id()
test_name = sys._getframe().f_code.co_name
result_triggers = self.proxy(test_name, generate_test_id, test_id, activity_name)
expected_items = ["response"]
validate_response("triggers", result_triggers, expected_items)
@pytest.mark.parametrize("activity_name", ["activity1", "activity2"])
@pytest.mark.flaky(reruns=1)
def test_2(self, activity_name, generate_test_id):
"""
"""
#same idea...
pytest -v -s
を使用してテストを実行します。
その結果、テストは順番に実行されます。一部のテストはリモートサーバーからの応答を待機するため、時間がかかります(統合テスト)。
Pytestを並行して実行する方法はありますか?
pytest-xdist
。 Qxf2はそれを非常によく説明していると思います: Pytest-XdistのQxf2
Linuxのコマンドラインは、私の好みには少し冗長です。私が使う:
pytest -n <NUM>
ここで、<NUM>は並列ワーカーの数です。
pytest-xdist
はほとんどの場合に優れたソリューションですが、統合テストは特別です。リモートサーバーに要求を送信した後、応答を待つ代わりに新しいスレッドで別のテストを開始できます。これは、並行ではなく並行テストです。同時実行性により、メモリと処理のオーバーヘッドがはるかに少なく、より多くのテストを一度に実行できます。
pytest-parallel
プラグイン[py3.6 +]を使用して、並行および並行テストを有効にします。統合テストを同時に実行する方法は次のとおりです。
pytest --tests-per-worker auto
私のテストはAWSからのグルージョブが完了するまで99.9999999%の時間待機しており、2つのコアを持つCodeBuild環境を使用していたため、一度に2つのテストしか実行できなかったため、pytest-xdistは機能しませんでした。
@kevelendのアプローチはうまくいきました。