2016-06-01 28 views
7

Meine Parameter bestimmen den Namen meines parametrisierten Pytests. Ich werde einige randomisierte Parameter für diese Tests verwenden. Damit meine Namen in Junit nicht durcheinander gebracht werden, möchte ich für jeden parametrisierten Test einen statischen Namen erstellen.Überschreiben eines pytest parametrisierten Funktionsnamens

Ist es möglich?

JUnit scheint einen Parameter zu haben: Changing names of parameterized tests

class TestMe: 
    @pytest.mark.parametrize(
     ("testname", "op", "value"), 
     [ 
      ("testA", "plus", "3"), 
      ("testB", "minus", "1"), 
     ] 
    ) 
    def test_ops(self, testname, op, value): 

ich request.node.name versucht zu überschreiben aber ich es nur während der Testausführung umbenennen.

Ich bin fast positiv, ich muss entweder ein Plugin oder ein Gerät schreiben. Was denkst du, wäre der beste Weg, dies zu tun?

Antwort

8

Sie suchen nach dem ids Argument von pytest.mark.parametrize:

Liste der String-IDs oder eine aufrufbar. Wenn Strings, entspricht jeder den Argvalues, so dass sie Teil der Test-ID sind. Wenn es aufrufbar ist, sollte es ein Argument (ein einzelner argvalue) nehmen und eine Zeichenfolge oder zurückgeben Keine.

Ihr Code aussehen würde

@pytest.mark.parametrize(
    ("testname", "op", "value"), 
    [ 
     ("testA", "plus", "3"), 
     ("testB", "minus", "1"), 
    ], 
    ids=['testA id', 'testB id'] 
) 
def test_industry(self, testname, op, value):