Diese Woche habe ich mich mit automatisierten Tests mit Protractor befasst.Da das Erstellen eines Zweigs in letzter Zeit häufig mit Zeitüberschreitungen und anderen Problemen fehlschlägt, werde ich versuchen, mehr herauszufinden und das Problem zu beheben.

Was ist automatisiertes Testen.

Automatisiertes Testen erleichtert das Leben, sobald es richtig und nützlich eingerichtet ist 🙂 Automatisiertes Testen verwendet Software / Tools, um Code schnell zu testen. Sie richten Testfälle ein und diese werden über das Tooling ausgeführt. Es ist keine menschliche Interaktion zum Testen erforderlich, nachdem Sie diese Fälle geschrieben haben. Es kann vergleichen, ausführen und Daten durch die Tests eingeben.

Die häufigsten Tests und ihre Unterschiede.

Die beiden gängigsten Testmethoden, auf die ich bisher gestoßen bin, sind Unit-Tests und E2E-Tests.

Unit Testing

Unit Testing konzentriert sich auf das Testen einzelner Einheiten.Stellen Sie sich das wie eine Funktion oder einen kleinen Teil des Codes vor.Sie verspotten (gefälschte) Dienste, Netzwerke und andere Ressourcen und führen alle Tests isoliert durch.
In Angular werden Karma und Jasmine Framework meistens dazu verwendetschreibe Unit-Tests.

E2E testing

Mit e2e testing können Sie die GUI wie ein Benutzer durchlaufen.Klicken auf Schaltflächen, Seiten, Menüs, CRUD. (nicht in Produktion)
Die häufigste Verwendung für E2E-Tests mit Angular ist der Selenium-Webtreiber mit Winkelmesser.
Zum Testen Ihres Codes ist es daher nützlich, Komponententests zu verwenden.Wenn Sie die funktionale Nutzung Ihrer Website testen möchten, sollten Sie E2E ausprobieren.

Warum testen?

Der Zweck besteht darin, schnell auf Probleme zu stoßen.Für E2E-Tests: Sie möchten auch nicht testen, indem Sie auf Bildschirme klicken, um festzustellen, ob die Schaltfläche noch funktioniert oder eine Seite selbst geladen wird.Das wäre viel Arbeit und ist nicht konsistent, wenn es von verschiedenen Entwicklern gemacht würde.

Winkelmesser einrichten.

Wie zu installieren winkelmesser.

Um protractor zu installieren, führen Sie Folgendes über die Befehlszeile aus:
Sie installieren protractor, indem Sie Folgendes ausführen:

npm install -g protractor

Dann installieren Sie webdriver manager für Selenium.

webdriver-manager update

webdriver-manager start

Erstellen Sie einen Test.

Zuerst benötigen Sie zwei Dateien, um einen Test zu erstellen, eine Spezifikationsdatei und eine Konfigurationsdatei.
In der Konfigurationsdatei konfigurieren Sie den Speicherort der Spezifikationsdateien. Es enthält auch den Browser, den Sie zum Testen verwenden möchten.Die Selenium-Serveradresse ist für die Kommunikation enthalten.Und auch der Rahmen ist gesetzt, das ist Jasmin.Dann sieht es ungefähr so aus:

 // conf.jsexports.config = { framework: 'jasmine', seleniumAddress: 'http://localhost:4444/wd/hub', specs: }

Um einen Test zu erstellen, müssen Sie einen Fall bestimmen. Sie erstellen den Fall in der Spezifikationsdatei. Zuerst bestimmen Sie, was der Test muss do.In in diesem Fall prüfen Sie, ob Ihre Landingpage die Begrüßungsnachricht anzeigt.

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message', () => { expect(page.containsElement('#welcome')).toBeTruthy() expect(page.getElementText('#welcome')).toEqual('Welcome') })})

Zuerst beschreiben Sie die Seite oder das Element, das Sie testen möchten, in diesem Beispiel ist es die Zielseite. Describe ist der Name der Testsuite und der Jasmine-Syntax.Es enthält den Fluss von Ende zu Ende. Darin befinden sich ‚it‘-Testfälle.
Dann bestimmen Sie, was ‚es‘ tun muss. ‚It‘ ist eine globale Funktion von Jasmine. Sie können mehrere IT-Testfälle im Flow haben.(beschreiben)
In diesem Fall prüfen Sie, ob die Landingpage die Begrüßungsnachricht angezeigt bekommen hat und daher wie erwartet verfügbar ist. (true, toBeThruthy) Sie überprüfen auch, ob der Text mit dem Text auf der Zielseite übereinstimmt ( toEqual(‚yourText‘)

Async).

JavaScript ist asynchron, Sie wissen nicht, welches Skript zuerst ausgeführt wird. Winkelmesserflüsse sind synchron, Ihre Schritte befinden sich in einer bestimmten Ausführungsreihenfolge. Klicken Sie auf diese und dann auf diese Schaltfläche.
Protractor fließt mit einem Versprechen geschrieben. Protractor kann das Versprechen mit einer Wartezeit behandeln, bis es abgeschlossen ist.

Die Syntax von async await ähnelt der TypeScript-Syntax.
Die asynchrone Funktion kann mit ‚async‘ und ‚await‘ umbrochen werden.
Await wird vor der Zeile verwendet, auf die wir warten möchten.

 describe('Landing page', () => {let page: YourAppbeforeEach(() => { page = new YourApp() page.navigateTo('/login') }) it('should display welcome message',async () => { expect(await page.containsElement('#welcome')).toBeTruthy() expect(await page.getElementText('#welcome')).toEqual('Welcome') })})

Was war das Hauptproblem mit meinen Builds?

Meine Tests sind oft mit Timeouts fehlgeschlagen. Ich habe async await verwendet und hatte immer noch einige Probleme. Wie Sie sehen, ist die Syntax bei TypeScript async / await fast dieselbe.

Ich habe das auf der protractortest.org website.Sie können keine Mischung aus async / await und dem Kontrollfluss verwenden: async / await führt dazu, dass der Kontrollfluss unzuverlässig wird (siehe Github-Problem). Wenn Sie also irgendwo in einer Spezifikation async/await , sollten Sie den SELENIUM_PROMISE_MANAGER: false

Ich habe dies zur Konfiguration hinzugefügt und die verbleibenden Fehler behoben.
Ich baue zwischen einigen Tests eine Wait / Sleep-Zeit ein und es läuft gut.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.