11
votes

Arrête testsuite si une TESTCASE Trouvez une erreur

J'ai un testSuite en python avec plusieurs testsCases .

Si un TESTCASE échoue, testSuite continue avec le prochain TESTCASE . J'aimerais pouvoir arrêter testseuite quand un TestCase échoue ou être capable de décider si le testsuite devrait continuer ou arrêter.


2 commentaires

Quel cadre de test unitaire utilisez-vous?


Au fur et à mesure que vos tests de l'unité devraient être indépendants, cette exigence semble étrange. Pourquoi ne pas exécuter tous les tests unitaires, vous voyez donc tous les tests d'échec à la fois?


6 Réponses :


-3
votes

Vous pouvez utiliser Sys.exit () pour fermer l'interpréteur Python à tout moment de votre test.


3 commentaires

Je veux fermer l'interpréteur de Python dans mon testsuite lors de l'exécution de la testse, une erreur se produit


Je ne pense pas que cela soit vrai, Unitest est apparu pour attraper le sys.exit et continuer quand j'ai essayé cette solution


-1: Ni sys.exit () ni sys._exit () arrête réellement mes tests.



1
votes

Faites-vous réellement des tests d'unité? Ou des tests système de quelque chose d'autre? Si ce dernier, vous pouvez être intéressé par mon Cadre de test basé sur Python . L'une de ses caractéristiques est exactement cela. Vous pouvez définir des dépendances de test de test et la suite sautera des tests avec des dépendances infructueuses. Il a également un support intégré au sélénium et au webDriver. Cependant, ce n'est pas si facile à installer. Actuellement en développement mais essourait principalement. Fonctionne sur Linux.


1 commentaires

Merci Keith mais je ne sais pas comment utiliser votre cadre de test basé sur Python pour résoudre mon problème.



1
votes

Exécutez vos tests avec nez et utilisez le drapeau -x. Que combiné avec le drapeau - failes devrait vous donner tout ce dont vous avez besoin. Donc, dans le niveau supérieur de votre projet, exécutez

nosetests --with-coverage --cover-package=<your package name> --cover-html


2 commentaires

Puis-je faire la même chose sans utiliser le nez?


Je ne suis pas sûr - je sais qu'unitest2 apporte beaucoup de friandises neuves, mais je ne les ai pas vraiment utilisées



15
votes

Depuis Python 2.7, Unittest Support Failfast Option. Il peut être spécifié par CommandLine: xxx

ou lors de l'utilisation d'un script: xxx

malheureusement je n'ai pas encore découvert comment Spécifiez cette option lorsque vous utilisez seugools et setup.py .


1 commentaires

Remarque: cela ne fonctionne pas si vous souhaitez utiliser Unittest Discover (ou je viens de mettre le drapeau au mauvais endroit?).



2
votes

Utiliser échecast = true code> Il arrête d'exécuter tous les tests si 1 échoue dans votre classe de test

Exemple: P>

if __name__ == '__main__':
    unittest.main(failfast=True)


0 commentaires

3
votes

Aucune des réponses ne semble toucher à cette partie de votre question:

... Soyez capable de décider si le testSuite devrait continuer ou arrêter. p> blockQquote>

Vous pouvez remplacer la méthode exécuter () code> dans votre TestCase CODE> Classe et appelez le testtresult.stop () code> méthode à Signaler le testSuite code> pour arrêter les tests d'exécution. P>

class MyTestCase(unittest.TestCase):
    def run(self, result=None):
        if stop_test_condition():
            result.stop()
            return
        super().run(result=result)


1 commentaires

Bonne réponse à la question actuelle. J'ai pu accéder à mon appel à Super (). Exécuter () avec un gestionnaire pour une exception personnalisée soulevée par la configuration (). (Pour motifs hacky , l'exception doit être une sous-classe de clavierInterrupter.)