Cucumber-js: implementieren --retry

Erstellt am 19. Jan. 2017  ·  33Kommentare  ·  Quelle: cucumber/cucumber-js

Es wäre schön, wenn es eine Funktion gäbe, die die Testsuite X-mal wiederholt und einen Test besteht, wenn dieser Test bei einem der Läufe besteht

help wanted

Hilfreichster Kommentar

In Bezug auf persönliche Meinungsverschiedenheiten mit dieser Funktion (dieses Argument kann so fruchtlos sein wie Tabs vs. Leerzeichen in der Welt der Ingenieure), wenn Cucumber als Werkzeugspezifikation dies implementiert, sollten wir dies auch in der JS-Version dieses Tools unterstützen.

Es ist auch in der realen Welt mit breiten Testsuiten und komplexen Anwendungen unmöglich, 100% gegen Flakeyness zu verteidigen und wird daher unglaublich teuer. Natürlich können Sie eine Entwicklungsreise unternehmen, um es zu verbessern, aber ich bezweifle, dass viele Unternehmen den Luxus der Ressourcen haben, um solche Bemühungen mit einem anständigen ROI zu unterstützen.

In der realen Welt ist es sehr wertvoll, fehlgeschlagene Tests mit zusätzlicher guter Nachverfolgung wiederholen zu können, um Flockigkeit für proaktives Handeln zu erkennen.

Ich würde mich freuen, wenn wir die Entscheidung, dieses Thema zu schließen, noch einmal überdenken würden, und wie bereits erwähnt, bin ich mehr als glücklich, mit einigen Anleitungen daran zu arbeiten.

Alle 33 Kommentare

@ericyliu Es kommt in Gurke 3. Ich

@charlierudolph oder irgendjemand, wenn Sie irgendwelche aufheben und es

Mein mutmaßlicher Ansatz wäre, dass wir am Ende eines laufenden Szenarios feststellen können, ob es fehlgeschlagen ist oder nicht, und es erneut ausführen (einen Status für die Anzahl der erneuten Versuche beibehalten). Wo kann ich das einhaken?

Außerdem würde ich erwarten, dass ich am Ende des gesamten Prozesses auf eine Liste aller Szenarien zugreifen kann, die Anzahl der Wiederholungen und ihren endgültigen Status, damit dies a) protokolliert und b) auf Wunsch auf die Festplatte kopiert werden kann .

Schließen, da ich dies persönlich nicht implementieren möchte, da ich damit nicht einverstanden bin. Ich mag es nicht, eine Funktion bereitzustellen, die verwendet werden kann, um einen Flimmertest zu behandeln, anstatt die Ursache des Flimmerns zu beheben.

👏👏👏

@charlierudolph manchmal ist es unmöglich, mit flackernden Tests umzugehen. In unserer Umgebung haben wir beispielsweise 23 verschiedene Dienste, die von unserer Anwendung aufgerufen werden, und da wir diese Dienste nicht besitzen, kann jeder von ihnen zu einem bestimmten Zeitpunkt ausfallen. Das Flag --retry ermöglicht es uns, den Test erneut auszuführen, damit ein vorübergehender Dienstausfall (wenn der Dienst neu gestartet wird) nicht dazu führt, dass unsere Testsuite fehlschlägt.

In Bezug auf persönliche Meinungsverschiedenheiten mit dieser Funktion (dieses Argument kann so fruchtlos sein wie Tabs vs. Leerzeichen in der Welt der Ingenieure), wenn Cucumber als Werkzeugspezifikation dies implementiert, sollten wir dies auch in der JS-Version dieses Tools unterstützen.

Es ist auch in der realen Welt mit breiten Testsuiten und komplexen Anwendungen unmöglich, 100% gegen Flakeyness zu verteidigen und wird daher unglaublich teuer. Natürlich können Sie eine Entwicklungsreise unternehmen, um es zu verbessern, aber ich bezweifle, dass viele Unternehmen den Luxus der Ressourcen haben, um solche Bemühungen mit einem anständigen ROI zu unterstützen.

In der realen Welt ist es sehr wertvoll, fehlgeschlagene Tests mit zusätzlicher guter Nachverfolgung wiederholen zu können, um Flockigkeit für proaktives Handeln zu erkennen.

Ich würde mich freuen, wenn wir die Entscheidung, dieses Thema zu schließen, noch einmal überdenken würden, und wie bereits erwähnt, bin ich mehr als glücklich, mit einigen Anleitungen daran zu arbeiten.

Um dies hinzuzufügen, hat cucumber-js already rerun Funktionalität, die im Grunde nur ein Wiederholungsversuch ist, aber weniger effizient, da sie als separater Prozess ausgeführt werden muss (dies stellt sicher, dass ich sie richtig verstehe). Wiederholen ist eine viel schönere Lösung.

cc @charlierudolph

Es ist auch in der realen Welt mit breiten Testsuiten und komplexen Anwendungen unmöglich, 100% gegen Flakeyness zu verteidigen und wird daher unglaublich teuer.

Ich hasse absolut flockige Tests. Bei meinen aktuellen Projekten versuche ich, keine Flocke-Tests auf CI auszuführen und diese für manuelle Läufe zu speichern. Wenn etwas aufgrund von Flockigkeit fehlschlägt, können Sie es erneut ausführen oder manuell überprüfen. Dies hängt davon ab, ob Sie Ihre Ursache für die Schuppenbildung finden und die Anzahl der Tests, die damit umgehen müssen, begrenzen.

Um dies zu ergänzen, verfügt cucumber-js bereits über eine Wiederholungsfunktion, die im Grunde nur ein Wiederholungsversuch ist, aber weniger effizient ist, da sie als separater Prozess ausgeführt werden muss (dies bedeutet, dass ich sie richtig verstehe). Wiederholen ist eine viel schönere Lösung

Rerun wurde entwickelt, damit Sie sich ganz einfach auf die Tests konzentrieren können, die behoben werden müssen. Ja, Sie können damit nur die fehlgeschlagenen Szenarien wiederholen.

Ich stimme 100% zu, dass flockige Tests zu vermeiden sind. Abgesehen davon ist die Flockigkeit eines Tests oft etwas, das nicht unter der Kontrolle eines Teams steht. Hier ist meine Situation;

Ich verwende Cucumber, Nightwatch, Selenium und Browserstack, um End-to-End-Tests in einer Web-App durchzuführen. Häufig scheitert ein Szenario an der inhärenten Flakigkeit von Selenium, Browserstack oder dem Browser, in dem ich teste. Interaktionen mit Mausbewegungen sind dafür berüchtigt. Es kommt selten vor, dass ich alle meine Szenarien durchspielen kann, ohne dass zumindest eine Handvoll schuppig ist.

Ich kann Selenium, Browserstack oder Browser nicht weniger flockig machen, das ist einfach die Natur der Tools, mit denen ich arbeiten muss. Die Lösung, die ich benötige, besteht darin, meine Szenarien ein paar Mal wiederholen zu können, wenn sie fehlschlagen.

Ich denke, wir sollten dies noch einmal überdenken. Gurke-Ruby hat es jetzt.

Einverstanden. Hier ist der Code für die Ruby-Implementierung. Könnte für eine JS-Implementierung nützlich sein. https://github.com/cucumber/cucumber-ruby/pull/920/files

Hallo zusammen, ist die Funktion "Wiederholen" jetzt in Cucumber-JS verfügbar? So sehr ich auch zustimme, dass flockige Tests behoben werden sollten, zeigt die Erfahrung, dass dies bei der Arbeit in großen Projekten mit vielen externen Abhängigkeiten nicht immer möglich ist.
Wenn ein so flockiger Testfall aufgrund der fehlenden Wiederholungslogik nicht durch Automatisierung abgedeckt werden könnte, müsste er am Ende ohnehin manuell getestet werden.
Ich glaube, die Verwendung der Wiederholungslogik sollte dem Cucumber-Benutzer überlassen bleiben.
Ich bin mir der "Wiederholungsfunktion" bewusst, aber deren Verwendung erhöht die Komplexität, da Tests separat erneut ausgeführt werden müssen, damit der Gurkenläufer dies transparent für Sie erledigt.

Hallo @charlierudolph und @aslakhellesoy. Gibt es Fortschritte mit dieser Funktion?

Niemand arbeitet meines Wissens daran. Wenn jemand einen Pull-Request bereitstellt, würde ich ihn jedoch hinzufügen.

Hallo @aslakhellesoy, danke für die schnelle Antwort. Dies ist etwas, was wir im Moment wirklich brauchen, da eines der Geräte, die wir automatisieren müssen, etwas instabil ist und es in einem solchen Fall keine wirklich praktischen Alternativen gibt, ein fehlgeschlagenes Szenario einfach erneut auszuführen.
Meine Idee ist, ein Tag pro Szenario zu verwenden, um die Anzahl der Wiederholungen anzugeben, aber zumindest als Startimplementierung, die nur ein Befehlszeilenparameter sein könnte.
Ich werde mir den Code in den nächsten Tagen mal anschauen.

Das wäre toll! Bitte versuchen Sie, es sich wie in Cucumber-Ruby zu verhalten. Wenn es davon abweicht, dürfen wir es nicht zusammenführen, da wir nach Konsolidierung/Konsistenz streben.

Hallo @aslakhellesoy , ich habe die grundlegende Wiederholungsfunktionalität als CLI-Option --retry implementiert. Ich habe es bei der Arbeit mit unserem Projekt getestet und es funktioniert gut. Ich benötige Berechtigungen, um meinen Arbeitszweig voranzutreiben und eine PR zu eröffnen, um die Implementierung zu besprechen. Lass es mich wissen, danke.

@hurrikam Tolle Arbeit.. 👏👏👏
Ich freue mich auch, dies zu nutzen. Ich verwende Nightwatch-Gurke und sie warten darauf, dass dies in Gurke js behoben wird. Ref # https://github.com/mucsi96/nightwatch-cucumber/issues/213

@charlierudolph könntest du bitte dabei helfen? Ich kann meine PR im Moment nicht einreichen.

@hurrikam Sie können einen Fork erstellen und Ihren Code dorthin übertragen und dann eine PR von Ihrem Fork in dieses https://help.github.com/articles/fork-a-repo/

@charlierudolph siehe PR-1114
Wie im Titel erwähnt, ist dies die minimalistische Implementierung (in der Tat sehr wenige Codeänderungen), um die Funktion zum Laufen zu bringen, ohne vorhandene Formatierer und Berichte zu beschädigen.

Ich habe im Cucumber Ruby Repo einige alte Gespräche darüber geführt, ob jeder Durchlauf eines Flocke-Tests gemeldet werden sollte, wobei möglicherweise ein "flockiger" Ergebnisstatus für die vorherigen Durchläufe eingeführt wurde. Ich bin mir nicht sicher, ob dies getan wurde, und der Nachteil wäre, alle Versuche desselben Testfalls in die Protokolle aufzunehmen.

Lassen Sie uns darüber diskutieren.

@hurrikam mein Team hat eine Abzweigung der PR genommen, damit wir diese Funktionalität erhalten können. Es funktioniert bisher wirklich gut. Ich hoffe, Sie können es bald zusammenführen, da die Flagge eine große Hilfe ist!

@Nick-Lucas Das ist großartig - hast du das drin?

@thomaswmanion Ja, wir nutzen die Funktion aktiv. Wir haben ein Backend, das manchmal ein wenig erstickt, wenn es durch Job-Warteschlangen gespült wird, also ist es ein Lebensretter.

Für alle, die den PR verwenden möchten, können Sie Ihre package.json auf meinen Fork zeigen (oder ihn von mir abzweigen):

  "dependencies": {
    "cucumber": "https://github.com/Nick-Lucas/cucumber-js.git#feature/issue-727-retry",
  },

Gurke ist vorgefertigt, sodass sie einfach in node_modules installiert werden kann. Es sollte selbstverständlich sein, dass es definitiv keine Garantie oder Support gibt, da das Feature noch nicht einmal Pre-Alpha ist

BEARBEITEN:

Ich habe jetzt meine Firma verlassen und den Fork an deren Github übergeben: https://github.com/wonderbill/cucumber-js.git#feature/issue -727-retry

Schön!!!! Danke @Nick-Lucas - schätzen Sie das Verständnis, dass Umgebungen von Systemen von Natur aus flockig sein können!

Dies muss in Master zusammengeführt werden, dies ist nicht geschlossen.

@thomaswmanion Ja, wir nutzen die Funktion aktiv. Wir haben ein Backend, das manchmal ein wenig erstickt, wenn es durch Job-Warteschlangen gespült wird, also ist es ein Lebensretter.

Für alle, die den PR verwenden möchten, können Sie Ihre package.json auf meinen Fork zeigen (oder ihn von mir abzweigen):

  "dependencies": {
    "cucumber": "https://github.com/Nick-Lucas/cucumber-js.git#feature/issue-727-retry",
  },

Gurke ist vorgefertigt, sodass sie einfach in node_modules installiert werden kann. Es sollte selbstverständlich sein, dass es _definitiv keine Garantie oder Support_ gibt, da das Feature noch nicht einmal Pre-Alpha ist

BEARBEITEN:

Ich habe jetzt meine Firma verlassen und den Fork an deren Github übergeben: https://github.com/wonderbill/cucumber-js.git#feature/issue -727-retry

Wie kann ich beim Ausführen von Tests die Wiederholungsfunktion ausführen?

@ricardgarcia verwenden Sie einfach die Option --retry siehe https://github.com/owncloud/phoenix/pull/1207/files
Wir nutzen den Branch aus meiner PR hier https://github.com/cucumber/cucumber-js/pull/1205 bis er hoffentlich eines Tages zusammengeführt wird

Hallo @individual-it , vielen Dank für die Antwort. Sollte es funktionieren, wenn ich webdriverIO verwende, um meine Tests auf cucumber-js auszuführen?
Ich habe den Befehl "--retry 1" ausprobiert, aber es werden keine Wiederholungen durchgeführt.

@ricardgarcia Wie in https://github.com/cucumber/cucumber-js/pull/1205 beschrieben , können Sie diese Funktion verwenden

"cucumber": "cucumber/cucumber-js#issue-727-retry"

da die Änderungen noch nicht im Hauptgurkenrepo zusammengeführt sind.

Ja @jain-neeeraj Ich habe diese Version in der package.json verwendet und sie hat nicht funktioniert, aber wie bereits erwähnt, führe ich Tests mit Gurke auf webdriverIO durch, also das folgende Framework "wdio-cucumber-framework". Sollte es irgendwie funktionieren? Wie führe ich die Tests aus, um einen Wiederholungsversuch zu machen, wenn ich das cucumber-js-Framework verwende?

@ricardgarcia lässt gitter zusammenarbeiten https://gitter.im/cucumber/cucumber-js , ich sollte Ihnen bei der Lösung dieses Problems helfen können.

@charlierudolph könnte dies mit dem Master zusammengeführt werden?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

kozhevnikov picture kozhevnikov  ·  6Kommentare

igniteram picture igniteram  ·  7Kommentare

edwinwright picture edwinwright  ·  3Kommentare

jan-molak picture jan-molak  ·  4Kommentare

jfstephe picture jfstephe  ·  4Kommentare