2017-01-10 5 views
3

Im folgende Beispiel, wie gehe ich args von run_tests() zu pytest.main(...) so, dass ich args für die Prüfverfahren von TestFooBar in test_module.py verwenden kann?Wie übergeben Sie Argumente an pytest, wenn pytest programmgesteuert von einem anderen Modul ausgeführt wird?

my_module.py

def run_tests(args): 
    # How do I pass parameter 'args' to pytest here. 
    pytest.main(['-q', '-s', 'test_module.py::TestFooBar']) 

test_module.py

class TestFooBar(): 

    # How do I get 'args' of 'run_tests()' from 'my_module.py' here. 

    @pytest.mark.parametrize("args", [args]) 
    def test_something(args): 
     assert 'foo' == args['foo'] 

    @pytest.mark.parametrize("args", [args]) 
    def test_something_else(args): 
     assert 'bar' == args['bar'] 

Antwort

1

Wenn Sie pytest.main ausführen die Sie das Äquivalent tun py.test von der Kommandozeile aufrufen, so dass die Die einzige Möglichkeit, die mir bekannten Argumente zu übergeben, ist ein Kommandozeilenparameter. Damit dies möglich ist, müssen Ihre Parameter in und aus String konvertiert werden können.

Grundsätzlich bedeutet dies eine conftest.py mit der

def pytest_addoption(parser): 
    parser.addoption('--additional_arguments', action='store', help='some helptext') 

def pytest_configure(config): 
    args = config.getoption('additional_arguments') 

Jetzt etwas mit args folgenden erstellen: es deserialisieren es eine globale Variable machen, machen es zu einem Fixpunkt, was Sie wollen. Geräte von conftest.py werden für den gesamten Test verfügbar sein.

Unnötig zu sagen, dass Ihr Anruf nun die neuen Parameter enthalten soll:

pytest.main(['-q', '-s', '--additional_arguments', args_string, 'test_module.py::TestFooBar']) 
Verwandte Themen