Pratiquer BDD avec python [fermé]


133

Quels sont les frameworks et les outils les plus avancés disponibles pour Python pour pratiquer le développement piloté par le comportement? Surtout trouver des outils similaires comme rspec et moka pour ruby ​​serait génial.


1
Flowp "permet d'écrire des tests dans un style RSpec BDD avec un minimum de magie".
Carl G

7
Ce n'est que sur SO que le fait d'être hautement informatif équivaut à «non constructif».
jeremyjjbrown

Réponses:


38

Ian Bicking recommande d'utiliser doctest pour la conception axée sur le comportement:

Personnellement, j'ai tendance à utiliser le nez et les espaces vides dans un style de conception axé sur le comportement. Plus précisément, le plugin spec pour le nez est excellent pour BDD.


7
Andrew Bennetts a récemment écrit quelques articles expliquant pourquoi il pense que les docteurs sont maltraités. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa

4
Je pense que doctest est en fait plus aligné sur la philosophie de BDD, lorsque vous le traitez comme il était prévu: vous commencez à écrire sur le logiciel, puis parsemez cela d'exemples qui forment également des tests. Il a également été décrit comme un «développement axé sur les documents» - le but est de se concentrer sur la fonctionnalité descriptible vers l'extérieur, et non sur les unités de travail internes. Je pense que la tradition xUnit est horrible à faire cela.
ianb

48

La laitue signifie être un outil semblable au concombre pour python: http://lettuce.it/

Vous pouvez récupérer la source sur github.com/gabrielfalcao/lettuce


les utilisateurs de Windows qui envisagent la laitue doivent savoir qu'au moment de la rédaction de cet article, la prise en charge de ce système d'exploitation n'est pas simple.
leonigmig

7
Tous les utilisateurs ayant l'intention d'utiliser la laitue avec django doivent savoir que par défaut, il utilise votre base de données par défaut pour les tests. Ce choix de conception intéressant m'a coûté une base de données de production :(
Rachel

3
Il existe également des alternatives à la laitue, telles que Behave; voici un article de blog qui les compare et préconise Behave .
driftcatcher

1
Merci @seafangs - Behave semble beaucoup plus gérable pour les grands projets que Lettuce.
jamesc

Si vous utilisez django, gagnez du temps en utilisant Lettuce, la version actuelle 2.19 ne fonctionne pas avec le dernier django.
James Lin

46

Je recommande vraiment de se comporter .

À la recherche d'un clone de concombre pour Python, j'ai commencé à utiliser de la laitue, mais je l'ai trouvé une réplique assez maladroitement conçue. Très impythonique.

Ensuite, j'ai découvert le comportement et j'en ai été très content.


11
J'ai changé de comportement de laitue lorsque son comportement par défaut consistant à utiliser la base de données par défaut pour tester dans un projet django m'a coûté une base de données de production sur un serveur en direct: (j'aime vraiment me comporter; j'ai démarré le projet django-behave pour le connecter à Framework de test de django github.com/rwillmer/django-behave
Rachel

1
Je ressens votre douleur, aussi je suis heureux de voir que votre souffrance a contribué à l'essor de l'écosystème django. ;-)
John Wang

1
Puis-je utiliser Behave sans les fichiers de fonctionnalités? Je n'ai pas d'utilisateurs non techniques, donc les écrire n'est que du bruit pour moi. Si quelqu'un ne peut pas lire mes tests donnés / quand / alors, il n'y a rien à faire.
jeremyjjbrown

29

Je vous recommande d'utiliser un ensemble d'outils développés pour aider les programmeurs dans la pratique du BDD et du TDD. Cet ensemble d'outils est composé de: pycukes , specloud , ludibrio et should-dsl .

Should-DSL vous donnera des attentes similaires à celles de RSpec. Tout ce que vous pouvez faire avec l'API expectation de RSpec, should-dsl le fait aussi. Vous pouvez récupérer la dernière version de Github .

SpecLoud vous aide à exécuter des tests unitaires de type BDD. Vous pouvez l'installer en faisant

pip install specloud

Ludibrio est une bibliothèque de tests en double (Mocks, Stubs and Dummies). Installez-le via

pip install ludibrio

Et PyCukes est le principal outil de BDD. Il exécutera les scénarios, etc. Encore une fois,

pip install pycukes

Pour plus d'informations, veuillez lire la documentation des outils sur PyPi .



J'aime should-dsl. J'ai envisagé un DSL pour python BDD - il y en a quelques-uns, celui-ci semble assez expressif.
Danny Staple

Je ne suis pas en mesure de trouver des informations sur un framework BDD appelé Pyramid. Le lien référencé dans l'article lié par @phaedrus conduit à un site d'aspect douteux qui n'a rien à voir avec les tests, et Google pointe vers Pyramid , le framework Web. Quelqu'un peut-il fournir un lien à jour?
Björn Pollex

1
Je préfère l' affirmation sûre DSL.
fatuhoku

@ BjörnPollex, le nom Pyramid ne pouvait pas être utilisé par ces créateurs d'outils à cause du Pyramid Web Framework. Maintenant, ce ne sont que des outils séparés.
Douglas Camata

11

Excellent message et réponses. Je voulais juste mettre à jour pour inclure Freshen dans cette liste car je lis que pycukes est abandonné. Un bon article sur l'utilisation de BDD et Django avec Freshen est ici .


9

Vous pouvez utiliser "sure" pour les assertions expressives (comme dans RSpec)


Parabens! Vous m'avez totalement épaté avec le code de magic.py. Je n'avais aucune idée que les "méthodes d'extension" (classes ouvertes) étaient possibles en Python.
mdwhatcott

8

Le projet Pyccuracy est un effort pour fournir un langage spécifique au domaine pour BDD en Python.

Contrairement à doctest, qui fonctionne au niveau de l'API, il encode des opérations de plus haut niveau telles que le chargement d'une page Web et l'envoi d'un formulaire. Je ne l'ai pas utilisé mais cela semble assez prometteur si c'est ce que vous recherchez.


6

J'aime beaucoup Pyccuracy . Je l'implémente sur un projet de taille moyenne ces jours-ci.


3
Je serais intéressé par toute comparaison récente Pyccuracy vs Lettuce que tout le monde pourrait partager.
michela

Peut-être inclure Freshen (lié dans une réponse ci-dessus) dans la comparaison.
amit le

Déjà demandé ici: quora.com
...

6

Essayez pyspecs . Rendre les tests faciles à lire et à exécuter en permanence pendant le développement étaient deux de mes principaux objectifs lors de la création de ce projet.

Code de test:

from pyspecs import given, when, then, and_, the, this

with given.two_operands:
    a = 2
    b = 3

    with when.supplied_to_the_add_function:
        total = a + b

        with then.the_total_should_be_mathmatically_correct:
            the(total).should.equal(5)

        with and_.the_total_should_be_greater_than_either_operand:
            the(total).should.be_greater_than(a)
            the(total).should.be_greater_than(b)

    with when.supplied_to_the_subtract_function:
        difference = b - a

        with then.the_difference_should_be_mathmatically_correct:
            the(difference).should.equal(1)

Sortie de la console:

# run_pyspecs.py

  |  given two operands 
  |    when supplied to the add function 
  |      then the total should be mathmatically correct 
  |      and the total should be greater than either operand 
  |    when supplied to the subtract function 
  |      then the difference should be mathmatically correct 

(ok) 6 passed (6 steps, 1 scenarios in 0.0002 seconds)

4

Je manque probablement complètement le point, mais ce que j'ai retenu du papier BDD original, c'est que BDD était juste un TDD reconditionné pour mettre en valeur certaines meilleures pratiques.

Si mon interprétation est correcte, vous pouvez obtenir un framework BDD simplement en renommant les méthodes dans n'importe quelle implémentation xUnit . Alors allez-y et utilisez le test unittest de la bibliothèque standard .

EDIT: Un rapide google a mis en place un module de comportement dans la fromagerie . Une recherche plus poussée de BDD n'a rien trouvé d'autre.


Le TDD est vraiment la pratique révolutionnaire à une échelle totalement différente de celle du BDD. J'ai quand même appris à apprécier la manière d'écrire de manière axée sur les tests dans le style BDD.
JtR

1
BDD a commencé au niveau de l'unité, c'est vrai. Il s'est développé assez rapidement pour englober le comportement au niveau du système, où les contextes, les événements et les résultats bénéficient d'un peu plus de réutilisabilité - d'où la prolifération d'outils pour prendre en charge à la fois cela et des scénarios en langage naturel capturés à partir de conversations avec des parties prenantes non techniques. Depuis que cette question a été posée, nous avons porté BDD au niveau de la vision du projet, en utilisant l'injection de fonctionnalités, avec le même accent sur la découverte à travers la conversation et le langage du domaine. Toujours rien de nouveau sous le soleil.
Lunivore

J'aime cette discussion sur bdd youtube.com/watch?v=pherUEzdJow . Je montre une bonne façon d'écrire des spécifications et de les avoir comme tests.
aisbaa
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.