2017-07-13 8 views
0

異なるデバイスで同じテストを実行する必要があります。デバイスのIPアドレスを与えるためにフィクスチャを使用し、フィクスチャがリクエストとして提供したIPに対して実行されるすべてのテストを実行します。しかし、同時に、結果を迅速に分析するために、テスト名にIPアドレスを追加する必要があります。 pytestの結果はすべてのパラメータで同じテスト名になりますが、使用されるパラメータがわかるログまたは文でのみ、fixtureパラメータに基づいてテスト名にparamを追加することによってtestnameを変更できますか?fixtureのパラメータに基づいてpytestでテスト名の名前を変更する方法

class TestClass: 

    def test1(): 
     pass 

    def test2(): 
     pass 

すべてのデバイスに対してテストクラス全体を実行する必要があります。すべてのテストメソッドは、デバイスごとに順番に実行する必要があります。パラメタサイクルで各テストを実行することはできません。パラメータサイクルでテストクラス全体を実行する必要があります。これはフィクスチャの実装で実現しましたが、テストの名前を変更できませんでした。

+0

パラメータを使用する必要があります。 –

答えて

0

テスト名を変更する必要はありません。説明しているユースケースは、パラメータ化されたフィクスチャのためのものです。

pytest docsによれば、ここではテストの実行例を示します。フィクスチャの値がテストの名前の直後の失敗出力にどのように含まれているかに注目してください。これにより、どのテストケースが失敗しているのかが明らかになります。

$ pytest 
======= test session starts ======== 
platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y 
rootdir: $REGENDOC_TMPDIR, inifile: 
collected 3 items 

test_expectation.py ..F 

======= FAILURES ======== 
_______ test_eval[6*9-42] ________ 

test_input = '6*9', expected = 42 

    @pytest.mark.parametrize("test_input,expected", [ 
     ("3+5", 8), 
     ("2+4", 6), 
     ("6*9", 42), 
    ]) 
    def test_eval(test_input, expected): 
>  assert eval(test_input) == expected 
E  AssertionError: assert 54 == 42 
E  + where 54 = eval('6*9') 

test_expectation.py:8: AssertionError 
======= 1 failed, 2 passed in 0.12 seconds ======== 
+0

私は質問を修正し、正確なシナリオを明確にしました。提案はありますか? – karthik

関連する問題