Esercitarsi con BDD con Python [chiuso]


133

Quali sono i framework e gli strumenti più avanzati disponibili per Python per la pratica dello sviluppo guidato dal comportamento? Soprattutto trovare strumenti simili come rspec e moka per ruby ​​sarebbe fantastico.


1
Flowp "consente di scrivere test in stile RSpec BDD con il minimo della magia".
Carl G,

7
Solo su SO è altamente informativo "non costruttivo".
jeremyjjbrown,

Risposte:


38

Ian Bicking consiglia di utilizzare doctest per la progettazione basata sul comportamento:

Personalmente tendo a usare il finto naso e spazio vuoto in uno stile di design orientato al comportamento. In particolare, il plug-in delle specifiche per nose è eccellente per BDD.


7
Andrew Bennetts ha recentemente scritto un paio di post sul perché pensa che gli abusi siano stati maltrattati. andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa

4
Penso che il doctest sia in realtà più allineato con la filosofia del BDD, quando lo tratti come era previsto: inizi a scrivere sul software, e poi lo intersechi con esempi che formano anche test. È stato descritto anche come "sviluppo guidato da documenti": il punto è concentrarsi sulla funzionalità descrivibile esternamente, non sulle unità di lavoro interne. Penso che la tradizione xUnit sia orribile nel farlo.
ianb

48

Lattuga significa essere uno strumento simile a un cetriolo per Python: http://lettuce.it/

Puoi prendere la fonte su github.com/gabrielfalcao/lettuce


Gli utenti di Windows che considerano la lattuga dovrebbero sapere, al momento della stesura del documento, il supporto per quel sistema operativo non è semplice.
leonigmig,

7
Tutti gli utenti che intendono utilizzare la lattuga con Django devono essere consapevoli del fatto che, per impostazione predefinita, utilizza il database predefinito per i test. Questa interessante scelta progettuale mi è costata un database di produzione :(
Rachel,

3
Ci sono anche alcune alternative alla lattuga, come Behave; ecco un post sul blog che li confronta e che sostiene Behave .
driftcatcher,

1
Grazie @seafangs - Behave sembra molto gestibile per grandi progetti rispetto a Lettuce.
Jamesc,

Se stai usando Django, risparmia un po 'di tempo dall'uso di Lettuce, l'attuale versione 2.19 non funziona con l'ultimo Django.
James Lin,

46

Consiglio davvero di comportarsi bene .

Alla ricerca di un clone di Cetriolo per Python, ho iniziato a usare la lattuga, ma l'ho trovata una replica piuttosto maldestra. Molto Unpythonic.

Poi ho scoperto comportarsi e ne sono stato davvero contento.


11
Sono passato a comportarmi da lattuga quando il suo comportamento predefinito di utilizzare il database predefinito per i test in un progetto django mi è costato un database di produzione su un server live :( Mi piace molto comportarmi; Ho avviato il progetto django-behave per agganciarlo framework di test di django github.com/rwillmer/django-behave
Rachel

1
Sento il tuo dolore, inoltre sono contento di vedere che la tua sofferenza ha contribuito alla prosperità dell'ecosistema Django. ;-)
John Wang,

1
Posso usare comportamenti senza i file delle caratteristiche? Non ho utenti non tecnici, quindi scriverli è solo rumore per me. Se qualcuno non è in grado di leggere i miei test dati / quando / allora non ha alcuna attività commerciale.
jeremyjjbrown,

29

Ti consiglio di utilizzare una serie di strumenti sviluppati per aiutare i programmatori nella pratica di BDD e TDD. Questo set di strumenti è composto da: pycukes , specloud , ludibrio e should-dsl .

Should-DSL ti darà aspettative simili a quelle di RSpec. Tutto ciò che puoi fare con l'API di aspettativa di RSpec, dovrebbe farlo anche dsl. Puoi prendere l' ultima versione di Github .

SpecLoud ti aiuta a eseguire unittest simili a BDD. Puoi installarlo facendo

pip install specloud

Ludibrio è una libreria per doppi di test (Mock, Stub e Dummies). Installalo tramite

pip install ludibrio

E PyCukes è lo strumento principale per BDD. Farà funzionare gli scenari, ecc. Ancora una volta,

pip install pycukes

Per maggiori informazioni, leggi la documentazione degli strumenti su PyPi .


Ho trovato questo documento utile durante la ricerca di dettagli della tua risposta: arxiv.org/pdf/1007.1722
Amit

Mi piace should-dsl. Ho preso in considerazione un DSL per Python BDD - ce ne sono alcuni, questo sembra piuttosto espressivo.
Danny Staple,

Non riesco a trovare alcuna informazione su un framework BDD chiamato Pyramid. Il link a cui si fa riferimento nel documento collegato da @phaedrus porta a un sito dall'aspetto dubbioso che non ha nulla a che fare con i test e con googling punti su Pyramid , il framework web. Qualcuno può fornire un link aggiornato?
Björn Pollex,

1
Preferisco la sicura affermazione DSL.
Fatuhoku,

@ BjörnPollex, il nome Pyramid non può essere utilizzato da questi creatori di strumenti a causa del Pyramid Web Framework. Ora sono solo strumenti separati.
Douglas Camata,

11

Ottimo post e risposte. Volevo solo aggiornare per includere Freshen in questo elenco mentre ho letto pycukes è fuori produzione. Un buon post sull'utilizzo di BDD e Django con Freshen è qui .


9

Puoi usare "sicuro" per affermazioni espressive (proprio come in RSpec)


Parabeni! Mi hai completamente distrutto con il codice in magic.py. Non avevo idea che in Python fossero possibili "metodi di estensione" (classi aperte).
mdwhatcott,

8

Il progetto Pyccuracy è uno sforzo per fornire un linguaggio specifico di dominio per BDD in Python.

A differenza di doctest, che funziona a livello di API, codifica operazioni di livello superiore come il caricamento di una pagina Web e l'invio di un modulo. Non l'ho usato ma sembra un po 'promettente se è quello che stai cercando.


6

Mi piace molto la Pyccuracy . Oggi lo sto implementando su un progetto di medie dimensioni.


3
Sarei interessato a qualsiasi recente confronto tra Pyccuracy e Lattuga che chiunque potrebbe condividere.
michela,

Forse includi anche Freshen (collegato in una risposta sopra) nel confronto.
Amit

Già chiesto qui: quora.com/...
Amit

6

Prova pyspecs . Rendere i test facili da leggere e costantemente eseguiti durante lo sviluppo sono stati due dei miei obiettivi principali nella creazione di questo progetto.

Codice 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)

Uscita 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

Probabilmente mi manca completamente il punto, ma ciò che ho conservato del documento BDD originale è che BDD è stato appena riconfezionato da TDD per enfatizzare alcune migliori pratiche.

Se la mia interpretazione è corretta, puoi ottenere un framework BDD semplicemente rinominando i metodi in qualsiasi implementazione xUnit . Quindi vai avanti e usa la libreria standard unittest .

EDIT: un rapido google ha mostrato un modulo Behavior nel Cheese Shop . Ulteriore ricerca di BDD non ha trovato nient'altro.


TDD è davvero la pratica rivoluzionaria su una scala totalmente diversa rispetto a BDD. Comunque ho imparato ad apprezzare il modo di scrivere in modo test-driven in stile BDD.
JtR

1
Il BDD è iniziato a livello di unità, questo è vero. È cresciuto abbastanza rapidamente per comprendere il comportamento a livello di sistema, in cui i contesti, gli eventi e i risultati beneficiano di un po 'più di riusabilità - da qui la proliferazione di strumenti per supportare sia quello che gli scenari in linguaggio naturale catturati dalle conversazioni con parti interessate non tecniche. Da quando questa domanda è stata posta, abbiamo portato BDD al livello di visione del progetto, utilizzando Feature Injection, con la stessa enfasi sulla scoperta attraverso la conversazione e il linguaggio del dominio. Ancora niente di nuovo sotto il sole.
Lunivore,

Mi piace questo discorso su bdd youtube.com/watch?v=pherUEzdJow . Mostra un buon modo per scrivere le specifiche e averle come test.
aisbaa,
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.