2016-10-06 19 views
1

私は自分のセレンテストにpytestを使用しており、単一のテストで複数のアサーションを持つことが可能かどうかを知りたがっていますか?pytestで複数のアサーションを実行できますか?

私は複数の値を比較する関数を呼び出し、一致しないすべての値についてテストするようにします。私が抱えている問題は、 "assert"または "pytest.fail"を使用すると、一致しない値が見つかるとすぐにテストが停止するということです。

テストを実行中に実行し、一致しないすべての値をレポートする方法はありますか?

+1

あなただけ構築することはできませんエラーのリストを作成し、リストが空であると主張しますか? –

+0

私は個々のエラーについて報告したいので、レポートには一致しなかった値のリストが表示されます – ChrisG29

+0

うーん...不一致のリストを構築してそのリストをアサインする方法は?空の場合(エラーの場合はそうではありません) - あなたは "期待された[] [1,2,7,10]のようなリストを取得するでしょうか、そうでないものがありますか? –

答えて

2

Jon Clementsがコメントしたように、エラーメッセージのリストを記入し、リストが空であると主張して、アサーションがfalseのときに各メッセージを表示することができます。オリジナルのアサーションが満たされない場合の条件にerrorsリストにメッセージを追加if文に置き換えられ

def test_something(self): 
    errors = [] 

    # replace assertions by conditions 
    if not condition_1: 
     errors.append("an error message") 
    if not condition_2: 
     errors.append("an other error message") 

    # assert no error message has been registered, else print messages 
    assert not errors, "errors occured:\n{}".format("\n".join(errors)) 

具体的には、そのようなものである可能性があります。 次に、errorsリストが空であることをアサートし(空のリストはFalseです)、アサーションメッセージにerrorsリストの各メッセージが含まれるようにします。


また、nose documentationに記載されているようにテストジェネレータを作成することもできます。私はそれを記述するpytest docを見つけませんでしたが、pytestはこれをまさに鼻と同じように扱っていました。

+0

ヘルプは、完全に動作しました – ChrisG29

2

Delayed assertという別の方法があります。これは、@Tryphが提供しているものとほぼ同じですが、スタックトレースが優れています。

+0

おかげで、どこに私はdelayed_assertライブラリをダウンロードすることができます知っていますか?私は周りを見てきたし、それを見つけることができませんでした – ChrisG29

+0

あなたは参考文献としてこれを使用します。 /github.com/pr4bh4sh/python-delayed-assert – pr4bh4sh

+0

これは、 '' 'pip install https:// github.com/pr4bh4sh/python-delayed-assert'''でインストールできます。 – pr4bh4sh

2

pytest-assume"テストごとに複数の失敗を許容するpytestプラグイン"です。ここで(READMEから取られた)あなたがそれを使用する方法の例です:

import pytest 

@pytest.mark.parametrize(('x', 'y'), [(1, 1), (1, 0), (0, 1)]) 
def test_simple_assume(x, y): 
    pytest.assume(x == y) 
    pytest.assume(True) 
    pytest.assume(False) 

アサーションの一部が故障していても、それらはすべてが評価され、報告を受ける:

======================================== FAILURES ========================================= 
_________________________________ test_simple_assume[1-1] _________________________________ 
> pytest.assume(False) 
test_assume.py:7 

y   = 1 
x   = 1 
---------------------------------------- 
Failed Assumptions:1 
_________________________________ test_simple_assume[1-0] _________________________________ 
> pytest.assume(x == y) 
test_assume.py:5 

y   = 0 
x   = 1 
> pytest.assume(False) 
test_assume.py:7 

y   = 0 
x   = 1 
---------------------------------------- 
Failed Assumptions:2 
_________________________________ test_simple_assume[0-1] _________________________________ 
> pytest.assume(x == y) 
test_assume.py:5 

y   = 1 
x   = 0 
> pytest.assume(False) 
test_assume.py:7 

y   = 1 
x   = 0 
---------------------------------------- 
Failed Assumptions:2 
================================ 3 failed in 0.02 seconds ================================= 
関連する問題