TechTalk#11 – Django testing best practices

 

TechTalk #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 SimpleTestCases’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.

TechTalk animé par Olivier Tabone | Co-fondateur Directeur Technique chez Ripple Motion