Digital Cypress: Was kann das Testing-Framework fürs Frontend?

09:40  05 mai  2021
09:40  05 mai  2021 Quelle:   t3n.de

Microsoft bringt Foldable-Unterstützung in Googles Framework Flutter

  Microsoft bringt Foldable-Unterstützung in Googles Framework Flutter Auf dem vor wenigen Tagen stattgefundenen Event „Flutter Engaged“ von Google gab Microsoft bekannt, dem merklich an Bekanntheit gewinnenden Framework unter die Arme zu greifen. Man spendiert Flutter eine sehr frühe Vorabversion der Unterstützung für Foldables, passend also zum kürzlich in Deutschland erschienenen Microsoft Surface Duo. Bevor dieses Feature jedoch in Flutter an sich landet, […]Ein Weg mehr, für das Surface Duo zu entwickeln

Cypress ist ein Framework für das Testing von Web-Anwendungen. Das Open-Source-Framework ähnelt auf den ersten Blick Selenium, ist aber fundamental anders und angeblich besser, einfacher und schneller. Wir haben einen genaueren Blick auf das Tool geworfen.

Cypress: Was kann das Testing-Framework fürs Frontend? © REDPIXEL.PL / Shutterstock Cypress: Was kann das Testing-Framework fürs Frontend?

Ein Softwaretest prüft und bewertet Software auf Erfüllung der für ihren Einsatz definierten Anforderungen und misst ihre Qualität. Die gewonnenen Erkenntnisse werden zur Erkennung und Behebung von Softwarefehlern genutzt – sagt Wikipedia.

Drei verbreitete Arten von Tests sind:

Griechenland zum Öffnen von High Schools als Home-Testing-Kampagne beginnt

 Griechenland zum Öffnen von High Schools als Home-Testing-Kampagne beginnt von Deborah Kyvrikosaios und Lefteris Papadimas Die freie Verteilung, inmitten der Coronavirus-Erkrankung (Covid-19) Pandemie, in Athen Athens (Reuters) - Griechenland wird in der nächsten Woche die High Schools trotz einer Rekordzahl der täglichen neuen Fälle in letzter Zeit eröffnen, sagte Beamte am Mittwoch, wie die Regierung mit der Massenverteilung begann Von Home-Tests-Kits, die es hofft, wird es helfen, die Pandemie zu kontrollieren und die Wirtschaft wieder aufzunehmen.

• Unit-Tests – kleine Tests, mit denen eine ganz spezifische Funktionalität getestet werden soll.

• Integration-Tests – Tests, mit denen das Zusammenspiel verschiedener Funktionalitäten getestet werden soll.

• End-to-End-Testing – Testing des gesamten Programmflows von Anfang bis Ende.

Zur Automatisierung von Tests gibt es eine Reihe von Frameworks; bekannte Namen sind zum Beispiel Mocha, Jasmine oder auch Jest. Viele davon basieren auf Selenium. Selenium ist so etwas wie ein Industriestandard. Für Entwickler, die über ausgereifte Programming- und Skriptingskills verfügen, bietet Selenium eine Flexibilität, die viele andere Tools vermissen lassen. Mit Selenium könnt ihr Tests in Java, Groovy, Python, C#, Ruby, PHP und Perl schreiben, die auf allen Systemen und in allen Browsern – Chrome, IE, Firefox und sogenannten Headless Browsern, also Browsern ohne grafische Benutzeroberfläche – laufen. Der Nachteil: Um mit Selenium vernünftig arbeiten zu können, braucht ihr schon wirklich ausgereifte Codingskills und müsst relativ viel Zeit investieren, bis ihr alles konfiguriert und aufgesetzt habt.

Flappy Bird is back – in Big Surs Benachrichtigungsleiste

  Flappy Bird is back – in Big Surs Benachrichtigungsleiste Der Entwickler Neil Sardesai hat am Wochenende ein Video gepostet, in dem er zeigt, wie das Kultspiel „Flappy Bird“ in einer Benachrichtigung unter MacOS läuft. Entscheidend ist ein neues Apple-Framework. Derzeit nur als Proof-of-Concept existiert eine MacOS-Big-Sur-Notification-Center-Version von Flappy Bird. Die hat der Entwickler Neil Sardesai unter Verwendung des neuen User-Notifications-UI-Frameworks von Apple umgesetzt. Did you know you can put a whole game inside of a push notification pic.twitter.

„Testing was broken“

Wollt ihr testen, ob eure App für den User so zu nutzen ist, wie ihr das vorgesehen habt, sind End-to-End-Tests das Mittel der Wahl. Sinnvoll verfasst, sind sie dem Nutzerverhalten am Nächsten – Probleme und Bugs in eurer App findet ihr am ehesten durch End-to-End-Tests. End-to-End-Tests sind aber auch kostspielig. Sie zu schreiben, dauert lange, sie auszuführen auch. Sie sind fragil und der Prozess wird von vielen Entwicklern als anstrengend empfunden. Aus diesen Gründen (Zeit, Ressourcen, Mühe) entscheiden sich viele Frontend-Entwickler beim Testing ihrer Applikationen für einzelne Unit- und Integration-Tests. Genau hier setzt Cypress an. Mit Cypress könnt ihr Tests für alles schreiben, was in einem Browser – Firefox, Edge, alle Chromium-basierten Browser – läuft. Das Framework will Setup, Schreiben, Durchführung und Debugging von End-to-End-Tests vereinfachen. Integration- und Unit-Tests sollen damit ebenfalls einfacher werden.

Hennessey Venom F5 Treffer über 200 Meilen pro Stunde in Tests

 Hennessey Venom F5 Treffer über 200 Meilen pro Stunde in Tests Das Hennessey Venom F5 Hypercar hat seine erste Phase der Real-World-Tests bestanden - und hat bereits einen beeindruckenden Leistungsmeilenstein festgelegt. © Bereitgestellt von Motoring Research Hennessey Venom F5 Testing Trotz des Gift-F5, der mit nur 900 PS in Tests tätig ist, sah -Hochgeschwindigkeitsläufe das Auto durch die 200 Meilenh-Barriere. bedeutet, dass es immer noch etwas gibt, um die geplante 311 km / h-Höchstgeschwindigkeit zu erreichen.

Cypress bedient sich bei anderen Frameworks

Cypress macht Anleihen bei Mochas bdd-Syntax – die sich für Unit- als auch Integration-Tests gleichermaßen eignet. Alle Tests, die ihr in Cypress schreiben werdet, basieren auf den folgenden Methoden:

describe(), context(), it(), before(), beforeEach(), afterEach(), after(),.only() und .skip()

Außerdem von Mocha übernommen: Der async-Support des Frameworks. Den haben die Cypress-Macher etwas modifiziert, alle Anpassungen sind jedoch komplett transparent. Während Mocha die Struktur stellt, kommen die Assertions in Cypress von Chai, die aufgrund der besonders guten Lesbarkeit und den On-Point-Fehlermeldungen in Cypress adaptiert wurden. Cypress schaut sich verschiedene jQuery-Chainer-Methoden von Chai-jQuery ab, stubs und spies von Sinon-Chai und kommt mit einer Reihe weiterer Library-Utilities.

Um auszuprobieren, ob Testing in Cypress wirklich so einfach ist, haben wir einen einfachen Login, bestehend aus Nutzername und Passwort, gebaut. Damit wir die Elemente innerhalb des DOM wiederfinden und über query-Selectoren darauf zugreifen können, sind beide, Nutzername und Passwort, mit einer ID versehen, #username respektive #password.

Nächste Ohrfeige für Mazepin! Strafe nach schwacher Leistung

  Nächste Ohrfeige für Mazepin! Strafe nach schwacher Leistung Beim Qualifying zum Spanien-GP ist Haas-Pilot Nikita Mazepin erneut chancenlos. Der Teamkollege von Mick Schumacher wird für ein Vergehen sogar noch bestraft. © Bereitgestellt von sport1.de Nächste Ohrfeige für Mazepin! Strafe nach schwacher Leistung Es gibt mal wieder Negativ-Nachrichten rund um Nikita Mazepin.Der Haas-Pilot und Teamkollege von Mick Schumacher ist nach dem Qualifying zum Großen Preis von Spanien in Barcelona von den Renn-Kommissaren bestraft worden, weil er McLaren-Pilot Lando Norris behindert hatte (Formel 1: Der Große Preis von Barcelona am Sonntag ab 15 Uhr im LIVETICKER).

Los geht’s!

Starten könnt ihr einfach über den Terminal-Command npm install cypress –save dev, den Test-Runner für das grafische Interface könnt ihr mit npx cypress open öffnen oder (einfacher!) indem ihr den cypress:open -Command zur Script-Section eurer package.json hinzufügt.

Fügt cypress:open zur scripts-section eurer package.json hinzu. (Screenshot: t3n)

Wenn ihr Cypress das erste Mal startet, gibt euch das Framework mehrere Beispiel-Tests an die Hand. Die könnt ihr euch anschauen, um erstmal einen Überblick darüber zu bekommen, was mit Cypress alles geht. In /cypress/integration/[whatever you wanna call your-project].spec.js könnt ihr euren ersten Test-Test schreiben. Ein Test für eine Login-Funktion kann zum Beispiel so aussehen.

it("can find and type in email”, () => { cy.get(“#email”)                     .type(user@t3n.de)                        .should(“have.value”, user@t3n.de);            });

Ziel des Tests ist es, sicherzustellen, dass der Nutzer einer Login-Page seine E-Mail-Adresse in den Input schreiben kann. Zuerst ziehen wir uns das Element über cy.get("#email“) dann nutzen wir die .type-Methode, um den Test eine E-Mail-Adresse eintragen zu lassen. Im dritten Schritt stellen wir über .should sicher, dass die Annahme stimmt. Das ist ein ziemlich simpler Test, der aber gut illustriert, wie einfach das in Cypress funktioniert.

Red-Bull-Taktik geht schief! Hamilton macht Verstappen nass

  Red-Bull-Taktik geht schief! Hamilton macht Verstappen nass Max Verstappen ist in Barcelona lange auf Siegkurs. Doch die riskante Red-Bull-Strategie geht nicht auf. Hamilton schlägt spät zu. Mick Schumacher überzeugt. © Bereitgestellt von sport1.de Red-Bull-Taktik geht schief! Hamilton macht Verstappen nass Ein taktischer Fehler hat Red Bull womöglich den Sieg beim Großen Preis von Spanien gekostet!Am Ende musste sich Max Verstappen nur mit Platz zwei begnügen, nachdem Mercedes-Pilot Lewis Hamilton in Barcelona mit frischen Reifen am Niederländer vorbeigeflogen und zum Sieg gerast war.

Wenn ein Nutzer unseres Logins sich mit einem falschen Passwort einloggt, soll er eine Failure-Message angezeigt bekommen. Ob das funktioniert, testen wir so:

“it will fail when valid user with invalid password”, () => { cy.get(“#email”).type(“user@t3n”); cy.get(“#password”).type(“12345”); cy.get(“input[type=submit]”).click(); cy.get(“#login-message”).should(“have.text”, “Login failed”), });

In diesem Test finden wir erst E-Mail- und Passwort-Formelemente, füllen sie – mit richtiger E-Mail-Adresse und falschem Passwort – aus und klicken den Submit-Button, dann finden wir das Element mit der id #login-message und überprüfen, ob die dann „Login Failed“ lautet. Durch die Aneinanderreihung derartiger kleiner Tests könnt ihr dann theoretisch eure ganze App von Anfang bis Ende durchtesten.

Ein wirklich großer Pluspunkt für Cypress ist, dass ihr dem Framework nicht sagen müsst, dass es auf Elemente warten soll – das macht es automatisch für euch. In einem Test, der zum Beispiel checkt, ob sich die URL nach Login dahingehend verändert, als dass die URL das Nutzerprofil beinhaltet –

cy.location("pathname").should("include", "/user/profile");

– wartet Cypress den Seitenwechsel ab und führt anschließend den Test aus. Klappt der Seitenwechsel nicht, beendet Cypress den Test einfach und ihr bekommt eine Fehlermeldung. Ihr müsst nirgends festlegen, dass Cypress warten soll, bis die Seite geladen ist, das passiert automatisch – das Tool nutzt standardmäßig einen Timeout, je nach Applikation. Die verschiedenen Timeouts findet ihr in der Konfigurationsdoku.

-Testzentren in Melbourne überwältigt, da die Fälle in

-Testzentren in Melbourne überwältigt, da die Fälle in -Testkliniken in Melbourne steigen, um die Menschen wegzudrehen, um die Menschen als Nachfrage zu wenden, die nach dem jüngsten COVID-19-Cluster im Norden der Stadt steigen. Es ist der Anruf an Waffengesundheitsbeamten, auf die erhofft ist, aber einige Standorte waren überwältigt und mussten ihre Türen schließen. "Es ist ziemlich frustrierend, dass wir wieder in dieser Situation sind", sagte eine Person in der Linie.

Auch interessant: Best Practices im agilen Remote Testing – so funktioniert es!

Bis hierhin und nicht weiter

Neben all diesen Vorteilen hat Cypress natürlich auch Nachteile. Cypress automatisiert euren Browser mit seiner framework-eigenen Architektur – und unterliegt einigen damit zwangsläufig einhergehenden Restriktionen:

• Cypress ist kein Allzweck-Testing-Tool. Das Framework ist für eine Sache ausgelegt: End-to-End-Tests für eure App – und zwar während des Entwicklungsprozesses, nicht danach.

• Commands in Cypress werden innerhalb eines Browsers ausgeführt. Das heißt, auch die Evaluation eures Test-Codes findet innerhalb des Browsers statt – in der Sprache des Web: JavaScript. Das macht die Kommunikation mit dem Backend – eurem Server oder der Datenbank – etwas schwieriger. Ihr könnt aber zum Beispiel browser-kompatible Node-Module nutzen. Backend-Adapter für weitere Sprachen und Umgebungen sind bereits in Planung.

• Die „Cypress runs inside the browser“- Geschichte bringt noch weitere Einschränkungen mit sich. Ihr könnt in Cypress nicht über mehrere Tabs testen – also ob beim Klick auf einen Link ein neuer Tab geöffnet wird. Tests, die natives Browser-Verhalten testen, braucht ihr aber eigentlich eh nicht – was der Browser macht, hat ja nichts mit eurer App zu tun. Stattdessen könnt und solltet ihr in diesem spezifischen Fall einfach das target=“blank“-Attribut testen, das Element, das das Öffnen des neuen Tabs triggert, zum Beispiel so:

cy.get(‘a[href=“/t3n”]‘).should(‘have.attr‘, ‘target‘, ‘_blank‘)

• Ihr könnt mit Cypress nicht über mehrere Tabs testen – und nicht über mehrere Browser. Allerdings könnt ihr Cypress zu diesem Zweck zum Beispiel mit Selenium oder Puppeteer synchronisieren. In der Doku findet ihr ein ausführliches How-To für einen Workaround für dieses Problem.

Was ist eigentlich GraphQL?

  Was ist eigentlich GraphQL? GraphQL stammt wie React aus dem Hause Facebook. Nur, was steckt eigentlich genau hinter der Abfragesprache? Und wo ist der Unterschied zu Rest? Unser Artikel liefert einen Überblick über die wichtigsten Fakten. © Game art assets/Shutterstock Was ist eigentlich GraphQL? GraphQL ist – wie der Name vermuten lässt – eine Abfragesprache zum Auslesen und Manipulieren von Daten in API und erfreut sich vor allem seitdem sie 2015 Open Source wurde steigender Beliebtheit.

• Ihr könnt in Cypress keine zwei Superdomains im gleichen Test besuchen. Zwei verschiedene Superdomains sind zum Beispiel https://t3n.de und https://hardwrk.com/. Verschiedene Subdomains in einem Test wiederum sind kein Problem – also https://t3n.de/tag/entwicklung-design/ und https://t3n.de/tag/software-infrastruktur/. Der Grund: Cypress wechselt in jedem Test zur jeweiligen Domain. Die Origin-Policy der Browser gibt vor, dass Dinge wie localStorage, Service Worker, Cookies und viele andere API nicht über verschiedene Super-Domains geteilt werden dürfen. So wird sichergestellt, dass alles, was ihr auf einer Website tut, keinen Einfluss auf eine andere haben kann. Verschiedene Superdomains in einem jeweils eigenen Test zu besuchen, geht aber natürlich.

Als Faustregel gilt wie immer, dass ihr nicht versuchen solltet, in Cypress auf Drittanwendungen zuzugreifen. Ausnahme: Wenn ihr Authentifizierungslösungen wie OAuth oder Single-Sign-on nutzt, kommt ihr da wahrscheinlich nicht dran vorbei. Die Cypress-Docs bieten mehrere Guides mit ausführlichen Beschreibungen, was in solchen Fällen zu tun ist.

Fazit

Cypress läuft – nur falls ihr es bisher verpasst habt – innerhalb des Browsers. Das kommt mit einigen Restriktionen, die allerdings für den Hauptzweck des Ganzen – End-to-End-Testing von Anwendungen innerhalb eines Browsers – vollkommen okay sind. Seit April 2021 ist Cypress 7 verfügbar – inklusive eines neuen Features namens Component Test Runner. Damit bietet das Framework künftig die Möglichkeit, die Komponenten eurer App in Isolation über den Browser zu testen. Bisher musstet ihr dafür auf  Node-basierte Testing-Umgebungen zurückgreifen, zum Beispiel Jest oder Mocha. Noch befindet sich das Feature allerdings in der Alpha-Phase.

Cypress ist Open Source und innerhalb eines begrenzten Rahmens kostenlos. Das Framework ist einfach zu installieren, ihr braucht keine Dependencies, alles ist komplett modular. Testing steht mit Cypress nicht mehr am Ende der Entwicklung einer App, sondern wird Teil eures Workflows und findet währenddessen statt. Super für Nicht-Entwickler: Cypress kommt mit einer grafischen Benutzeroberfläche, die ihr für eure Tests nutzen könnt – ihr könnt aber auch innerhalb eines Headless Browsers über die Kommandozeile testen. Wenn ihr schon andere Frameworks zum Test-Schreiben genutzt habt, werden euch viele Features von Cypress bekannt vorkommen. Aber auch wenn nicht, dürftet ihr euch relativ schnell einarbeiten können. Die Doku ist sehr ausführlich und wird ergänzt durch Grafiken, Gifs und Videos. Die Hauptschwierigkeit am Testing – sich sinnvolle Tests zu überlegen – bleibt zwar nach wie vor an euch hängen, alles, was sich drum herum befindet, macht Cypress euch aber einfacher.

Aktualisiert am 4.April 2021

Was ist eigentlich GraphQL? .
GraphQL stammt wie React aus dem Hause Facebook. Nur, was steckt eigentlich genau hinter der Abfragesprache? Und wo ist der Unterschied zu Rest? Unser Artikel liefert einen Überblick über die wichtigsten Fakten. © Game art assets/Shutterstock Was ist eigentlich GraphQL? GraphQL ist – wie der Name vermuten lässt – eine Abfragesprache zum Auslesen und Manipulieren von Daten in API und erfreut sich vor allem seitdem sie 2015 Open Source wurde steigender Beliebtheit.

usr: 0
Das ist interessant!