2013-04-17 10 views
6

Sto cercando di implementare un modo pieno e pulito di pacchetti python di test, uno che soddisfi i requisiti folowing:Risolvere la confusione generata da troppi modi per eseguire unittest in python

  • eseguire test su macchine pulite senza di loro creazione (virtualenv)
  • si riuniscono i risultati di più piattaforme
  • si riuniscono i risultati di multipli interpreti pitone
  • co de copertura (unire i risultati dell'esecuzione multipla in un singolo report)
  • essere in grado di generare un report di copertura del codice xml in modo che il sistema di compilazione possa tenere traccia di come questo cambiamento nel tempo.
  • poter consentire test disattivare basato su piattaforma
  • eseguire diversi comandi prima delle prove, come PEP8 o autopep8
  • test eseguiti in parallelo.

ho usato diversi approcci: nose + pytest, tox + pytest ma recentemente scoperto che pytest dovrebbe essere in grado di fare la maggior parte delle cose.

Il problema principale è che non sono stato in grado di trovare un confronto chiaro su quando sarebbe meglio utilizzare un approccio o un altro.

Qualcuno può spiegarle e fornire alcuni casi d'uso o limitazioni di queste configurazioni? ... solo per chiarire quando si va per un approccio o un altro.

Alla fine ho voglio avere queste opzioni:

  • quicktest - eseguire i test a livello locale, un must prima di ogni commmit
  • fulltest - test completi, li esegue su tutte le piattaforme disponibili, un must prima di fare una nuova release
+1

Se pytest soddisfa tutte le tue esigenze, perché dovresti prendere in considerazione l'utilizzo di una configurazione diversa? Sicuramente sarebbe più semplice. – pfctdayelise

risposta

1

py.test copre tutte le vostre esigenze perfettamente è pro rispetto ad altri corridori di test come il naso:

  • apparecchi con iniezione di dipendenza - eliminare la necessità di OOP complicato per configurazione di prova
  • semplice ma potente sistema di plugin con un sacco di plugin utili - plugin come pytest-xdist permetterà di testare su tutte le piattaforme di cui hai bisogno, tra cui finestre, pytest-CoV fa la copertura, pytest-cache aiuta a eseguire solo lo scorso test fallito, ecc
  • parametrizzazione consente di utilizzare write-once Run-multiplo approccio per le prove utilizzando parametri dichiarativi
  • uso della semplice affermazione assert vs complicata sintassi java-like .assertEquals (http://pytest.org/latest/assert.html)
  • sempre più