Come configuro PyCharm per eseguire i test py.test?


163

Voglio iniziare a scrivere unit test per il mio codice Python e il framework py.test sembra una scommessa migliore di quella unittest in bundle di Python . Quindi ho aggiunto una directory "test" al mio progetto e ho aggiunto test_sample.py ad esso. Ora voglio configurare PyCharm per eseguire tutti i test nella mia directory "test".

PyCharm supporta presumibilmente py.test nel suo runner di test. Dovresti essere in grado di creare una configurazione di esecuzione / debug per eseguire i test e PyCharm presumibilmente ha una finestra di dialogo "Crea configurazione" specifica per py.test . Ma questa è la portata completa della loro documentazione sull'argomento e non riesco a trovare questa presunta finestra di dialogo da nessuna parte.

Se faccio clic con il pulsante destro del mouse sulla directory nella finestra dello strumento Progetto, dovrei vedere una voce di menu "Crea <nome>", ma l'unica voce di menu che inizia con "Crea" è "Crea configurazione di esecuzione". Ok, forse la documentazione è sbagliata e "Crea configurazione di esecuzione" sembra promettente. Sfortunatamente, gli unici due elementi nel suo sottomenu sono "Unittests in C: \ mypath ..." e "Doctests in C: \ mypath ...", nessuno dei quali si applica - non sto usando né unittest né doctest. Non esiste alcuna voce di menu per py.test.

Se apro il mio test_sample.py e faccio clic con il tasto destro nella finestra dell'editor, ottengo le promesse voci di menu "Crea <nome>": c'è "Crea" Unittests in test_sa ...'... ", seguito da" Esegui 'Unittests in test_sa ...' "e" Debug 'Unittests in test_sa ...' ". Quindi, è tutto specifico per il quadro unittest; niente per py.test.

Se provo le voci di menu che dicono "unittest", ottengo una finestra di dialogo con le opzioni per "Nome", "Tipo", una casella di gruppo "Test" con "Cartella" e "Modello" e "Script" e "Classe "e" Funzione ", ecc. Sembra esattamente ciò che è documentato come finestra di dialogo per aggiungere una configurazione per Python Unit Test , e non come le opzioni" Nome "e" Test da eseguire "e" Parole chiave "che dovrebbero apparire nella configurazione per la finestra di dialogo py.test . Non c'è niente nella finestra di dialogo per cambiare il framework di test che sto aggiungendo.

Sto usando PyCharm 1.5.2 su Windows con Python 3.1.3 e pytest 2.0.3. Posso eseguire con successo i py.testmiei test dalla riga di comando, quindi non è qualcosa di semplice come Pytest non installato correttamente.

Come configuro PyCharm per eseguire i miei test py.test?

Risposte:


228

Vai a File | Impostazioni | Strumenti | Python Integrated Tools e modifica il runner di prova predefinito in py.test. Quindi otterrai l'opzione py.test per creare test invece di quello unittest.


Hah! Non so come mi sia perso. Funziona solo a metà, tuttavia: se faccio clic con il pulsante destro del mouse sulla cartella nella finestra dello strumento Progetto, mi dà la possibilità di creare doctest, non py.test. (Scriverò una segnalazione di bug.) Ma funziona se clicco con il tasto destro nell'editor e poi cambio "Script:" con il nome della directory.
Joe White,

3
Ricorda inoltre di contrassegnare la tua directory di origine come "radice di fonti": jetbrains.com/pycharm/webhelp/content-root.html
Inti

1
C'è un modo per impostare questo per l'intero progetto (o tutti i progetti) piuttosto che per modulo?
OrangeDog,

1
Sembra che File | Settings | Tools | Python Integrated Toolssia disponibile solo nelle Impostazioni progetto piuttosto che nelle Impostazioni predefinite in PyCharm 5.
killthrush

2
Una volta configurato, come si eseguono effettivamente i test?
Chris Anderson,

51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- Scegli py.testcome Default test runner.
  2. Se usi Django Preference -> Languages&Frameworks -> Django- Attiva la spuntaDo not use Django Test runner
  3. Cancella tutte le configurazioni di test esistenti in precedenza Run/Debug configuration, altrimenti i test verranno eseguiti con quelle configurazioni precedenti.
  4. Per impostare alcuni argomenti aggiuntivi predefiniti, aggiornare la configurazione predefinita di py.test. Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments

2
In PyCharm 2017.3.2, anche dopo aver impostato py.test come predefinito, quando faccio clic con il pulsante destro del mouse sul progetto nel pannello Progetti e seleziono New => Python File, l' Kind:elenco a discesa offre solo: file Python, Unit test, stub Python, non Pytest. Ho cercato in tutte le posizioni menzionate nei thread sopra. Cosa mi sto perdendo?
Tom Baker,

File Python, Unit test, Stub Python - sono file Python, con alcuni dati predefiniti, puoi aggiungerne uno tuo, leggi questo argomento jetbrains.com/help/pycharm/… . Ma questo non ha alcun effetto sull'esecuzione del test py.test, puoi creare solo un file Python e funzionerà. In questo argomento stiamo discutendo come configurare questa funzione jetbrains.com/help/pycharm/running-tests.html per eseguire py.test.
Sergey Kubrak,

Nell'ultimo PyCharm, "Predefiniti" si chiama "Modelli"
AgDude,

19

Penso che sia necessario utilizzare l'elemento Esegui / Debug sulla barra degli strumenti. Fare clic e 'Modifica configurazioni' (o in alternativa utilizzare la voce di menu Esegui-> Modifica configurazioni). Nella sezione "Predefiniti" nel riquadro di sinistra c'è un elemento "py.test" che penso sia quello che vuoi.

Ho anche scoperto che il manuale non corrispondeva all'interfaccia utente per questo. Spero di aver capito correttamente il problema e questo aiuta.


4
La pagina "Predefiniti> py.test" in realtà non mi ha dato alcun modo per creare una configurazione. Ma se sono andato alla finestra di dialogo Modifica configurazioni, ho fatto clic sul pulsante della barra degli strumenti "+", selezionato "py.test" e impostato "Directory di lavoro" sulla directory contenente i miei test, ciò ha creato una configurazione che avrebbe eseguito i miei test. Quindi +1 per indicarmi una parte utile del programma. Darò la risposta accettata a @yole, però, dal momento che penso che cambiare l'impostazione predefinita in py.test sia una soluzione migliore - dovrebbe farmi eseguire solo il file corrente e cose del genere.
Joe White,

@JoeWhite Per favore, aggiungilo come risposta perché è stato utile
Hariom Singh,

Nella finestra Modifica configurazione, dopo aver scelto la mia configurazione Pytest, ho anche dovuto scegliere Targetdi essere Script athe puntarlo alla radice della mia cartella dei test
RAbraham,

Questo è un modo molto migliore in quanto apre altre funzionalità oltre a passare argomenti della riga di comando ecc.
Chirag Nayak,

13

Ecco come l'ho fatto funzionare con pytest 3.7.2(installato tramite pip) e pycharms 2017.3:

  1. Vai a edit configurations

  1. Aggiungi una nuova configurazione di esecuzione e seleziona py.test

  1. Nei dettagli della configurazione della corsa, è necessario impostare target= pythone il campo senza nome in basso su tests. Sembra che questo sia il nome della cartella del test. Non troppo sicuro. Raccomando anche l' -sargomento in modo che se esegui il debug dei test, la console si comporti correttamente. Senza l'argomento pytest acquisisce l'output e rende la console di debug buggy.

  1. La mia cartella dei test ha questo aspetto. Questo è appena sotto la radice del mio progetto ( my_project/tests).

  1. Il mio foobar_test.pyfile: (nessuna importazione necessaria):
def test_foobar ():
    stampa ("ciao pytest")
    affermare True
  1. Eseguilo con il normale comando run


Esiste la possibilità di eseguire solo test dal file corrente? Ho scoperto solo che ho bisogno di cambiare il nome del file nelle impostazioni di configurazione ogni volta che apro un altro file
algot

@algot Non lo so in cima alla mia testa. Dai un'occhiata a questo: jetbrains.com/help/pycharm/performing-tests.html e questo: jetbrains.com/pycharm/guide/tips/run-single-test
Benjamin Crouzier

5

È scarsamente documentato per essere sicuro. Dopo aver aggiunto una nuova configurazione dai valori predefiniti, ti troverai nel regno dell'esecuzione dello script "/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py". Non è documentato e ha le sue idee sugli argomenti della riga di comando.

Puoi:

  1. Prova a giocare, a invertire la sceneggiatura e vedi se riesci in qualche modo a far accettare py.test agli argomenti. Potrebbe funzionare; non è successo nella prima mezz'ora per me.
  2. Basta eseguire "py.test * .py" da una console.

Stranamente, troverai difficile trovare qualsiasi discussione dato che JetBrains fa un buon lavoro nel bombardare gli algoritmi di Google con le sue pagine.


3

trova questo thread quando ho colpito la stessa domanda e ho trovato la soluzione pycharm versione: 2017.1.2 vai su "Preferenze" -> "Strumenti" -> "Strumenti integrati Python" e imposta il runner di prova predefinito dal pannello laterale destro come py.test risolvi il mio problema


Funzionerà, ma dovrai fare clic con il pulsante destro del mouse sul nome del file di script di test nella finestra Progetto. Se fai clic con il pulsante destro del mouse sull'area dell'editor di file dello stesso script di test, sfortunatamente mostra comunque il vecchio strumento predefinito (Unittests). Questo è fastidioso perché non posso specificare la singola funzione che voglio testare.
Hongyu Zhang,

3

In pycharm 2019.2, puoi semplicemente farlo per eseguire tutti i test:

  1. Esegui> Modifica configurazioni> Aggiungi pytest
  2. Imposta le opzioni come mostrato nella seguente schermata screenshot di configurazione
  3. Fai clic su Debug (o esegui pytest usando ad esempio i tasti di scelta rapida Maiusc + Alt + F9)

Per una maggiore integrazione di pytest in pycharm, consultare https://www.jetbrains.com/help/pycharm/pytest.html


2

Sto usando 2018.2

Eseguo -> Modifica configurazioni ... Quindi fai clic sul + nell'angolo in alto a sinistra della finestra di dialogo modale. Seleziona "test python" -> py.test Poi gli do un nome come "Tutti i test con py.test"

Seleziono Target: nome del modulo e inserisco il modulo in cui si trovano i miei test (ovvero "test" per me) o il modulo in cui si trova tutto il mio codice se i miei test vengono combinati con il mio codice. Questo mi stava facendo inciampare.

Ho impostato l'interprete Python.

Ho impostato la directory di lavoro sulla directory del progetto.


0

Con una speciale configurazione di Conda Python che includeva l'installazione pip per py.test e l'utilizzo dell'add-in Specifiche (opzione --spec) (per Rspec come un bel linguaggio di riepilogo dei test), ho dovuto fare;

1. Modifica il py.test predefinito per includere l'opzione = --spec, che significa utilizzare il plug-in: https://github.com/pchomik/pytest-spec

2. Creare una nuova configurazione di prova, usando py.test. Cambia il suo interprete Python per usare ~ / anaconda / envs / la tua scelta di interpreti, ad esempio py27 per i miei nomi.

3. Eliminare la configurazione del test "unittests".

4. Ora la configurazione di prova predefinita è py.test con i miei adorabili output in stile Rspec. Lo adoro! Grazie a tutti!

ps Il documento di Jetbrains sulle configurazioni di esecuzione / debug è qui: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test


0

Con 2018.3 sembra rilevare automaticamente che sto usando pytest, il che è carino, ma non consente ancora di correre dal livello superiore del progetto. Ho dovuto correre pytestper ogni testsdirectory individualmente.

Tuttavia, ho scoperto che potevo scegliere una delle configurazioni e modificarla manualmente per eseguirla alla radice del progetto e che funzionava. Devo sceglierlo manualmente nel menu a discesa Configurazioni - non posso fare clic con il pulsante destro del mouse sulla cartella principale nel riquadro Progetto. Ma almeno mi permette di eseguire tutti i test contemporaneamente.


0

Abilita Pytest per il tuo progetto

  1. Apri le Impostazioni / Preferenze | Strumenti | Finestra di dialogo delle impostazioni di Python Integrated Tools come descritto in Scelta del framework di test.
  2. Nel campo Corridore test predefinito selezionare pytest .
  3. Fare clic su OK per salvare le impostazioni.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.