Flaky tests Ces bugs qui nous empoisonnent la vie

A presentation at Sunny Tech 2023 in June 2023 in Montpellier, France by Antoine Ceol

Slide 1

Slide 1

© ZENIKA 2021 All rights reserved - Proprietary & confidential Flaky tests Ces 🐛 qui nous empoisonnent la vie

Slide 2

Slide 2

Les tests, un nouveau concept super stylé

Voici une représentation de la pyramide des tests de Mike Cohn Chaque couche peut avoir sa propre boucle de feedback. Plus on descend, plus c’est facile de comprendre pourquoi c’est cassé Plus on remonte et plus c’est compliqué!

Slide 3

Slide 3

L'équilibre du domaine

On vit un monde magnifique, on créé des fonctionnalités en TDD, parfois on avait pas prévu qqch et ca casse. On corrige, et puis parfois ça se corrige tout seul…et puis ca répète et puis c’est la cata

Slide 4

Slide 4

Patatras ⛈ Les tests sont imprévisible ⛈ On a plus le contrôle ⛈ On perd l’idempotence qui régit tout l’équilibre des tests

Slide 5

Slide 5

Le comic sans ms, ça fait peur 🫣

Slide 6

Slide 6

Les timeouts ⏱

Principalement sur les e2e/acceptance On tombe principalement sur des faux negatifs. Principalement ce sont:

  • Problemes de réseaux
  • DOM non chargés
  • Requêtes trop lentes
  • Deadlock 💀

Slide 7

Slide 7

Problème d'environnement 🌍

Les différence d’environnement peuvent poser des problêmes: Setup/installation (OS, ecran, version java/node/python) Ressources (RAM) Variables d’environnement Docker peut aider pour ça (mais ne règle pas tout)

Slide 8

Slide 8

Problème de données 💿

Un test peut en impacter un autre (mais ne devrait pas) Les données peuvent être par exemple:

  • BDD

  • RAM

  • Système de fichier Cache

  • Tri dans le code et/ou dans le test

  • Tri dans le test/tri dans le code

  • On peut tester le contenu sans l’ordre

Slide 9

Slide 9

Le (pseudo) random 💩

Le random n’est l’est pas toujours autant qu’on l’espère Problèmes avec des bibliothèque (par exemple Faker) pour l’unicité

Slide 10

Slide 10

Problème de modules importés 🛸

Les règles du SEMVER ne sont pas toujours respectés. Exemple: Ua-parser-js (publication de version avec du cryptomining)

Slide 11

Slide 11

Problème de date 📆

Les dates et les fuseaux horaires, le cauchemar des devs! Les dates changent en permanence, ce qui semble être fixe ne l’est pasPB sur des dates, décalage horaires/heure d’été il faut mocker la date Il faut mocker la timezone

Slide 12

Slide 12

Problème d'asynchronisme ⚡

En asynchrone, on peut être dans les temps et on peut ne pas… Si on attend pas la résolution de l’asynchrone on ne sais pas quand le code sera exécuté (possible que ca fonctionne)

Slide 13

Slide 13

Comment qu'on reproduit quand y'a un flaky?

  • On run les tests seul/avec d’autres tests
  • On run dans le désordre
  • On vérifie l’état des stockages avant/aprés le test
  • On limite la qualité du reseau
  • Sur différents environnements
  • On debug

Slide 14

Slide 14

Pour reperer ces petites bêtes?

En runnant et rerunnant les tests, sur tout pleins d’environnements! Avec des outils: Circle-ci Gitlab-ci Datadog Les CI permettent de repérer les flaky et donner de nombreuses informations pertinentes.

Slide 15

Slide 15

Les tests Flakys Ces 🐛 qui nous empoisonnent la vie Antoine Ceol twitter @boombaprealm github @aceol