1

Dans mes tests automatisés, je souhaite utiliser un @DataProvider pour 1.) effectuer des mises à jour de base de données, afin de garantir l'état des données que je vais tester , et 2.) retourner les données de test qui fonctionneront dans un tel environnement. Ce que je trouve est que les mises à jour sont faites avec succès dans le corps de @DataProvider, puis les mises à jour faites dans mon test réussissent, toutes les assertions passent, puis les mises à jour de test sont annulées. Toutefois, les mises à jour @DataProvider ne sont pas annulées et sont laissées après la fin du test.Mises à jour de base de données effectuées dans TestNG @DataProvider pas de retour

Existe-t-il un moyen de restaurer les mises à jour de base de données effectuées dans un corps @DataProvider?

Répondre

0

Vous question est simillar à How to delete data only after all tests, based on inputs from data provider, are run?

la réponse Il est applicable pour vous.


MISE À JOUR

Dans votre cas @DataProvider est une mauvaise option. Dans TestNG, vous pouvez uniquement travailler avec les résultats fournis par @DataProvider et ils s'exécutent avant la suite. Vous avez plusieurs façons de résoudre votre problème.

  • Créez un écouteur qui connecte les transactions de base de données avec le résultat @DataProvider associé. Il doit mettre en œuvre ITestListener. À chaque événement de fin de test, votre écouteur annulera les transactions requises.
  • Deuxième option, est comme le premier, mais votre @DataProvider ne fait rien avec DB, il suffit de fournir quelques entrées, qui doivent être traitées par @BeforeMehtod et @AfterMethod, mises à jour et annulées respectivement. Dans ce cas, tout votre contexte pourrait être stocké dans une classe de test particulière.
  • Vous pouvez également créer une nouvelle annotation en utilisant les principes décrits ci-dessus, en fournissant et en gérant vos entités commerciales.
+0

C'est vrai, mais il y a quelques problèmes avec cette solution. 1.) Certaines données sont insérées et certaines données sont mises à jour. Les données mises à jour ne peuvent pas simplement être supprimées, elles doivent revenir à leur état précédent. 2.) Je ne veux pas que mon équipe doive se rappeler d'écrire du code "Annuler" pour chaque mise à jour qu'ils font dans un @DataProvider. L'annulation d'une transaction est beaucoup plus simple. Existe-t-il un moyen d'annuler de manière transactionnelle les mises à jour effectuées dans @DataProvider? –

+0

Veuillez voir la réponse mise à jour – RocketRaccoon