Czasami chcę po prostu wstawić kilka instrukcji drukowania do mojego kodu i zobaczyć, co zostanie wydrukowane, kiedy to wykonam. Mój zwykły sposób na „ćwiczenie” to z istniejącymi testami pytań. Ale kiedy je uruchamiam, nie widzę żadnego standardowego wyjścia (przynajmniej z PyCharm, mojego IDE).
Czy istnieje prosty sposób, aby zobaczyć standardowe wyjście podczas uruchamiania zapytania?
Odpowiedzi:
-s
Przełącznik wyłącza przechwytywanie per-testu.źródło
-s
=--capture=no
W upvoted komentarzu do akceptowanej odpowiedzi , Joe pyta:
W UNIX jest to powszechnie określane jako teeing . Idealnie, teeing zamiast przechwytywania byłby domyślnym py.test. Idealnie, ani py.test, ani żadna istniejąca wtyczka py.test innej firmy (... o której wiem, w każdym razie ) obsługuje teeing - pomimo że Python trywialnie wspiera teeing out-of-the-box .
Łapanie małp py.test, aby zrobić coś nieobsługiwanego, nie jest trywialny. Dlaczego? Ponieważ:
_pytest
pakiet nie ma być importowany z zewnątrz. Próba zrobienia tego bez wiedzy o tym, co robisz, zwykle powoduje, żepytest
pakiet publiczny podnosi niejasne wyjątki w czasie wykonywania. Bardzo dziękuję, test py. Naprawdę solidna architektura, którą tam masz._pytest
API w sposób bezpieczny, trzeba to zrobić przed uruchomieniem publicznegopytest
uruchomiony pakiet przez zewnętrznegopy.test
polecenia. Nie możesz tego zrobić we wtyczce (np. Wconftest
module testowym najwyższego poziomu ). Zanim py.test leniwie zacznie dynamicznie importować wtyczkę, każda klasa py.test, którą chciałeś załatać, już dawno została utworzona - i nie masz dostępu do tej instancji. Oznacza to, że jeśli chcesz, aby łatka małpy została znacząco zastosowana, nie możesz już bezpiecznie uruchomić zewnętrznegopy.test
polecenia. Zamiast tego musisz zawinąć uruchomienie tego polecenia za pomocą niestandardowych narzędzi konfiguracyjnychtest
polecenie, które (w kolejności):_pytest
interfejs API.pytest.main()
celu uruchomieniapy.test
polecenia.Ta odpowiedź zawiera łatki py.test
-s
i--capture=no
opcje przechwytywania stderr, ale nie stdout. Domyślnie te opcje nie wychwytują stderr ani stdout. Oczywiście nie jest to zbyt ekscytujące. Ale każda wielka podróż zaczyna się od żmudnego prequela, o którym wszyscy zapomną za pięć lat.Czemu to robić? Teraz ci powiem. Mój pakiet testowy oparty na py.test zawiera powolne testy funkcjonalne. Wyświetlanie standardowego przebiegu tych testów jest pomocne i uspokajające, zapobiegając sięgnięciu po leycec,
killall -9 py.test
gdy kolejny długotrwały test funkcjonalny nic nie robi przez wiele tygodni. Wyświetlanie stderr tych testów uniemożliwia jednak py.test zgłaszanie śledzenia wyjątków w przypadku niepowodzeń testu. Co jest całkowicie nieprzydatne. Dlatego zmuszamy py. Test do przechwytywania stderr, ale nie stdout.Zanim do tego przejdziemy, ta odpowiedź zakłada, że masz już niestandardowe
test
polecenie setuptools wywołujące py.test. Jeśli nie, zapoznaj się z podsekcją Ręczna integracja dobrze napisanej strony dobrych praktyk py.test .Czy nie instalować pytest-runner , a setuptools osób trzecich plugin zapewnienie zwyczaj setuptools
test
komendy również powołując py.test. Jeśli pytest-runner jest już zainstalowany, prawdopodobnie będziesz musiał odinstalować ten pakiet pip3, a następnie zastosować ręczne podejście opisane powyżej.Zakładając, że postępowałeś zgodnie z instrukcjami podanymi powyżej w Integracji ręcznej , twoja baza kodu powinna teraz zawierać
PyTest.run_tests()
metodę. Zmodyfikuj tę metodę, aby przypominała:Aby włączyć tę łatkę dla małp, uruchom py.test w następujący sposób:
Stderr, ale nie stdout, zostanie teraz przechwycony. Sprytne!
Rozciągnięcie powyższej łatki małpy na tee stdout i stderr pozostawia się jako ćwiczenie dla czytelnika z beczką pełną wolnego czasu.
źródło
Podczas uruchamiania testu skorzystaj z
-s
opcji. Wszystkie instrukcje drukowaniaexampletest.py
zostaną wydrukowane na konsoli po uruchomieniu testu.źródło
Zgodnie z dokumentacją pytest wersja 3 pytest może tymczasowo wyłączyć przechwytywanie w teście:
źródło
pytest przechwytuje stdout z poszczególnych testów i wyświetla je tylko pod pewnymi warunkami, wraz z podsumowaniem testów, które drukuje domyślnie.
Dodatkowe informacje podsumowujące można wyświetlić za pomocą opcji „-r”:
pokazuje przechwycony wynik pozytywnych testów.
pokazuje przechwycone wyjście nieudanych testów (zachowanie domyślne).
Formatowanie wyjścia jest ładniejsze przy pomocy -r niż przy -s.
źródło
Spróbuj
pytest -s -v test_login.py
uzyskać więcej informacji w konsoli.-v
to jest krótkie--verbose
-s
oznacza „wyłącz wszystkie przechwytywanie”źródło
Jeśli używasz PyCharm IDE, możesz uruchomić ten test indywidualny lub wszystkie testy za pomocą paska narzędzi Uruchom. Okno narzędzia Uruchom wyświetla dane wyjściowe wygenerowane przez aplikację i można wyświetlić wszystkie instrukcje drukowania w ramach wyników testu.
źródło
pytest --capture=tee-sys
został niedawno dodany. Możesz przechwytywać, a także wyświetlać dane wyjściowe na stdout / err.źródło
Inne odpowiedzi nie działają. Jedyny sposób, aby zobaczyć przechwycony wyjście wykorzystuje następujące flagi:
źródło
--show-capture=all
jest wartością domyślną. Dodanie go nic nie ma wpływu.