2011-09-13 10 views
35

の選択を解除、1コマンドラインから、1のテストをスキップするpytestを伝えることができ、そして、デコレータPytest:pytestでテスト

@pytest.mark.slow 
def some_slow_test(): 
    pass 

を使用してテストをマークすることができますが

pytest -k-slow 

を「遅い」とマーク追加のタグがある場合:

@pytest.mark.long 
def some_long_test() 
    pass 

長いAND遅いテストをスキップすることができます。私はこれを試してみた:

pytest -k-slow -k-long 

と、この:

pytest -k-slow,long 

そして、どちらも動作するようです。

コマンドラインでpytestに、遅いテストと長いテストの両方をスキップするように指示するにはどうすればよいですか?

答えて

40

また、最近追加しました"-m"コマンドラインオプションを使用すると、次のように書くことができます。

py.test -m "not (slow or long)" 

IOW、 "-m"オプションは、マーカをブール値として使用できる式を受け入れます(マーカがテスト関数上に存在しない場合、値がFalseの場合はFalse、存在する場合はTrue)。

10

pytestコード(mark.py)を介してみると、さらなる実験は以下の通りに動作するよう示しています

pytest -k "-slow -long" 

--collect-onlyオプションを使用すると、実験をスピードアップ)

+3

を実行している他のテストとなりました。私は 'pytest -k' -low-long''を試して、' py.test:error:argument -k:expected one argument'を返しました。 – DMfll

4

マークデコレータを積み重ねることもできます。

@pytest.mark.slow 
@pytest.mark.main 
def test_myfunction(): 
    pass 

次に、py.test -m "slow and main"と呼ばれ、両方のデコレータのテストだけが呼び出されました。

py.test -m "not (slow and main)"はおそらく、APIが変更された