7 pyTest機能とプラグインは、時間のトンを保存します
このチュートリアルでは、我々はベストを学びます
目次 How to Stop a Test Session on the First Failure
How to Re-Run Only the Last Failed Tests How to Re-Run the Whole Test Session Starting With Last Failed Tests First How to Display the Local Variables of a Failed Test How to Run Only a Subset of Tests How to Run Tests in Parallel How to Re-Run Flaky Tests and Eliminate Intermittent Failures Conclusion
最初の失敗のテストセッションを止める方法
大きなプロジェクトの完全なテストスイートを実行するのは、長い時間がかかるかもしれません.あなたがローカルまたはCIサーバー上で実行している場合は関係なく、それは常にテストが辛抱強く待って失敗して表示するイライラです.場合によっては、最初に失敗した後にセッション全体を中止することを望みます.幸運にも
最後の失敗したテストだけを再実行する方法
ローカルに開発するときは、あなたのrepoにプッシュする前にすべてのテストを実行することを好むかもしれません.あなたがほんの少しのテストで小さなプロジェクトに取り組んでいるならば、それを再実行するのはOKです.しかし、完全なテストスイートが実行する分がかかる場合、失敗したものだけを実行します.
最後に失敗したテストから始まるテストセッション全体を再実行する方法
前のコマンドと同様に、すべてを再実行するのに役立つかもしれません.唯一の違いは、最初に失敗したテストから始めたいということです.そしてそれを達成するために
失敗したテストのローカル変数を表示する方法
私たちはどのようにそれを高速化を繰り返して、どのように貴重な時間を節約することが重要であることを学んだ.同じやり方で、我々は失敗したテストをデバッグするのを助ける重要なヒントを拾うことが非常に重要です.を使用して
テストの部分集合だけを走らせる方法
場合によっては、テストのサブセットを実行する必要があります.その1つの方法は、個々のファイルのすべてのテストケースを実行しています.例えば、あなたは
並列テストの実行方法
プロジェクトが持っているより多くのテストは、すべてのそれらのすべてを実行するためにかかる.これは議論の余地のない話ですが、一般的に見落とされています.もう一つのテストの後の1つのテストを広範囲にわたるテストを走らせることは、時間の驚くべき無駄です.実行を高速化する最良の方法は、並列化し、複数のCPUを利用することです.
悲しいことに
テストを複数のCPUに送るには、
Flakyテストを再実行して、断続的な失敗を除く方法
最もゆがめられた状況の1つは、すべてのテストが局所的にCIサーバで失敗するだけであるのを見ることです.いくつかの理由はこれらのような失敗を引き起こすことができます、しかし、大部分は彼らが「Flaky」テストの結果です.「Flaky」テストは断続的に失敗するものです.通常、それらを再実行すると、それらを通過するのに十分です.問題は、あなたが長いランニングテストスイートを持っているならば、あなたはCIステップを再トリガーして、数分待つ必要があります.これは素晴らしい時間のシンクであり、幸いに回避することができます.
だから、それを改善するためには、我々は再“フレーク”テストを再実行することが理想的です.そうすることによって、我々はそれを通過する機会を増やすことができます.そして、CIステップの完全な失敗を避けます.
ベスト
それを使う最も簡単な方法は
結論
大きなテストスイートは、プロジェクトに多くの保証をもたらすことができますが、それもコストが付属しています.長い実行テストセッションは、多くの開発時間を食べて、反復を遅くすることができます.活用することによって
7 pytest Features and Plugins That Will Save You Tons of Time 初登場miguendes's blog .
pytest
機能とプラグインを開発プロセスをスピードアップします.彼らは非常に簡単ですし、すぐに使用を開始することができます.目次
最初の失敗のテストセッションを止める方法
大きなプロジェクトの完全なテストスイートを実行するのは、長い時間がかかるかもしれません.あなたがローカルまたはCIサーバー上で実行している場合は関係なく、それは常にテストが辛抱強く待って失敗して表示するイライラです.場合によっては、最初に失敗した後にセッション全体を中止することを望みます.幸運にも
pytest
そのための非常に便利なCLIオプションが付属しています-x / --exitfirst
.$ pytest -x tests/
最後の失敗したテストだけを再実行する方法
ローカルに開発するときは、あなたのrepoにプッシュする前にすべてのテストを実行することを好むかもしれません.あなたがほんの少しのテストで小さなプロジェクトに取り組んでいるならば、それを再実行するのはOKです.しかし、完全なテストスイートが実行する分がかかる場合、失敗したものだけを実行します.
pytest
を介して--lf
or --last-failed
オプション.貴重な時間を節約することができますし、非常に迅速に繰り返すこの方法!$ pytest --lf tests/
最後に失敗したテストから始まるテストセッション全体を再実行する方法
前のコマンドと同様に、すべてを再実行するのに役立つかもしれません.唯一の違いは、最初に失敗したテストから始めたいということです.そしてそれを達成するために
--ff
or --failed-first
フラグ.$ pytest --ff tests/
失敗したテストのローカル変数を表示する方法
私たちはどのようにそれを高速化を繰り返して、どのように貴重な時間を節約することが重要であることを学んだ.同じやり方で、我々は失敗したテストをデバッグするのを助ける重要なヒントを拾うことが非常に重要です.を使用して
--showlocals
フラグまたは単に-l
, トレースバックにおけるすべてのローカル変数の値を見ることができます.$ pytest tests/test_variables.py -l
================ test session starts ================
...
tests/test_variables.py FF [100%]
================ FAILURES ================
_____________________________________________________________________________ test_local_variables[name] _____________________________________________________________________________
key = 'name'
@pytest.mark.parametrize("key", ["name", "age"])
def test_local_variables(key):
result = person_info()
> assert key in result
E AssertionError: assert 'name' in {'height': 180}
key = 'name'
result = {'height': 180}
tests/test_variables.py:11: AssertionError
_____________________________________________________________________________ test_local_variables[age] ______________________________________________________________________________
key = 'age'
@pytest.mark.parametrize("key", ["name", "age"])
def test_local_variables(key):
result = person_info()
> assert key in result
E AssertionError: assert 'age' in {'height': 180}
key = 'age'
result = {'height': 180}
tests/test_variables.py:11: AssertionError
================ short test summary info ================
FAILED tests/test_variables.py::test_local_variables[name] - AssertionError: assert 'name' in {'height': 180}
FAILED tests/test_variables.py::test_local_variables[age] - AssertionError: assert 'age' in {'height': 180}
================ 2 failed in 0.05s ================
テストの部分集合だけを走らせる方法
場合によっては、テストのサブセットを実行する必要があります.その1つの方法は、個々のファイルのすべてのテストケースを実行しています.例えば、あなたは
pytest test_functions.py
. これはすべてを実行するよりも優れていますが、我々はまだそれを改善することができます.を使用して-k
オプションとして、pytest
実行するテストを選択するために使用します.# tests/test_variables.py
def test_asdict():
...
def test_astuple():
...
def test_aslist():
...
最初の2つのテストを実行する必要があると言うと、or
:$ pytest -k "asdict or astuple" tests/test_variables.py
出力:$ pytest -k "asdict or astuple" tests/test_variables.py
==================================== test session starts ====================================
...
tests/test_variables.py .. [100%]
============================== 2 passed, 1 deselected in 0.02s ==============================
並列テストの実行方法
プロジェクトが持っているより多くのテストは、すべてのそれらのすべてを実行するためにかかる.これは議論の余地のない話ですが、一般的に見落とされています.もう一つのテストの後の1つのテストを広範囲にわたるテストを走らせることは、時間の驚くべき無駄です.実行を高速化する最良の方法は、並列化し、複数のCPUを利用することです.
悲しいことに
pytest
同様の機能を持っていないので、プラグインに戻る必要があります.ベストpytest
そのためのプラグインはpytest-xdist .テストを複数のCPUに送るには、
n
or --numprocesses
オプション.$ pytest -n NUMCPUS
あなたはどのように多くのCPUを使用できない知っている場合はpytest-xdist
すべての利用可能なCPU上でテストを実行するにはauto
値.$ pytest -n auto
Flakyテストを再実行して、断続的な失敗を除く方法
最もゆがめられた状況の1つは、すべてのテストが局所的にCIサーバで失敗するだけであるのを見ることです.いくつかの理由はこれらのような失敗を引き起こすことができます、しかし、大部分は彼らが「Flaky」テストの結果です.「Flaky」テストは断続的に失敗するものです.通常、それらを再実行すると、それらを通過するのに十分です.問題は、あなたが長いランニングテストスイートを持っているならば、あなたはCIステップを再トリガーして、数分待つ必要があります.これは素晴らしい時間のシンクであり、幸いに回避することができます.
だから、それを改善するためには、我々は再“フレーク”テストを再実行することが理想的です.そうすることによって、我々はそれを通過する機会を増やすことができます.そして、CIステップの完全な失敗を避けます.
ベスト
pytest
そのためのプラグインは.このプラグインはテストを再実行します.それを使う最も簡単な方法は
--reruns
あなたが実行するテストをしたい時間の最大数を持つオプション.$ pytest --reruns 5
場合は、時間の前に個々のテストをフレーク知っている場合は、単に再実行するようにマークすることができます.@pytest.mark.flaky(reruns=5)
def test_flaky():
assert get_resut() is True
結論
大きなテストスイートは、プロジェクトに多くの保証をもたらすことができますが、それもコストが付属しています.長い実行テストセッションは、多くの開発時間を食べて、反復を遅くすることができます.活用することによって
pytest
機能、およびプラグインの生態系、劇的に開発プロセスをスピードアップすることが可能です.このチュートリアルでは、私たちは私たちの生活を改善し、無駄な時間のテストを実行するために採用できる7つのヒントを見た.If you liked this post, consider sharing it with your friends! Also, feel free to follow me https://miguendes.me.
7 pytest Features and Plugins That Will Save You Tons of Time 初登場miguendes's blog .
Reference
この問題について(7 pyTest機能とプラグインは、時間のトンを保存します), 我々は、より多くの情報をここで見つけました https://dev.to/miguendes/7-pytest-features-and-plugins-that-will-save-you-tons-of-time-2o7eテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol