2016-02-12 4 views
8

wiem, że py.test może przetestować jeden moduł jeśli robię:Invoke pytest z Pythona do modułu obecnej tylko

py.test mod1.py 

Albo mogę powołać pytest wewnątrz python:

import pytest 
pytest.run(['mod1.py']) 

Can Zrobiłem to wewnątrz pythona i pozwoliłem mu uruchomić bieżący moduł? Myślę, że mogę zrobić:

import pytest 
import os 
pytest.main([os.path.basename(__file__)]) 

Zastanawiam się jednak, czy jest to najbardziej "pythonic" sposób to zrobić. Dzięki!

+0

Podane przykłady dotyczą pliku, ale pytanie, które zadajesz, dotyczy modułu. Proszę wyczyścić to, czego dokładnie chcesz –

Odpowiedz

7

Twoje wersje nie pozwalają przekazywać dodatkowych argumentów do pytest (np. Zezwól na ./test_file.py -v). Spróbowałem po prostu

import sys 


if __name__ == '__main__': 
    pytest.main(sys.argv) 

i wydaje się, że to wystarczy. sys.argv[0] to nazwa skryptu (tzn. __file__, ewentualnie jako ścieżka względna), więc ogranicza wywołanie skryptu, a sys.argv[1:] zawiera dodatkowe argumenty przekazane w wierszu polecenia.

Każdy lepszy pomysł został doceniony!