web-dev-qa-db-fra.com

Les tests E2E devraient-ils persister les données dans de vraies bases de données?

J'ai beaucoup lu sur les tests E2E et une chose que je ne peux pas comprendre, c'est comment "réel" devrait être des tests E2E.

Quels que soient les outils que j'utilise pour les tests E2E, j'ai vu que la plupart du temps, ils ont frappé des environnements locaux, de développement ou alpha.

Si mon application a une authentification, dois-je créer un utilisateur "test" avec des informations d'identification valides dans la base de données? Dois-je faire cela pour des environnements alpha ou même de production? Comment savoir cet utilisateur de test se connecter à ma candidature?

Dis que j'ai la faucheuse d'application Todo. J'ai un test qui enregistre l'utilisateur dans. Après vous être connecté, je souhaite tester que l'utilisateur est capable de créer un TODO. Ce TODO est enregistré dans une base de données.

Après avoir exécuté les tests, devrais-je exécuter quelque chose pour supprimer les données créées lors des tests E2E? Ou devrais-je intercepter la demande juste avant de l'enregistrer et de se moquer de la réponse (ce serait-il un antidieupl pour les tests E2E)?

14
Daniel Cortes

Voici comment nos tests fonctionnent. Ce degré d'effort peut ne pas être réalisable dans de nombreuses organisations, mais je pense que cela fonctionne très bien. Par rapport à votre question initiale, je pense que lorsque cela est possible, utilisez la chose réelle sur la moquure, par exemple, en utilisant une base de données réelle comme indiqué ci-dessous.

architecture de base

  • SQL Server DB
  • C # Middleware
  • Finge angulaire

CI/CD complet est en place. CI fonctionne dans des conteneurs Docker. Toute cette stratégie de test (à l'exception des tests UAT) fonctionne pour chaque poussée.

middleware

  • Tests unitaires: [.____]
    • Tests de niveau de classe.
    • Connexion de base de données Points à la mise en œuvre en mémoire.
    • Les classes dépendantes sont moquées de Nsubstitut.
  • Tests d'intégration:
    • Notre bibliothèque de service de base possède une infrastructure de configuration de test qui permet de moquer: [.____]
      • Autres services HTTP externes.
      • Services internes.
      • Objets d'authentification (utilisateurs, jetons, etc.).
      • Toute autre entité par interface par injection de dépendance.
    • Base de données
      • Le conteneur Docker que les tests fonctionnent sur des références une autre qui contient SQLServer pour Linux (mcr.microsoft.com/mssql/server:2017-Latest-ubuntu).
      • Ainsi, les tests sont exécutés contre une vraie base de données.
      • Le service possède une liste de scripts qu'il exécute comme nécessaire partout où il commence (non seulement dans CI). Ainsi, lors de chaque course CI, il joue toute l'historique. C'est très rapide cependant, car la base de données commence vide.
        • Le trou de cette stratégie de test est le test de performance.
      • L'initialisation de la configuration du test définit la chaîne de connexion dans cette base de données locale.
    • Le service réel commence, configuré pour les tests.

extrémité avant

Standard, angular /== exécutés via le angular Outillage + karma.

Fin à la fin

  • Cyprès est le cadre utilisé.
  • Le middleware et le front sont tous deux retournés. Le middleware qui commence ici est configuré de la même manière (le même point d'entrée) que les tests d'intégration sous tests de middleware ci-dessus.
  • Il y a quelques appels à des services externes qui ont lieu en dehors de notre contrôle immédiat. Nous utilisons un crochet de cyprès pour empêcher ces appels d'avoir lieu.

tests UAT

Tests manuels effectués par les propriétaires de produits avant les libérations.

1
dudeNumber4