paint-brush
Playwright vs. Cypress für automatisierte REST-API-Tests: Wer hat die Nase vorn?von@bormando
8,617 Lesungen
8,617 Lesungen

Playwright vs. Cypress für automatisierte REST-API-Tests: Wer hat die Nase vorn?

von Dmitrii Bormotov3m2023/09/05
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

Cypress ist ein Testautomatisierungs-Framework mit doppeltem Zweck – UI- und API-Testabdeckung. Playwright hat den gleichen Zweck, wird jedoch nicht mit standardmäßigen Browsern ausgeliefert – Sie müssen diese mit einem separaten Befehl installieren (wenn Sie möchten). Wenn es um das leichteste und schnellste Tool geht, ist es mit Sicherheit Playwright, da die Installation weniger Zeit in Anspruch nimmt und keine zusätzlichen Ressourcen für die Ausführung von Browsern verbraucht, da API-Tests nicht erforderlich sind.
featured image - Playwright vs. Cypress für automatisierte REST-API-Tests: Wer hat die Nase vorn?
Dmitrii Bormotov HackerNoon profile picture

Hallo zusammen!


Ich habe Testautomatisierungs-Frameworks mit einem doppelten Zweck – UI- und API-Testabdeckung – immer skeptisch betrachtet. Normalerweise führen Sie verschiedene Testebenen in verschiedenen Testläufen (oder Ereignisprojekten) aus, da wahrscheinlich jede davon ihre eigene hat Abhängigkeiten , Aufbau, Und Umgebungsvariablen .


Kürzlich habe ich einen Blick darauf geworfen, was Playwright in Bezug auf API- Tests zu bieten hat, und es mit meiner Cypress- Erfahrung verglichen. Hier ist also, was ich mit euch allen teilen muss …

Zypresse

Cypress hat API- Tests vor einiger Zeit ermöglicht. Auf dem Lernportal finden Sie einen Artikel darüber, wie großartig dieses Tool in Bezug auf API- Tests ist, mit Beispielen.

Installationsleistung

Um Tests auszuführen, müssen Sie Ihre Projektabhängigkeiten installieren, richtig? Nun, Cypress wird mit einem Elektronenbrowser geliefert, dessen Installation möglicherweise ziemlich überflüssig (und zeitaufwändig) ist, wenn Sie ausschließlich API- Tests ausführen möchten (sagen wir, Sie haben separate Jobs in CI für UI- und API-Testläufe). was normalerweise der Fall ist).


Zeit für die saubere Installation von Cypress


Sieht nicht gut aus, oder? ☝️


Wenn Sie API- Tests ausführen, wird außerdem trotzdem ein Browser gestartet.


Cypress führt eine Browsersitzung gemäß API-Spezifikationen aus


Aufzeichnung der API-Testspezifikation im Browser

Testbeispiel

Ein einfacher API- Test mit Cypress würde so aussehen:


 it('Sign in with valid credentials', () => { cy.request('POST', '/auth', { login: Cypress.env('username'), password: Cypress.env('password'), }).should(response => { expect(response.body.token).to.be.a('string') expect(response.status).to.eq(200) }) })


Sieht ziemlich einfach und unkompliziert aus, oder? An dieser Stelle ist es wichtig zu sagen, dass es sich um eine gängige Cypress- Syntax handelt – also das Verketten von Dingen , anstatt jede Ausgabe in eine Variable zu schreiben (obwohl dies mit einigen Optimierungen möglich ist ).

Dramatiker

Genau wie Cypress ist Playwright ein Testautomatisierungs-Framework – Sie können ausschließlich ein Browser-Automatisierungstool oder das gesamte Framework (Testläufer, Assertionsbibliothek, Browser-Automatisierungstool, HTTP-Client, Reporter usw.) verwenden.

Installationsleistung

Der Unterschied besteht darin, dass Playwright keine standardmäßigen Browser mitbringt – Sie müssen diese mit einem separaten Befehl installieren (wenn Sie möchten).


Dramatiker saubere Installationszeit


Hier macht es einen großen Unterschied, da es im Hinblick auf die ausschließliche Ausführung von API- Tests keinen Browser oder eine andere Desktop-App ausführt und dadurch Laufzeit und Ressourcen auf Ihrem Computer spart.

Testbeispiel

Ein einfacher API- Test mit Playwright würde so aussehen:


 import {test, expect} from '@playwright/test' test('Sign in with valid credentials', async ({request}) => { const response = await request.post('/auth', { data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, }) expect(response.status()).toEqual(200) expect(await response.json()).toEqual({ token: expect.any(String), }) })


Ich möchte eine Jest-ähnliche Syntax zum Bestätigen von Objekten hervorheben:


 expect(await response.json()).toEqual({ token: expect.any(String), })


Mit dieser Syntax können Sie die gesamte Struktur des Objekts mit nur einem einzigen expect Aufruf überprüfen ☝️

Abschluss

API-Tests sollten klein und leicht sein, da ihre Ausführung nicht allzu viel erfordert.


Fassen wir das obige Material zusammen ...

Installationsleistung

Playwright überzeugt mit einer 13-mal schnelleren, sauberen Installation nach dem Auspacken.


ℹ️ Sie können die Installationszeit von Cypress in CI verkürzen, indem Sie ein Image mit vorinstallierten Abhängigkeiten verwenden oder diese in Ihrem CI- Speicher zwischenspeichern.

Laufleistung

Playwright gewinnt, da für die Ausführung von API-Tests kein Browser erforderlich ist, sodass es direkt zur Sache geht.


ℹ️ Es gibt keine Möglichkeit, den Browser in API-Tests „nicht auszuführen“, da dies Teil der Logik des Frameworks ist.

Testsyntax

Hier kann kein Gewinner ermittelt werden, da es weder für Cypress noch für Playwright einen objektiven Vorteil gibt.


Beide haben eine ziemlich einfache Syntax mit geringfügigen Unterschieden. Ich würde sagen, es ist die Entscheidung des Testers, auszuwählen, was ihm hier gefällt.

Gesamt

Ich kann definitiv sagen, dass es aufgrund seiner Leistung sicher genug ist, Playwright für die API- Testautomatisierung zu verwenden. Es wäre eine faire Lösung, wenn Sie bereits UI- Tests mit diesem Framework hätten.


Mein Rat für diejenigen, die Cypress für UI- Tests verwenden und die API- Ebene abdecken möchten – verwenden Sie besser etwas anderes ( Jest + Axios , ein Beispiel können Sie dort sehen).