2017-10-05 3 views
0

J'ai un job Jenkins qui exécute des tests Selenium sur Browserstack via le framework Nightwatch.js. Nous avons une suite complète de tests que nightwatch exécute dans des processus séparés, et nous avons besoin d'un moyen de ramener la valeur de réussite/échec à Jenkins après que tous les tests aient été exécutés.Echec d'un job Jenkins lorsque l'assertion de test de nightwatch échoue dans Browserstack

J'ai essayé d'utiliser le crochet teardown Nightwatch pour exécuter un morceau de code à la fin de chaque module avec if(this.results.failed) { take action }, mais je ne peux pas comprendre quelle action je dois prendre afin de rendre l'échec accessible à le travail de Jenkins. Mon idée initiale était de créer une variable d'environnement, et la définir sur false chaque fois qu'un test échoue, mais je pense que chaque processus s'exécute dans un sous-shell séparé, donc les variables créées/modifiées par le module de test ne sont pas accessibles.

Ma deuxième idée était de créer un compteur dans le module globals, mais cette valeur ne s'incrémente pas comme prévu lorsqu'elle est référencée par une méthode globale after.

+0

Je n'ai pas beaucoup d'expérience avec nodejs. mais si vous pouviez sortir avec un code d'état autre que 0, votre job jenkins échouera. essayez ceci dans {{action}} –

+0

J'ai effectivement essayé ceci, nous utilisons le module gulp-nightwatch, et il s'avère que si vous quittez le test avec le statut! = 0, gulp-nightwatch n'envoie aucun détail à la console. Il imprime seulement que gulp-nightwatch a rencontré une erreur, et notre reporter pour cette suite de tests échoue. – imthefrizzlefry

Répondre

0

J'ai été en mesure de résoudre ce problème en utilisant le Jenkins Log Parser Plugin pour échouer le test à la veille nt que la sortie de la console contient la chaîne "TEST FAILURE".

Cela a été accompli en créant un fichier de règles qui contient une seule ligne:

error /TEST FAILURE/

0

Voici comment je vous recommande de le faire:

  • Créer un écrivain synchronisé dans la fonction afterEach (https://github.com/nightwatchjs/nightwatch-docs/blob/master/guide/using-nightwatch/test-hooks.md) et écrire les résultats des tests dans un fichier plat (csv, TSV, txt, etc.) sur le système exécutant jenkins. Vous pouvez choisir d'écrire uniquement les échecs if (this.results.failed) OU écrire tous les testID avec l'état réussite/échec dans le fichier
  • Une fois la version de test terminée, vous disposez de tous les détails dans le fichier plat (y compris les détails sur les échecs).
  • Vous pouvez maintenant déclencher un travail en aval (un travail différent sur Jenkins utilisant le plugin jenkins en aval) qui a un script simple (shell script) à la recherche d'échecs dans le fichier de sortie de test que vous avez écrit à l'étape 1. détails s'il y avait des échecs de test

Remarque: Si vous avez plusieurs tests en cours d'exécution indépendant construit, s'il vous plaît assurez-vous utilisez les jenkins construire plugin bloqueur pour démarrer le travail en aval après tout builds indépendant sont terminés

+0

Merci pour la réponse. Je vais tester cela aujourd'hui! – imthefrizzlefry