2016-11-30 22 views
9

Mam kod i muszę przekazać argumenty takie jak nazwa z terminala. Oto mój kod i jak przekazywać argumenty. Dostaję błąd. Plik nie został znaleziony. Nie jestem w stanie zrozumieć.Jak przekazywać argumenty w pytest przez linię poleceń

Próbowałem komendy w terminalu: pytest <filename>.py -almonds powinienem uzyskać nazwę drukowane jako „migdały”

@pytest.mark.parametrize("name") 
def print_name(name): 
    print ("Displaying name: %s" % name) 

Odpowiedz

2

Według official document, znak dekorator powinien wyglądać jak poniżej.

@pytest.mark.parametrize("arg1", ["StackOverflow"]) 
def test_mark_arg1(arg1): 
    assert arg1 == "StackOverflow" #Success 
    assert arg1 == "ServerFault" #Failed 

Run

python -m pytest <filename>.py 
  • Note1: nazwa funkcji musi rozpoczynać się test_
  • Uwaga2: pytest przekieruje stdout (print), a tym samym bezpośrednio działa stdout nie będzie w stanie pokazać żadnych rezultatów na ekran. Ponadto nie ma potrzeby drukowania wyniku w funkcji w przypadkach testowych.
  • Uwaga 3: pytest to moduł prowadzony przez pytona, który nie jest w stanie uzyskać sys.argv bezpośrednio

Jeśli naprawdę chcesz wyjść na zewnątrz konfigurowalne argumentów, należy wdrożyć, że wewnątrz skryptu . (Na przykład, ładowanie zawartości pliku)

with open("arguments.txt") as f: 
    args = f.read().splitlines() 
... 
@pytest.mark.parametrize("arg1", args) 
... 
6

W swoim badaniu pytest, nie używaj @pytest.mark.parametrize:

@pytest.mark.unit 
def test_print_name(name): 
    print ("Displaying name: %s" % name) 

W conftest.py:

def pytest_addoption(parser): 
    parser.addoption("--name", action="store", default="default name") 


def pytest_generate_tests(metafunc): 
    # This is called for every test. Only get/set command line arguments 
    # if the argument is specified in the list of test "fixturenames". 
    option_value = metafunc.config.option.name 
    if 'name' in metafunc.fixturenames and option_value is not None: 
     metafunc.parametrize("name", [option_value]) 

Następnie można uruchomić z wiersz polecenia z argumentem wiersza poleceń:

pytest -s tests/my_test_module.py --name abc 
Powiązane problemy