2. testing
Algunes recomanacions útils que ens han servit:
● emprar “fixtures” sempre que se pugui, evitar copy-paste innecessari
● emprar el parametrize
● no sofisticar massa la lògica dels tests
● tests autocontinguts, que siguin independents un de l’altre i es puguin executar sense importar
l’ordre o fins i tot de manera concurrent
● base de dades de test en memòria
● si es fa servir django constance, canviar el backend:
3. testing
Tests afegits (i per afegir) al template de cookiecutter dels projectes de Django:
● comprovar que els models l’str funciona
● executar el system check de Django
● comprovar que les urls són totes accessibles i retornin una resposta correcta
● linters i pep8
● comprovar i executar les migracions (més lent però evitar futurs problemes al desplegar)
● todo: implementar comanda que ens congeli el nom i path de les urls, d’aquesta manera podem
evitar possibles errors implementant un test que verifiqui que les urls congelades són accessibles.
4. testing
Petit resum dels paquets que hem fet servir per temes de testing:
● pytest - framework de testing
● pytest-django - plugin de pytest que ens proporciona tota una sèrie de fixtures molt útils per
testejar projectes implementats en Django
● pytest-watch - continuous pytest runner, serveix per tornar a llançar els tests quan s’han detectat
canvis als arxius del projecte.
● pytest-testmon - selecciona i reexecuta els tests afectats pels darrers canvis, ja siguin canvis de
les classes de negoci o canvis dels propis tests. Veure vídeo.
● model-mommy - package que ens serveix per a crear fixtures a partir dels nostres models de
Django de manera molt fàcil
● pytest-lazy-fixture - package que ens serveix per a poder emprar els fixtures en mode lazy, cosa
que ens permet, per exemple, emprar els fixtures com a paràmetres amb el parametrize.
5. testing
● hypothesis - serveix per generar dades random per a la nostra especificació de dades o model de
dades. Ens ajuda a que els tests funcioni per a qualsevol valor dins uns rangs i no només per casos
concrets.
● pytest-mock - ens serveix per a fer patching de mètodes o funcions que emprarem per a testejar la
nostra lògica. Per exemple a talcom s’ha emprat per a testejar els mètodes de pagament contra el
backend de pago, en aquest cas, stripe, sense necessitat de connectar-se a stripe.
● pytest-checkipdb - ens serveix per a verificar que no deixam desat al codi algun import ipdb;
ipdb.set_trace()
● pytest-cov - ens serveix per a veure la part del nostre codi que no ha estat testejada. Molt útil ja
que ens permet generar informes en html i visualment detectar la part del nostre codi sense
testejar.
● pytest-flake8 - ens serveix per revisar que el nostre codi serveix una guia d’estil, per exemple, el
pep8
6. testing
● pytest-sugar - ens serveix per canviar el look&feel de la sortida del pytest
● freezegun - ens serveix per a congelar el temps. Si tenim mètodes que empren el mètode
datetime.now ens permet fer que sempre torni una data i/o hora determinades.
● erradicate - revisa que no t’hagis deixat codi comentat.
● pytest-splinter - ens permet aixecar sessions de navegador per tal d’executar tests funcionals.
Està un nivell per sobre de selenium i facilita molt sobretot l’emplenament de formularis.
● pytest-xdist - ens permet executar tests de manera concurrent, accelera l’execució dels tests si en
tenim molts. És obligatori que els tests siguin totalment autocontinguts per emprar xdist.