web-dev-qa-db-fra.com

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

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

PyCharm aurait prétendument prend en charge py.test dans son programme de test. Vous êtes censé être capable de créer une configuration d'exécution/de débogage d'exécuter vos tests, et PyCharm aurait une boîte de dialogue "créer une configuration") destinée spécifiquement à 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 supposé 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. ". OK, peut-être que la documentation est tout simplement fausse et que "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 ...", aucun de ceux-ci ne s'appliquant - je n'utilise ni unittest ni doctest. Il n'y a pas d'élément de menu pour py.test.

Si j'ouvre mon fichier test_sample.py et que je clique avec le bouton droit de la souris dans la fenêtre de l'éditeur, les éléments de menu "Créer <nom>" promis sont créés: "Créer des alertes de dépôt dans test_sa ...'...", suivi de "Exécuter 'Unittests in test_sa ...' "et" Débogage de 'Unittests in test_sa ...' ". Encore une fois, tout est spécifique au cadre le plus modeste; rien pour py.test.

Si j'essaie 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 décrit dans la boîte de dialogue permettant d'ajouter une configuration pour Python Unit Test , et non aux options" Nom "," Test à exécuter "et" Mots-clés ". qui sont supposés apparaître dans la boîte de dialogue configuration pour py.test . Il n'y a rien dans la boîte de dialogue permettant de changer le framework 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.test sur mes tests à partir de la ligne de commande. Ce n'est donc pas quelque chose de simple, comme pytest qui n'est pas installé correctement.

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

124
Joe White

S'il vous plaît aller à Fichier | Paramètres | Outils | Python Integrated Tools et changez le programme d’exécution de test par défaut en py.test. Ensuite, vous aurez l'option py.test pour créer des tests à la place du test le moins scrupuleux.

198
yole

PyCharm 2017.3

  1. Preference -> Tools -> Python integrated Tools - Choisissez py.test comme Default test runner.
  2. Si vous utilisez Django Preference -> Languages&Frameworks -> Django - Cochez la case Do not use Django Test runner
  3. Effacer tous les tests exécutés précédents de Run/Debug configuration, sinon les tests seront exécutés avec ces configurations. 
  4. Pour définir certains 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
25
Sergey Kubrak

Je pense que vous devez utiliser l'élément Configuration Exécuter/Déboguer de la barre d'outils. Cliquez dessus et 'Modifier les configurations' (ou utilisez l'option de menu Exécuter-> Modifier les configurations). Dans la section "Valeurs par défaut" du volet de gauche, vous trouverez un élément "py.test" que vous souhaitez.

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

16
Scott Griffiths

C'est mal documenté pour être sûr. Une fois que vous aurez ajouté une nouvelle configuration par défaut, vous pourrez exécuter le script "/ Applications/PyCharm CE.app/Contents/helpers/pycharm/pytestrunner.py". Ce n'est pas documenté et a ses propres idées d'arguments en ligne de commande.

Vous pouvez:

  1. Essayez de jouer, d’inverser le script et de voir si vous pouvez obtenir que py.test accepte les arguments. Cela peut fonctionner; ça ne l'a pas fait dans la première demi-heure pour moi.
  2. Il suffit de lancer "py.test * .py" à partir d'une console.

Bizarrement, vous aurez du mal à trouver la moindre discussion, JetBrains bombardant bien les algorithmes Google avec ses propres pages.

5
Charles Merriam

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

  1. Aller au edit configurations

  1. Ajouter une nouvelle configuration et sélectionner py.test

  1. Dans les détails de la configuration d'exécution, vous devez définir target = python et le champ non nommé ci-dessous à tests. Il semble que ce soit le nom de votre dossier de test. Pas trop sûr que difficile. Je recommande également l'argument -s afin 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 buggée.

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

  1. Mon fichier foobar_test.py: (aucune importation requise):
 def test_foobar (): 
 print ("bonjour pytest") 
 affirmer vrai 
  1. Exécutez-le avec la commande d'exécution normale

3
Benjamin Crouzier

trouvez ce fil lorsque je pose la même question et trouve la solution pycharm version: 2017.1.2 allez dans "Préférences" -> "Outils" -> "Outils intégrés à Python" et définissez le programme de test par défaut à droite. panneau latéral en tant que py.test résoudre mon problème

3
jacobcan118

J'utilise 2018.2

Je fais Run -> Edit 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 Cible: nom du module .__ et je mets dans le module où se trouvent mes tests (c'est-à-dire 'tests' pour moi) ou dans le module où se trouve tout mon code si mes tests sont mélangés à mon code. Cela me faisait trébucher.

Je règle l'interpréteur Python.

Je mets le répertoire de travail dans le répertoire du projet.

2
Brian C.

Avec 2018.3, il semble détecter automatiquement que j'utilise pytest, qui est Nice, mais il ne permet toujours pas de fonctionner à partir du niveau supérieur du projet. Je devais exécuter pytest pour chaque répertoire tests individuellement.

Cependant, j'ai découvert 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 le menu déroulant Configurations - je ne peux pas cliquer avec le bouton droit de la souris sur le dossier racine dans la fenêtre Projet. Mais au moins, cela me permet d’exécuter tous les tests en même temps.

0
sfjac

Avec une configuration Conda python spéciale qui incluait l'installation du pip pour py.test et l'utilisation du complément Specs (option --spec) (pour Rspec comme le langage de résumé de test de Nice), je devais le faire; 

1.Modifiez le fichier py.test par défaut pour inclure l'option = --spec, ce qui signifie que vous utilisez le plug-in: https://github.com/pchomik/pytest-spec

2.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!

p.s. La documentation de 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

0
AnneTheAgile