2012-04-28 11 views
6

Quindi sto sperimentando l'introduzione dei test di unità selenium in django 1.4 in un paio di progetti su cui sto lavorando.Best practice per l'organizzazione di test di selenio e test di unità

Il metodo standard per eseguire i miei test di unità sono semplicemente fare ./manage.py test e io uso django-ignoretests escludere app Django specifici che non voglio provato (se necessario).

Tuttavia, c'è un modo per configurare il mio progetto in modo che possa decidere di correre solo test selenio quando voglio e hanno ./manage.py test eseguire solo unit test standard.

Quali sono le migliori pratiche per la segregazione e l'organizzazione dei test del selenio e dei test unitari standard?

risposta

5

Si può sempre gruppo tutti i test di selenio sotto un unico pacchetto myapp/selenium_tests/ (come descritto qui https://stackoverflow.com/a/5160779/1138710 per esempio) e quindi eseguire manage.py test myapp.selenium_tests e di gruppo il resto dei test sotto dire myapp/other_tests.

In caso contrario, suppongo che si possa scrivere un test runner che controlla per ciascuna classe di test se si deriva da LiveServerTestCase (vedi la documentazione: https://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runner)

+0

Poiché i test al selenio tendono a essere funzionali, cerco di fare lo stesso, conservandoli in un pacchetto separato, insieme a un'opzione per ignorarli (http://stackoverflow.com/a/10743466/4281). Mi piace l'idea del runner di test, ma in alcuni casi i test potrebbero non essere un discendente di LiveServerTestCase (che è un altro problema). –

5

Per le classi di test in questione, ho aggiunto il seguente decoratore:

from django.conf import settings 
@unittest.skipIf(getattr(settings,'SKIP_SELENIUM_TESTS', False), "Skipping Selenium tests") 

Poi saltare tali prove aggiungono al file impostazioni: SKIP_SELENIUM_TESTS = True

Questo potrebbe facilmente essere avvolto in una sottoclasse di LiveServerTestCase o un semplice decoratore . Se lo avessi in più di un posto, lo sarebbe già.