Testng: Ordre d'exécution incorrect de l'écouteur onStart (suite ISuite) en cas de suites internes

Créé le 28 déc. 2017  ·  25Commentaires  ·  Source: cbeust/testng

Version TestNG

Remarque : seule la dernière version est prise en charge

6.11

Comportement attendu

L'écouteur est appelé pour chaque suite, si la suite parent contient des suites enfants, les suites parents doivent s'exécuter en premier avant d'exécuter la suite enfant.

Comportement réel

Les suites enfants sont d'abord exécutées avant d'exécuter la suite parent.

Le problème est-il reproductible sur runner ?

  • [x] Coquille
  • [x] Maven
  • [x] Niveau
  • [x] Fourmi
  • [x] Éclipse
  • [x] Intelli J
  • [x] NetBeans

Exemple de cas de test

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="ParentSuite" parallel="classes" thread-count="10">

    <suite-files>
        <suite-file path="child_suite.xml"/>
    </suite-files>

    <test verbose="1" name="SomeTest">
        <classes>
            <class name="com.example.SomeTest"/>
        </classes>
    </test>

</suite>

listener multi-suite user answer

Commentaire le plus utile

Le même problème s'est produit sur la version 7.0.0-SNAPSHOT
attacher un exemple de projet maven
testng-reportportal-example.zip

Tous les 25 commentaires

Actuellement, suite-files est comme une importation, incluez <test> partir de suites spécifiées et le résultat est une seule suite.
C'est pourquoi onStart n'est appelé qu'une seule fois.

@juherr en fait, il est appelé deux fois (pour chaque fichier de suite). Le comportement a-t-il changé depuis la version 6.11 ?

Ok, deux appels est un problème.

@krmahadevan Quel est le comportement attendu de onStart en cas de suite-files ?

@juherr - Je pense que c'est le bon comportement.

Dans le cadre de #1285 je pense que nous avons changé ce comportement

Je suis capable de reproduire le problème de commande mais, en fait, TestNG exécutait toujours des suites enfants avant la suite parent (https://github.com/cbeust/testng/blame/master/src/main/java/org/testng/TestNG .java#L1191-L1199) et les écouteurs n'étaient pas correctement ajoutés avant #1285.

6.13 aurait dû résoudre le problème de doublon avec #1533

@avarabyeu
Je peux modifier le comportement de la commande et exécuter la suite principale avant les suites enfants, mais la suite principale se terminera avant ses enfants.
Est-ce que ça ira pour vous ? Une meilleure prise en charge des enfants implique de grands changements que nous ne ferons probablement pas.

Pourriez-vous confirmer que la version 6.13 corrige le problème de duplication d'événements ?

@juherr Peut confirmer que 6.13 n'a pas de problème de duplication.

Je peux modifier le comportement de la commande et exécuter la suite principale avant les suites enfants, mais la suite principale se terminera avant ses enfants.

Oui, ce serait plus facile pour nous de gérer les événements dans ce cas. Merci!

@cbeust @krmahadevan WDYT si nous modifions l'exécution de la commande de suite/enfant ?

@avarabyeu - J'essaie juste de comprendre, en quoi l'ordre d'exécution est-il important ? Pourquoi est-ce problématique si les suites enfants s'exécutent en premier, puis la suite parent ?

@juherr - avons-nous vraiment besoin de changer cela ? Nous pouvons facilement régler cela au niveau du test lui-même en déplaçant le contenu de la suite principale dans une suite à part entière, puis en faisant fonctionner la suite principale comme une suite de suites non ? Juste essayer de comprendre ce que nous allons obtenir comme avantages ?

@krmahadevan Vous trouverez plus de détails sur https://github.com/reportportal/reportportal/issues/273
Le but est de trouver une solution courte au problème sans casser les choses.
Avec plus de temps, je préférerais avoir une bonne gestion des suites pour enfants, mais je ne pense pas que cela soit très important.
Si je comprends bien votre solution, vous proposez de fusionner tous les enfants <test> dans le parent <suite> , n'est-ce pas ?

@krmahadevan ReportPortal est un outil de reporting en temps réel des résultats de différents moteurs de test. Donc, fondamentalement, son client gère les événements déclenchés par l'écouteur testng et les envoie au serveur. L'ordre de ces événements est important car, basé sur eux, ReportPortal remplit des structures de données internes basées sur des arborescences - par exemple, il est impossible de créer un enfant avant le parent.

@juherr

Si j'ai bien compris votre solution, vous proposez de fusionner tous les enfantsdans le parent, à droite?

Non. Ce n'est pas ce que je voulais dire. Je dis essentiellement que le fichier xml de la suite parent ne doit pas contenir d'entrées de balise <test> mais ne contenir que des entrées <suite-file> .

@avarabyeu - Merci d'avoir partagé un contexte supplémentaire. Je ne suis toujours pas en mesure de saisir l'idée derrière l'importance de l'ordre d'exécution, car TestNG déclenche des événements avant et après l'exécution de la suite. Ainsi, que les suites enfants s'exécutent ou que le parent s'exécute, les événements correspondants sont déclenchés, non ?

Non. Ce n'est pas ce que je voulais dire. Je dis essentiellement que le fichier xml de la suite parent ne devrait pas avoir deles entrées de balises qu'il contient mais ne contiennent queentrées.

D'accord! Certes, c'est quelque chose que nous pouvons vérifier et mettre en garde contre.

Ainsi, que les suites enfants s'exécutent ou que le parent s'exécute, les événements correspondants sont déclenchés, non ?

Oui, mais nous construisons la même structure dans notre base de données interne - suite parent -> suite enfant. Donc, si la suite enfant démarre plus tôt que le parent, nous ne pouvons tout simplement pas la gérer côté serveur.

@avarabyeu - Que se passe-t-il donc si vous n'avez aucune balise <test> dans votre fichier de suite maître, mais qu'il ne contient que des balises <suite-file> ? Cela ne vous conviendrait-il pas ?

J'essaie essentiellement de voir ce qui peut être fait pour vous aider à résoudre le problème sans aucun changement de code.

@krmahadevan en fait, c'est une bonne question. Le problème est venu de nos clients et je ne sais pas vraiment s'ils sont capables d'ajuster leurs fichiers testng.xml afin de résoudre ce problème d'intégration. Laissez-moi vérifier ce qui se passe si nous n'avons pasen suite parentale.

Fermeture de ce sujet pour l'instant. @avarabyeu Veuillez commenter si vous avez une mise à jour sur la requête que j'ai soulevée afin que nous puissions trier davantage ce problème si nécessaire.

@krmahadevan @avarabyeu
J'ai essayé d'exécuter une suite de suite-file s, sans aucune balise <test> dans le fichier de la suite principale et le problème persiste.
(testé sur TestNG v6.14.3)

Quelques modifications ont été apportées à la dernière base de code dans TestNG en ce qui concerne
à la commande de suites, etc.,

Alors pouvez-vous s'il vous plaît essayer à nouveau en utilisant TestNG 7.0.0-SNAPSHOT et poster en arrière
vos résultats ?

Si le problème persiste, merci de nous aider à partager un échantillon qui peut
être utilisé pour reproduire le problème.

Le même problème s'est produit sur la version 7.0.0-SNAPSHOT
attacher un exemple de projet maven
testng-reportportal-example.zip

@ulmanA - L'échantillon que vous avez partagé ne dit pas grand-chose (du moins ce n'était pas explicite pour moi).

Vous avez essentiellement un fichier de suite appelé all-suites.xml qui ressemble à ci-dessous

<suite name="All Suites" verbose="2">
    <suite-files>
        <suite-file path="suite1.xml"/>
        <suite-file path="suite2.xml"/>
    </suite-files>
</suite>

Et quand je lance ceci, je remarque que suite1 est exécuté en premier, puis suite2 , conduisant à all_suites se complétant.

...
... TestNG 7.0.0-SNAPSHOT by Cédric Beust ([email protected])
...
Suite 1 -> TEST 1
Suite 1 -> TEST 2

===============================================
All Suites (0)
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================
Suite 2 -> TEST 2
Suite 2 -> TEST 1

===============================================
All Suites (1)
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================

===============================================
All Suites
Total tests run: 4, Passes: 4, Failures: 0, Skips: 0
===============================================

Alors, quelle est votre attente ici? Ce n'est pas clair.

all_suites est visualisé comme un container of suites donc ça va finir en dernier.

@avarabyeu
Répondre s'il vous plaît.

@krmahadevan Je ne suis pas le rapporteur du bogue mais je m'attendrais à l'ordre d'exécution suivant :

  1. ISuiteListener#onStart - all_suites
  2. ISuiteListener#onStart - suite1
  3. ISuiteListener#onFinish - suite1
  4. ISuiteListener#onStart - suite2
  5. ISuiteListener#onFinish - suite2
  6. ISuiteListener#onFinish - all_suites

Alors oui, all_suites devrait finir en dernier mais il devrait commencer en premier, car il contient toutes les autres suites ! Cependant, actuellement all_suites ne se comporte pas comme un conteneur racine mais comme un conteneur de n'importe queléléments non inclus dans les suites imbriquées.

Cette page vous a été utile?
0 / 5 - 0 notes