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
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 …
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.
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).
Sieht nicht gut aus, oder? ☝️
Wenn Sie API- Tests ausführen, wird außerdem trotzdem ein Browser gestartet.
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 ).
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.
Der Unterschied besteht darin, dass Playwright keine standardmäßigen Browser mitbringt – Sie müssen diese mit einem separaten Befehl installieren (wenn Sie möchten).
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.
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 ☝️
API-Tests sollten klein und leicht sein, da ihre Ausführung nicht allzu viel erfordert.
Fassen wir das obige Material zusammen ...
✅ 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.
✅ 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.
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.
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).