2016-02-23 12 views
5

Hallo Wie kann ich Testmethode dynamisch für eine Liste oder für die Anzahl der Dateien generieren. Angenommen, ich habe file1, file2 und filen mit dem Eingabewert in json. Jetzt muss ich wie unter den gleichen Test für mehrere Werte laufen,pytest dynamisch Testmethode generieren

class Test_File(unittest.TestCase): 
    def test_$FILE_NAME(self): 
     return_val = validate_data($FILE_NAME) 
     assert return_val 

ich den folgenden Befehl bin mit dem py.test laufen html und junit Bericht

py.test test_rotate.py --tb=long --junit-xml=results.xml --html=results.html -vv 

Derzeit zu generieren Ich bin manuell definieren die Methoden, wie unten,

def test_lease_file(self): 
    return_val = validate_data(lease_file) 
    assert return_val 

def test_string_file(self): 
    return_val = validate_data(string_file) 
    assert return_val 

def test_data_file(self): 
    return_val = validate_data(data_file) 
    assert return_val 

Bitte lassen Sie mich wissen, wie ich py Test dynamisch angeben können test_came Methode zu erzeugen, während Berichte geben.

ich genau erwarte, die in diesem Blog erwähnt wird „http://eli.thegreenplace.net/2014/04/02/dynamically-generating-python-test-cases

Aber oben Blog verwendet Unittest und wenn ich, dass ich nicht in der Lage bin html und junit Bericht

zu erzeugen, wenn wir Vorrichtungen verwenden, wie unter I wie sein erfordern 2 Parameter erhalten Fehler,

test_case = [] 
class Memory_utlization(unittest.TestCase): 
@classmethod 
def setup_class(cls): 
    fname = "test_order.txt" 
    with open(fname) as f: 
     content = f.readlines() 
    file_names = [] 
    for i in content: 
     file_names.append(i.strip()) 
    data = tuple(file_names) 
    test_case.append(data) 
    logging.info(test_case) # here test_case=[('dhcp_lease.json'),('dns_rpz.json'),] 

@pytest.mark.parametrize("test_file",test_case) 
def test_eval(self,test_file): 
    logging.info(test_case) 

Wenn ich die oben ausführen ich die folgende Fehlermeldung erhalten,

>    testMethod() 
E    TypeError: test_eval() takes exactly 2 arguments (1 given) 
+0

ich denke, das Ihnen helfen könnte? https://pytest.org/latest/parametrize.html – adarsh

Antwort

6

This könnte Ihnen dabei helfen.

Ihre Testklasse würde dann folgendermaßen aussehen

class Test_File(): 
    @pytest.mark.parametrize(
     'file', [ 
      (lease_file,), 
      (string_file,), 
      (data_file,) 
     ] 
    ) 
    def test_file(self, file): 
     assert validate_data(file) 
+0

Wenn ich keine Klasse habe, funktioniert es gut, wie in pytest Fixtures doc erwähnt. Aber wenn ich Setup-Methode und Self verwenden, scheitert es mit Fehler TypeError: test_eval() dauert genau 2 Argumente (1 gegeben) –

+0

Könnten Sie das als Bearbeitung zu Ihrer Frage hinzufügen, wie es ein bisschen unklar für mich ist, was Sie Fragen – adarsh

+0

@NaggappanRamukannan, vergessen Sie nicht, '' self'' zu entfernen –