Jak skonfigurować PyCharm do uruchamiania testów py.test?

162

Chcę zacząć pisać testy jednostkowe dla mojego kodu w Pythonie, a framework py.test wydaje się lepszym rozwiązaniem niż dołączony unittest w Pythonie . Więc dodałem katalog "testy" do mojego projektu i dodałem do niego test_sample.py . Teraz chcę skonfigurować PyCharm, aby uruchamiał wszystkie testy w moim katalogu „tests”.

PyCharm rzekomo obsługuje py.test w swoim programie uruchamiającym testy. Powinieneś być w stanie stworzyć konfigurację uruchom / debug, aby uruchomić swoje testy, a PyCharm ma rzekomo okno dialogowe „tworzenia konfiguracji” specjalnie dla py.test . Ale to jest pełny zakres ich dokumentacji na ten temat i nie mogę nigdzie znaleźć tego rzekomego okna dialogowego.

Jeśli kliknę prawym przyciskiem myszy katalog w oknie narzędzia projektu, powinienem zobaczyć element menu „Utwórz <nazwa>”, ale jedyną pozycją menu zaczynającą się od „Utwórz” jest „Utwórz konfigurację uruchamiania”. Dobra, może dokumentacja jest po prostu błędna, a „Utwórz konfigurację uruchomienia” brzmi obiecująco. Niestety, jedynymi dwoma pozycjami w jego podmenu są "Unittests w C: \ mypath ..." i "Doctests w C: \ mypath ...", z których żadna nie ma zastosowania - nie używam ani unittest, ani doctest. Nie ma pozycji menu dla py.test.

Jeśli otworzę plik test_sample.py i kliknę prawym przyciskiem myszy w oknie edytora, otrzymam obiecane pozycje menu „Utwórz <nazwa>”: jest „Utwórz 'Unittests w test_sa ...'...”, a następnie „Uruchom 'Unittests in test_sa ...' "i" Debug 'Unittests in test_sa ...' ". Więc znowu, wszystko to jest specyficzne dla niezatwierdzonego frameworka; nic dla py.test.

Jeśli spróbuję pozycji menu, które mówią „nie zaznaczaj”, pojawia się okno dialogowe z opcjami „Nazwa”, „Typ”, pole grupy „Testy” z „Folder” i „Wzorzec” oraz „Skrypt” i „Klasa” "i" Funkcja "itp. To brzmi dokładnie tak, jak jest to udokumentowane jako okno dialogowe dodawania konfiguracji do testu jednostkowego Pythona , a nie jak opcje" Nazwa "i" Test do uruchomienia "i" Słowa kluczowe ", które mają się pojawić w konfiguracji okna dialogowego py.test . W oknie dialogowym nie ma nic, co umożliwiłoby przełączenie, które ramy testowe dodam.

Używam PyCharm 1.5.2 w systemie Windows z Python 3.1.3 i pytest 2.0.3. Mogę z powodzeniem uruchomić py.testmoje testy z wiersza poleceń, więc nie jest to coś prostego, jak niepoprawna instalacja pytesta.

Jak skonfigurować PyCharm do uruchamiania moich testów py.test?

Joe White
źródło

Odpowiedzi:

228

Przejdź do Plik | Ustawienia | Narzędzia | Python Integrated Tools i zmień domyślny program uruchamiający testy na py.test. Wtedy otrzymasz opcję py.test do tworzenia testów zamiast niezatwierdzonego.

yole
źródło
Ha! Nie wiem, jak to przegapiłem. Jednak to tylko w połowie działa: jeśli kliknę prawym przyciskiem myszy folder w oknie narzędzia projektu, daje mi to opcję tworzenia doctestów, a nie py.tests. (Napiszę raport o błędzie.) Ale zadziała, jeśli kliknę prawym przyciskiem myszy w edytorze, a następnie zmienię „Skrypt:” na nazwę katalogu.
Joe White
3
Pamiętaj również, aby oznaczyć swój katalog źródłowy jako „źródła root”: jetbrains.com/pycharm/webhelp/content-root.html
Inti
1
Czy istnieje sposób, aby ustawić to dla całego projektu (lub wszystkich projektów), a nie dla poszczególnych modułów?
OrangeDog
1
Wygląda na File | Settings | Tools | Python Integrated Toolsto, że jest ona dostępna tylko w ustawieniach projektu, a nie w ustawieniach domyślnych w PyCharm 5.
killthrush
2
Po skonfigurowaniu, jak właściwie przeprowadzasz testy?
Chris Anderson,
51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- Wybierz py.testjakoDefault test runner .
  2. Jeśli używasz Django Preference -> Languages&Frameworks -> Django- włącz zaznaczenieDo not use Django Test runner
  3. Wyczyść wszystkie istniejące wcześniej konfiguracje testowe z Run/Debug configuration , w przeciwnym razie testy zostaną uruchomione z tymi starszymi konfiguracjami.
  4. Aby ustawić kilka domyślnych dodatkowych argumentów, zaktualizuj domyślną konfigurację py.test. Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments
Sergey Kubrak
źródło
2
W PyCharm 2017.3.2, nawet po ustawieniu py.test jako domyślnego, po kliknięciu prawym przyciskiem myszy projektu w panelu Projekty i wybraniu z New => Python Filelisty Kind:rozwijanej dostępne są tylko: plik Python, Test jednostkowy, Python stub, a nie Pytest. Przeszukałem wszystkie lokalizacje wymienione w powyższych wątkach. czego mi brakuje?
Tom Baker,
Plik Pythona, Test jednostkowy, Python stub - są to pliki Pythona, z pewnymi predefiniowanymi danymi, możesz dodać własne, przeczytaj ten temat jetbrains.com/help/pycharm/… . Ale to nie ma wpływu na uruchomienie testu py.test, możesz utworzyć tylko plik Pythona i będzie działać. W tym temacie omawiamy, jak skonfigurować tę funkcję jetbrains.com/help/pycharm/running-tests.html, aby uruchomić py.test.
Sergey Kubrak
W najnowszym PyCharm, „Defaults” nosi nazwę „Templates”
AgDude
19

Myślę, że musisz użyć elementu Run / Debug Configuration na pasku narzędzi. Kliknij go i „Edytuj konfiguracje” (lub alternatywnie użyj opcji menu Uruchom-> Edytuj konfiguracje). W sekcji „Domyślne” w lewym okienku znajduje się element „py.test”, który moim zdaniem jest tym, czego potrzebujesz.

Zauważyłem również, że podręcznik nie pasuje do tego interfejsu użytkownika. Mam nadzieję, że dobrze zrozumiałem problem i to pomaga.

Scott Griffiths
źródło
4
Strona „Defaults> py.test” tak naprawdę nie dała mi żadnego sposobu na utworzenie konfiguracji. Ale gdybym przeszedł do okna dialogowego Edytuj konfiguracje, kliknąłem przycisk paska narzędzi „+”, wybrałem „py.test” i ustawiłem „Katalog roboczy” na katalog zawierający moje testy, który utworzył konfigurację, która uruchomiłaby moje testy. Więc +1 za wskazanie mi pomocnej części programu. Zaakceptowaną odpowiedź dam @yole, ponieważ uważam, że zmiana domyślnego na py.test jest lepszym rozwiązaniem - powinno pozwolić mi uruchomić tylko bieżący plik i tym podobne.
Joe White
@JoeWhite Proszę dodać to jako odpowiedź, ponieważ było to pomocne
Hariom Singh
W oknie edycji konfiguracji, po wybraniu konfiguracji pytest, musiałem również wybrać opcję Targetbycia Script athi skierować ją do katalogu głównego folderu testów
RAbraham
Jest to o wiele lepszy sposób, ponieważ otwiera inne funkcje, takie jak przekazywanie argumentów wiersza poleceń itp.
chirag nayak
13

Oto jak to działa z pytestem 3.7.2(zainstalowanym przez pip) i pycharmami 2017.3:

  1. Iść do edit configurations

  1. Dodaj nową konfigurację uruchamiania i wybierz py.test

  1. W szczegółach konfiguracji uruchomienia musisz ustawić target= pythoni nienazwane pole poniżej na tests. Wygląda na to, że to jest nazwa twojego folderu testowego. Nie jest to zbyt trudne. Polecam również -sargument, aby w przypadku debugowania testów konsola zachowywała się poprawnie. Bez argumentu pytest przechwytuje dane wyjściowe i powoduje błąd konsoli debugowania.

  1. Mój folder testów wygląda tak. To jest tuż poniżej katalogu głównego mojego projektu ( my_project/tests).

  1. Mój foobar_test.pyplik: (import nie jest potrzebny):
def test_foobar ():
    print ("witam pytest")
    assert True
  1. Uruchom go za pomocą normalnego polecenia uruchamiania

Benjamin Crouzier
źródło
Czy jest możliwość uruchomienia tylko testu z bieżącego pliku? Dowiedziałem się tylko, że muszę zmienić nazwę pliku w ustawieniach konfiguracji za każdym razem, gdy otwieram inny plik
algot
@algot Nie wiem tego na czubku głowy. Spójrz na to: jetbrains.com/help/pycharm/performing-tests.html i to: jetbrains.com/pycharm/guide/tips/run-single-test
Benjamin Crouzier
5

Dla pewności jest to słabo udokumentowane. Po dodaniu nowej konfiguracji z ustawień domyślnych będziesz mógł uruchamiać skrypt „/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py”. Nie jest to udokumentowane i ma swoje własne pomysły dotyczące argumentów wiersza poleceń.

Możesz:

  1. Spróbuj się pobawić, odwróć skrypt i zobacz, czy w jakiś sposób możesz sprawić, by py.test akceptował argumenty. To może zadziałać; tak się nie stało przez pierwsze pół godziny dla mnie.
  2. Po prostu uruchom "py.test * .py" z konsoli.

Co dziwne, trudno będzie znaleźć jakąkolwiek dyskusję, ponieważ JetBrains dobrze radzi sobie z bombardowaniem algorytmów Google własnymi stronami.

Charles Merriam
źródło
3

znajdź ten wątek, gdy trafiłem na to samo pytanie i znalazłem rozwiązanie pycharm version: 2017.1.2 przejdź do "Preferencje" -> "Narzędzia" -> "Zintegrowane narzędzia Pythona" i ustaw domyślny program uruchamiający testy z prawego panelu bocznego jako py.test rozwiąż mój problem

jacobcan118
źródło
To zadziała, ale wtedy musisz kliknąć prawym przyciskiem myszy nazwę pliku skryptu testowego w oknie projektu. Jeśli zamiast tego klikniesz prawym przyciskiem myszy obszar edytora plików tego samego skryptu testowego, nadal niestety wyświetla się stare domyślne narzędzie (Unittests). To denerwujące, ponieważ nie mogę określić indywidualnej funkcji, którą chcę przetestować.
Hongyu Zhang
3

W pycharm 2019.2 możesz to po prostu zrobić, aby uruchomić wszystkie testy:

  1. Uruchom> Edytuj konfiguracje> Dodaj pytest
  2. Ustaw opcje, jak pokazano na poniższym zrzucie ekranu zrzut ekranu konfiguracji
  3. Kliknij Debuguj (lub uruchom pytest używając np. Skrótów klawiszowych Shift + Alt + F9)

Aby uzyskać lepszą integrację pytest z pycharm, zobacz https://www.jetbrains.com/help/pycharm/pytest.html

gebbissimo
źródło
2

Używam 2018.2

Robię Uruchom -> Edytuj konfiguracje ... Następnie kliknij + w lewym górnym rogu okna dialogowego. Wybierz "testy pythona" -> py.test Następnie nadam mu nazwę typu "Wszystkie testy z py.test"

Wybieram Target: nazwa modułu i umieszczam w module, w którym są moje testy (to jest dla mnie „testy”) lub w module, w którym cały mój kod jest, jeśli moje testy są zmieszane z moim kodem. To mnie podrywało.

Ustawiłem interpreter Pythona.

Ustawiłem katalog roboczy na katalog projektu.

Brian C.
źródło
0

Ze specjalną konfiguracją Pythona Conda, która obejmowała instalację pip dla py.test oraz użycie dodatku Specs (opcja --spec) (dla Rspec jak ładny język podsumowania testów), musiałem zrobić;

1.Edytuj domyślny py.test, aby zawierał opcję = --spec, co oznacza, że ​​użyj wtyczki: https://github.com/pchomik/pytest-spec

2. Utwórz nową konfigurację testową za pomocą py.test. Zmień jego interpreter Pythona tak, aby używał ~ / anaconda / envs / swój wybór tłumaczy, np. Py27 dla moich nazw.

3. Usuń konfigurację testu „unittests”.

4. Teraz domyślną konfiguracją testową jest py.test z moimi cudownymi wyjściami w stylu Rspec. Kocham to! Dziękuje wszystkim!

Dokumentacja ps Jetbrains dotycząca konfiguracji uruchamiania / debugowania jest dostępna tutaj: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test

AnneTheAgile
źródło
0

W 2018.3 wydaje się, że automatycznie wykrywa, że ​​używam pytest, co jest fajne, ale nadal nie pozwala na uruchamianie z najwyższego poziomu projektu. Musiałem uruchomić pytestdla każdego testskatalogu indywidualnie.

Jednak odkryłem, że mogę wybrać jedną z konfiguracji i ręcznie edytować ją, aby działała w katalogu głównym projektu i że to zadziałało. Muszę ręcznie wybrać go z listy rozwijanej Konfiguracje - nie mogę kliknąć prawym przyciskiem myszy folderu głównego w panelu Projekt. Ale przynajmniej pozwala mi przeprowadzić wszystkie testy naraz.

sfjac
źródło
0

Włącz projekt Pytest for you

  1. Otwórz Ustawienia / Preferencje | Narzędzia | Okno dialogowe ustawień zintegrowanych narzędzi Python, jak opisano w sekcji Wybieranie struktury testowej.
  2. W polu Default test runner wybierz pytest .
  3. Kliknij OK, aby zapisać ustawienia.

wprowadź opis obrazu tutaj

Milo Chen
źródło