Comment configurer PyCharm pour exécuter des tests py.test?

163

Je veux commencer à écrire des tests unitaires pour mon code Python, et le framework py.test semble être un meilleur pari que unittest fourni par Python . J'ai donc ajouté un répertoire "tests" à mon projet, et y ai ajouté test_sample.py . Maintenant, je veux configurer PyCharm pour exécuter tous les tests dans mon répertoire "tests".

PyCharm prendrait en charge py.test dans son lanceur de tests. Vous êtes censé être en mesure de créer une configuration d'exécution / débogage pour exécuter vos tests, et PyCharm aurait une boîte de dialogue "Créer une configuration" spécifiquement pour py.test . Mais c'est toute l'étendue de leur documentation sur le sujet, et je ne trouve nulle part cette prétendue boîte de dialogue.

Si je clique avec le bouton droit sur le répertoire dans la fenêtre de l'outil Projet, je suis censé voir un élément de menu "Créer <nom>", mais le seul élément de menu commençant par "Créer" est "Créer une configuration d'exécution". D'accord, peut-être que la documentation est tout simplement fausse, et "Create Run Configuration" semble prometteur. Malheureusement, les deux seuls éléments de son sous-menu sont "Unittests in C: \ mypath ..." et "Doctests in C: \ mypath ...", dont aucun ne s'applique - je n'utilise ni unittest ni doctest. Il n'y a pas d'élément de menu pour py.test.

Si j'ouvre mon test_sample.py et clique avec le bouton droit dans la fenêtre de l'éditeur, j'obtiens les éléments de menu promis "Créer <nom>": il y a "Créer 'Unittests in test_sa ...'...", suivi de "Exécuter 'Unittests in test_sa ...' "et" Debug 'Unittests in test_sa ...' ". Encore une fois, tout est spécifique au cadre unittest; rien pour py.test.

Si j'essaye les éléments de menu qui disent "unittest", j'obtiens une boîte de dialogue avec des options pour "Nom", "Type", une zone de groupe "Tests" avec "Dossier" et "Modèle" et "Script" et "Classe "et" Fonction ", etc. Cela ressemble exactement à ce qui est documenté comme la boîte de dialogue pour ajouter une configuration pour Python Unit Test , et pas comme les options" Nom "et" Tester à exécuter "et" Mots clés "qui sont censées apparaître dans la configuration de la boîte de dialogue py.test . Il n'y a rien dans la boîte de dialogue pour changer le cadre de test que j'ajoute.

J'utilise PyCharm 1.5.2 sur Windows avec Python 3.1.3 et pytest 2.0.3. Je peux exécuter avec succès py.testmes tests à partir de la ligne de commande, donc ce n'est pas quelque chose de simple comme pytest qui n'est pas installé correctement.

Comment configurer PyCharm pour exécuter mes tests py.test?

Joe White
la source

Réponses:

228

Veuillez aller à File | Paramètres | Outils | Python Integrated Tools et remplacez le testeur par défaut par py.test. Ensuite, vous obtiendrez l'option py.test pour créer des tests au lieu de l'unittest.

yole
la source
Hah! Je ne sais pas comment j'ai raté ça. Cela ne fonctionne qu'à moitié, cependant: si je clique avec le bouton droit sur le dossier dans la fenêtre de l'outil Projet, cela me donne une option pour créer des doctests, pas py.tests. (Je rédigerai un rapport de bogue.) Mais cela fonctionne si je clique avec le bouton droit de la souris dans l'éditeur et que je change ensuite "Script:" par le nom du répertoire.
Joe White
3
N'oubliez pas non plus de marquer votre répertoire source comme "racine des sources": jetbrains.com/pycharm/webhelp/content-root.html
Inti
1
Existe-t-il un moyen de définir cela pour l'ensemble du projet (ou tous les projets) plutôt que par module?
OrangeDog
1
Il semble que ce File | Settings | Tools | Python Integrated Toolsne soit disponible que dans les paramètres du projet plutôt que dans les paramètres par défaut de PyCharm 5.
killthrush
2
Une fois configuré, comment exécutez-vous réellement les tests?
Chris Anderson
51

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools- Choisissez py.testcomme Default test runner.
  2. Si vous utilisez Django Preference -> Languages&Frameworks -> Django- Activez la case à cocherDo not use Django Test runner
  3. Effacez toutes les configurations de test existantes de Run/Debug configuration, sinon les tests seront exécutés avec ces anciennes configurations.
  4. Pour définir des arguments supplémentaires par défaut, mettez à jour la configuration par défaut de py.test. Run/Debug Configuration -> Defaults -> Python tests -> py.test -> Additional Arguments
Sergey Kubrak
la source
2
Dans PyCharm 2017.3.2, même après avoir défini py.test comme valeur par défaut, lorsque je clique avec le bouton droit sur le projet dans le panneau Projets et que je sélectionne New => Python File, la Kind:liste déroulante propose uniquement: fichier Python, test unitaire, stub Python, pas Pytest. J'ai regardé dans tous les endroits mentionnés dans les fils ci-dessus. Qu'est-ce que je rate?
Tom Baker
Fichier Python, test unitaire, stub Python - ce sont des fichiers python, avec des données prédéfinies, vous pouvez ajouter les vôtres, lisez cette rubrique jetbrains.com/help/pycharm/… . Mais cela n'affecte pas l'exécution du test py.test, vous pouvez créer juste un fichier python et cela fonctionnera. Dans cette rubrique, nous expliquons comment configurer cette fonctionnalité jetbrains.com/help/pycharm/running-tests.html pour exécuter py.test.
Sergey Kubrak
Dans le dernier PyCharm, "Defaults" est appelé "Templates"
AgDude
19

Je pense que vous devez utiliser l'élément de configuration Exécuter / Déboguer dans la barre d'outils. Cliquez dessus et «Modifier les configurations» (ou utilisez également l'élément de menu Exécuter-> Modifier les configurations). Dans la section «Defaults» du volet gauche, il y a un élément «py.test» qui, je pense, est ce que vous voulez.

J'ai également constaté que le manuel ne correspondait pas à l'interface utilisateur pour cela. J'espère que j'ai bien compris le problème et que cela aide.

Scott Griffiths
la source
4
La page "Defaults> py.test" ne m'a pas permis de créer une configuration. Mais si j'allais dans la boîte de dialogue Modifier les configurations, cliquais sur le bouton de la barre d'outils "+", sélectionnais "py.test" et définissais "Répertoire de travail" dans le répertoire contenant mes tests, cela créait une configuration qui exécuterait mes tests. Donc +1 pour m'avoir indiqué une partie utile du programme. Je vais cependant donner la réponse acceptée à @yole, car je pense que changer la valeur par défaut en py.test est une meilleure solution - cela devrait me permettre d'exécuter uniquement le fichier actuel, et des choses comme ça.
Joe White
@JoeWhite S'il vous plaît, ajoutez-le comme réponse car il était utile
Hariom Singh
Dans la fenêtre d'édition de la configuration, après avoir choisi ma configuration pytest, j'ai également dû choisir Targetd'être Script athet de la pointer vers la racine de mon dossier de tests
RAbraham
C'est une bien meilleure façon car cela ouvre d'autres fonctionnalités ainsi que le passage d'arguments de ligne de commande, etc.
chirag nayak
13

Voici comment je l'ai fait fonctionner avec pytest 3.7.2(installé via pip) et pycharms 2017.3:

  1. Aller à edit configurations

  1. Ajoutez une nouvelle configuration d'exécution et sélectionnez py.test

  1. Dans les détails de la configuration d'exécution, vous devez définir target= pythonet le champ sans nom ci-dessous sur tests. Il semble que ce soit le nom de votre dossier de test. Pas trop sûr de dur. Je recommande également l' -sargument pour que si vous déboguez vos tests, la console se comporte correctement. Sans l'argument, pytest capture la sortie et rend la console de débogage boguée.

  1. Mon dossier de tests ressemble à ça. C'est juste en dessous de la racine de mon projet ( my_project/tests).

  1. Mon foobar_test.pyfichier: (aucune importation nécessaire):
def test_foobar ():
    print ("bonjour pytest")
    affirmer Vrai
  1. Exécutez-le avec la commande d'exécution normale

Benjamin Crouzier
la source
Existe-t-il une possibilité d'exécuter uniquement un test à partir du fichier actuel? J'ai seulement découvert que je devais changer le nom de fichier dans les paramètres de configuration chaque fois que j'ouvre un autre fichier
algot
@algot Je ne sais pas ça au sommet de ma tête. Jetez un œil à ceci: jetbrains.com/help/pycharm/performing-tests.html et ceci: jetbrains.com/pycharm/guide/tips/run-single-test
Benjamin Crouzier
5

C'est mal documenté pour être sûr. Une fois que vous avez ajouté une nouvelle configuration à partir des valeurs par défaut, vous serez dans le domaine de l'exécution du script "/ Applications / PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py". Il n'est pas documenté et a ses propres idées d'arguments de ligne de commande.

Vous pouvez:

  1. Essayez de jouer, inversez le script et voyez si vous pouvez d'une manière ou d'une autre obtenir py.test pour accepter les arguments. Cela peut fonctionner; ce n'est pas le cas dans la première demi-heure pour moi.
  2. Exécutez simplement "py.test * .py" depuis une console.

Curieusement, vous aurez du mal à trouver une discussion car JetBrains fait un bon travail de bombardement des algorithmes de Google avec ses propres pages.

Charles Merriam
la source
3

trouver ce fil lorsque j'ai rencontré la même question et trouvé la solution pycharm version: 2017.1.2 allez dans "Préférences" -> "Outils" -> "Python Integrated Tools" et définissez le testeur par défaut du panneau de droite comme py.test résoudre mon problème

jacobcan118
la source
Cela fonctionnera, mais vous devez ensuite cliquer avec le bouton droit sur le nom du fichier de script de test dans la fenêtre Projet. Si vous cliquez avec le bouton droit sur la zone de l'éditeur de fichiers du même script de test à la place, il affiche toujours l'ancien outil par défaut (Unittests) malheureusement. C'est ennuyeux car je ne peux pas spécifier la fonction individuelle que je veux tester.
Hongyu Zhang
3

Dans pycharm 2019.2, vous pouvez simplement faire ceci pour exécuter tous les tests:

  1. Exécuter> Modifier les configurations> Ajouter pytest
  2. Définissez les options comme indiqué dans la capture d'écran suivante capture d'écran de la configuration
  3. Cliquez sur Debug (ou exécutez pytest en utilisant par exemple les touches de raccourci Shift + Alt + F9)

Pour une meilleure intégration de pytest dans pycharm, voir https://www.jetbrains.com/help/pycharm/pytest.html

gebbissimo
la source
2

J'utilise 2018.2

Je fais exécuter -> Modifier les configurations ... Puis cliquez sur le + en haut à gauche de la boîte de dialogue modale. Sélectionnez "tests python" -> py.test Puis je lui donne un nom comme "Tous les tests avec py.test"

Je sélectionne Target: nom du module et mets dans le module où sont mes tests (c'est-à-dire «tests» pour moi) ou le module où se trouve tout mon code si mes tests sont mélangés avec mon code. Cela me faisait trébucher.

J'ai défini l'interpréteur Python.

J'ai défini le répertoire de travail sur le répertoire du projet.

Brian C.
la source
0

Avec une configuration spéciale de Python Conda qui comprenait l'installation de pip pour py.test plus l'utilisation de l'addin Specs (option --spec) (pour Rspec comme un joli langage de résumé de test), je devais faire;

1.Modifiez le py.test par défaut pour inclure option = --spec, ce qui signifie utiliser le plugin: https://github.com/pchomik/pytest-spec

Créez une nouvelle configuration de test à l'aide de py.test. Changez son interpréteur python pour utiliser ~ / anaconda / envs / votre choix d'interprètes, par exemple py27 pour mes noms.

3.Supprimez la configuration de test 'unittests'.

4.Maintenant, la configuration de test par défaut est py.test avec mes jolies sorties de style Rspec. J'aime cela! Merci tout le monde!

La documentation de ps Jetbrains sur les configurations d'exécution / débogage est ici: https://www.jetbrains.com/help/pycharm/2016.1/run-debug-configuration-py-test.html?search=py.test

AnneTheAgile
la source
0

Avec 2018.3, il semble détecter automatiquement que j'utilise pytest, ce qui est bien, mais cela ne permet toujours pas de courir à partir du niveau supérieur du projet. J'ai dû courir pytestpour chaque testsrépertoire individuellement.

Cependant, j'ai trouvé que je pouvais choisir l'une des configurations et la modifier manuellement pour qu'elle s'exécute à la racine du projet et que cela fonctionnait. Je dois le choisir manuellement dans la liste déroulante Configurations - je ne peux pas faire un clic droit sur le dossier racine dans le volet Projet. Mais au moins, cela me permet d'exécuter tous les tests en même temps.

sfjac
la source
0

Activez Pytest pour votre projet

  1. Ouvrez les Paramètres / Préférences | Outils | Outils intégrés Python dialogue des paramètres des comme décrit dans Choix de votre cadre de test.
  2. Dans le champ Default test runner , sélectionnez pytest .
  3. Cliquez sur OK pour enregistrer les paramètres.

entrez la description de l'image ici

Milo Chen
la source