Pytestでは、デコレータを使用してテストをマークできます
@pytest.mark.slow
def some_slow_test():
pass
次に、コマンドラインから、「遅い」とマークされたテストをスキップするようにpytestに指示できます
pytest -k-slow
追加のタグがある場合:
@pytest.mark.long
def some_long_test()
pass
長いテストと遅いテストの両方をスキップできるようにしたいと思います。私はこれを試しました:
pytest -k-slow -k-long
この:
pytest -k-slow,long
そしてどちらもうまくいかないようです。
コマンドラインで、pytestに遅いテストと長いテストの両方をスキップするように指示するにはどうすればよいですか?
さらに、最近追加された「-m」コマンドラインオプションを使用すると、次のように記述できるはずです。
py.test -m "not (slow or long)"
IOW、 "-m"オプションは、マーカーをブール値として使用できる式を受け入れます(マーカーがテスト関数に存在しない場合、その値はFalseで、存在する場合はTrueです)。
pytest
コード(mark.py
)とさらに実験すると、次のように機能するようです:
pytest -k "-slow -long"
(--collect-only
オプションは実験をスピードアップします)
マークデコレータをスタックすることもできます。
_@pytest.mark.slow
@pytest.mark.main
def test_myfunction():
pass
_
次に_py.test -m "slow and main"
_を呼び出し、両方のデコレータを使用したテストのみが呼び出されました。
py.test -m "not (slow and main)"
の結果、他のテストが実行されました
pythonファイル内からテストを実行しようとしている場合、つまり、
$ python testfile.py
内容物あり
import pytest
pytest.main()
cLIフラグをpytest.main
に渡す方法を知りたい場合、答えは次のとおりです。
pytest.main(["-m", "not slow"])
PS-はい、このようにテストを呼び出す正当な理由があります。それらを学ぶ必要がないように祈ってください。