ファイルから実行するpytestテストを選択する方法はありますか?たとえば、実行されるテストのリストを含むファイルfoo.txtです。
tests_directory/foo.py::test_001
tests_directory/bar.py::test_some_other_test
それともpytestで異なるディレクトリから複数のテストを選択する方法があり、テスト名に共通のパターンはありませんか?
py.test -k <pattern>
は単一のパターンを許可します。
1つの選択肢は各テストに対してpytest.markを付けることですが、私の要件は異なるファイルから異なる組み合わせのテストを実行することです。
複数のパターンと各パターンのテストファイル名を指定する方法はありますか?それとも、ファイル内の正確なテストパスを指定してそのファイルをpytestへの入力としてフィードする方法はありますか?それともこの目的のために利用できるフック機能はありますか?
さまざまなパターンでテストケースを実行するために -k
option を使うことができます。
py.test tests_directory/foo.py tests_directory/bar.py -k 'test_001 or test_some_other_test'
これは、test_001とtest_some_other_testという名前でテストケースを実行します。テストケース.
注:これはtest_001またはtest_some_other_testで始まるテストケースを選択します。たとえば、テストケースtest_0012がある場合は、それも選択されます。
Pytestはコマンドラインからテストを実行し選択するいくつかの方法をサポートします。
pytest test_mod.py
pytest testing/
pytest -k "MyClass and not method"
これは与えられた文字列式にマッチする名前を含むテストを実行するでしょう。それは変数としてファイル名、クラス名と関数名を使うPythonオペレータを含むことができます。上記の例はTestMyClass.test_something
を実行しますが、TestMyClass.test_method_simple
は実行しません。
収集された各テストには、::
文字で区切られた、クラスfilename、関数名、およびパラメーター化からのパラメーターなどの指定子が後に続くモジュールfilenameで構成された固有のnodeid
が割り当てられます。
pytest test_mod.py::test_func
コマンドラインでテストメソッドを指定するもう一つの例:
pytest test_mod.py::TestClass::test_method
pytest -m slow
@pytest.mark.slow
デコレータで装飾されているすべてのテストを実行します。
詳しくは、 マーク を参照してください。
pytest --pyargs pkg.testing
これはpkg.testing
をインポートし、そのファイルシステムの場所を使ってテストを見つけて実行します。
出典: https://docs.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests
たぶんpytest_collect_file()
フックを使ってあなたが望むようにテストが指定されている.txt
または.yaml
ファイルの内容を解析してそれらをpytestコアに返すことができます。
いい例が pytestのドキュメント にあります。私はあなたが探しているものだと思います。
2つの異なるクラスに同じメソッド名があり、そのうちの1つを実行したいだけであれば、これは機能します。
pytest tests.py -k 'TestClassName and test_method_name'
ノードIDによるテストの実行に関するドキュメントによると
foo.txtにすべてのノードIDがあるため、実行するだけです
pytest `cat foo.txt | tr '\n' ' '`
これは以下のコマンドと同じです(質問のファイルの内容を使用)
pytest tests_directory/foo.py::test_001 tests_directory/bar.py::test_some_other_test
部分的な答えがあります。テストスクリプトを選択することしかできず、それらのスクリプト内の個々のテストを選択することはできないためです。
そしてそれはまた私がレガシー互換性モード対unittest
スクリプトを使うことによって制限されたので、それがネイティブのpytestで動作することを保証しません。
これが行きます:
subset_tests_directory
のように新しい辞書を作ります。ln -s tests_directory/foo.py
ln -s tests_directory/bar.py
暗黙のうちにファイルがtest_directory
にあると仮定するインポートには注意してください。 python foo.py
内からsubset_tests_directory
を実行し、必要に応じて修正することで、それらのいくつかを修正しなければなりませんでした。
テストスクリプトが正しく実行されたら、そこにcd subset_tests_directory
とpytest
を付けます。 Pytestはそれが見るスクリプトだけを拾います。
もう一つの可能性はあなたの現在のテストディレクトリ内でシンボリックリンクすることです、例えばln -s foo.py subset_foo.py
そしてpytest subset*.py
のように。インポートを調整する必要はありませんが、シンボリックリンクを削除するまでは混乱します。私のためにも働きました。