2016-03-21 17 views
12

Zanim zacznę wykonywać testy w moim projekcie Pythona, czytam niektóre zmienne środowiskowe i ustawiam niektóre zmienne z odczytanymi wartościami. Moje testy będą działać w pożądanym środowisku na podstawie odczytanych wartości.Jak przekazać zmienne środowiskowe do pytest

dla np: Załóżmy, że zmienne środowiskowe są nazywane „ENV_NAME” i „ENV_NUMBER”

Teraz chciałbym uruchomić testy z użyciem py.test

Gdybym ciężko kodowych tych zmiennych środowiskowych, na przykład: ENV_NAME = "inscenizacja", ENV_NUMBER = "5" w moim kodzie, a następnie uruchomić testy, wykonując polecenie py.test w katalogu głównym katalogu projektu, wszystkie testy przebiegają pomyślnie.

Ale nie chcę kodować tych wartości. Czy istnieje sposób, mogę wysyłać te zmienne środowiskowe jako argumenty wiersza polecenia dla py.test?

Myślałam więcej w liniach od

py.test -ENV_NAME = 'inscenizacji' -ENV_NUMBER = '5'. Ale to nie działa.

Proszę pomóc! Dziękuję Ci!

Odpowiedz

6

W końcu znalazłem odpowiedź, której szukałem.

możemy ustawić zmienne środowiskowe jak to wcześniej testów uruchomionych przy użyciu py.test

ENV_NAME = 'inscenizację' ENV_NUMBER = '5' py.test

+1

Jak korzystać z niego później? –

+0

po prostu dołącz symbol $ przed zmienną. Na przykład $ ENV_NAME – sridhar249

6

Istnieje kilka sposobów można to osiągnąć

1) Jeśli nie chcesz używać zmiennej środowiskowej, można użyć pytest addoptions jak https://pytest.org/latest/example/simple.html

2) Można napisać skrypt otoki tak aby nazywamy zmienne enviornment

import os 
    import py 
    env_name = os.environ["ENV_NAME"] 
    env_no = os.environ["ENV_NUMBER"] 
    pytest_args=(env_name,env_no) 
    pytest.main('-s' ,pytest_args,test_file.py) 

w test_file.py można użyć

env_n, env_n = pytest.config.getoption('pytest_args') 

3) metoda alternatywna, jeśli chcesz po prostu przejść data nie jest ustawiona enviornment zmienna

w wierszu poleceń można użyć go jako

py.test --testdata ="ENV_NAME:staging,ENV_NUMBER:5" 

można użyć w pliku testowego

pytest_params = pytest.config.getoption('testdata') 
params = pytest_params.split(":") 
param_dict = dict(params[i:i+2] for i in range(0,len(params),2)) 
env_name = param_dict["ENV_Name"] 
+1

Wygląda na to, ** 1 ** to zapisz jako * * 3. ** –

+0

Prawie !! Z wyjątkiem pierwszego urządzenia wywołanego z konftestu, drugi jest wywoływany bezpośrednio z testu. –

12

Inną alternatywą jest użycie wtyczki pytest-env. To może być skonfigurowany tak:

[pytest] 
env = 
    HOME=~/tmp 
    D:RUN_ENV=test 

przedrostek D: umożliwia ustawienie wartości domyślnej, a nie zastępują istniejące zmienne przekazywane do py.test.

Uwaga: można jawnie uruchomić pytest z niestandardowych config, jeśli tylko czasami trzeba uruchomić specjalistycznego środowiska skonfigurować.

pytest -c custom_pytest.ini 
Powiązane problemy