Ripple motion - Techtalk11 - Django testing best practices - développement mobile - nantes

TechTalk#11 – Django testing best practices

TECH TALK #11

 

Django testing best practices

 

Pour les tests serveurs Django, il est important de distinguer les tests réellement « unitaires » des tests d’intégration.

Exemple: un test d’API est un test d’intégration alors qu’un test de Serializer ou de Model est un test unitaire.

Il ne faut pas tout vérifier dans les tests d’intégration : il est impossible de tester tous les cas à ce niveau-là. Les tests d’intégration d’API doivent tester les cas nominaux et les cas d’erreurs, simplement en regardant le HTTP status code et éventuellement vérifier la structure du body. Les tests unitaires (ex: test de serializer) peuvent quant à eux balayer plus de cas et vérifier chacun des champs retournés.

Astuce: utilisez SimpleTestCase s’il n’y pas d’utilisation de la base de données au lancement du test car l’exécution d’un SimpleTestCase est très rapide !

Concernant l’authentification dans les tests, notamment les tests d’API, utiliser un client (ex: OAuthClient) pré-configuré qu’il faut instancier au début de chaque test nécessitant de l’authentification. Cela indique clairement les tests d’API en mode authentifié des autres. Il est même possible de définir plusieurs clients dans un même test via un context manager python.

Enfin, voici quelques règles d’hygiène pour l’écriture des tests :

Les 3 étapes : Conditions / Actions / Vérifications doivent apparaître clairement dans chacun des tests.
– Chaque méthode de test et chaque appel de méthode doivent ressembler à une phrase en anglais (ex: test_bbox_contains_offer()).
– Les tests doivent être courts (en termes de lignes de code). Créer des fixtures pour « masquer » l’implémentation des conditions, actions et vérifications des tests.

 

Tech Talk animé par :

 

Ripple Motion : Olivier Tabone - CTO et directeur technique

 

OLIVIER TABONE

Co fondateur/Directeur

 

N’hésitez pas à télécharger le TechTalk #11 – Django testing best practices