paint-brush
Playwright vs Cypress pour les tests automatisés de l'API REST : qui arrive en tête ?par@bormando
8,617 lectures
8,617 lectures

Playwright vs Cypress pour les tests automatisés de l'API REST : qui arrive en tête ?

par Dmitrii Bormotov3m2023/09/05
Read on Terminal Reader

Trop long; Pour lire

Cypress est un framework d'automatisation de tests à double objectif : couverture des tests d'interface utilisateur et d'API. Playwright a à peu près le même objectif, mais il n'est livré avec aucun navigateur prêt à l'emploi - vous devez les installer avec une commande distincte (si vous le souhaitez). En ce qui concerne l'outil léger et le plus rapide, ce sera certainement Playwright, car il prend moins de temps à installer et ne consomme pas de ressources supplémentaires pour l'exécution des navigateurs, car il est inutile en ce qui concerne les tests d'API.
featured image - Playwright vs Cypress pour les tests automatisés de l'API REST : qui arrive en tête ?
Dmitrii Bormotov HackerNoon profile picture

Bonjour à tous!


J'ai toujours regardé avec scepticisme les cadres d'automatisation des tests avec un double objectif : la couverture des tests d'interface utilisateur et d'API. Habituellement, vous exécuterez différentes couches de tests dans différentes exécutions de tests (ou projets d'événements), car chacune d'entre elles a probablement la sienne. dépendances , configuration, et Variables d'environnement .


Récemment, j'ai jeté un œil à ce que Playwright a à offrir en termes de tests d'API et je l'ai comparé à mon expérience Cypress , alors voici ce que j'ai à partager avec vous tous…

Cyprès

Cypress a rendu possible les tests d'API il y a quelque temps. Vous pouvez trouver un article sur le portail d'apprentissage expliquant à quel point cet outil est performant en termes de tests d'API avec des exemples.

Performances d'installation

Pour exécuter des tests, vous devez installer les dépendances de votre projet, n'est-ce pas ? Eh bien, Cypress est livré avec un navigateur électronique , et son installation peut être assez redondante (et longue) si vous souhaitez exécuter exclusivement des tests d'API (disons que vous avez des tâches distinctes dans CI pour les tests d'interface utilisateur et d'API, ce qui est habituellement le cas).


Temps d'installation propre de Cypress


Ça n'a pas l'air bien, hein ? ☝️


De plus, lorsque vous exécutez des tests API , il lance quand même un navigateur.


Cypress exécute une session de navigateur sur les spécifications de l'API


Enregistrement des spécifications des tests API dans le navigateur

Exemple de test

Un simple test API avec Cypress ressemblerait à ceci :


 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) }) })


C'est joli

Dramaturge

Tout comme Cypress , Playwright est un framework d'automatisation de tests - vous pouvez utiliser uniquement un outil d'automatisation de navigateur exclusivement, ou l'ensemble du framework (exécuteur de test, bibliothèque d'assertions, outil d'automatisation de navigateur, client HTTP, reporter, etc.).

Performances d'installation

La différence ici est que Playwright n'est fourni avec aucun navigateur prêt à l'emploi - vous devez les installer avec une commande distincte (si vous le souhaitez).


Temps d'installation propre du dramaturge


Cela fait une énorme différence ici, car en termes d'exécution exclusive de tests d'API , il n'exécutera aucun navigateur ni aucune autre application de bureau et n'économisera pas de temps d'exécution et de ressources sur votre machine.

Exemple de test

Un simple test API avec Playwright ressemblerait à ceci :


 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), }) })


Je voudrais mettre en évidence une syntaxe de type Jest pour affirmer des objets :


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


Cette syntaxe vous permet de vérifier toute la structure de l'objet avec un seul appel expect ☝️

Conclusion

Les tests API sont censés être petits et légers car ils ne nécessitent pas trop de choses pour être exécutés.


Résumons le matériel ci-dessus…

Performances d'installation

Playwright gagne avec une installation propre 13 fois plus rapide, prête à l'emploi.


ℹ️ Vous pouvez réduire le temps d'installation de Cypress dans CI si vous utilisez une image avec des dépendances préinstallées ou si vous les mettez en cache dans votre stockage CI .

Performances d'exécution

Playwright gagne car il ne nécessite pas de navigateur pour exécuter les tests API, il va donc droit au but.


ℹ️ Il n'y a aucun moyen de « ne pas exécuter » le navigateur dans les tests API, car cela fait partie de la logique du framework.

Syntaxe du test

Je ne peux pas choisir un gagnant ici, car il n'y a aucun avantage objectif ni pour Cypress ni pour Playwright .


Ils ont tous deux une syntaxe assez simple avec de légères différences. Je dirais que c'est la décision du testeur de choisir ce qu'il aime ici.

Dans l'ensemble

Je peux certainement dire qu'il est suffisamment sûr d'utiliser Playwright pour l'automatisation des tests API en raison de ses performances. Ce serait une solution équitable si vous avez déjà effectué des tests d'interface utilisateur avec ce framework.


Mon conseil pour ceux qui utilisent Cypress pour les tests d'interface utilisateur et souhaitent couvrir la couche API : mieux vaut utiliser autre chose ( Jest + Axios , vous pouvez voir un exemple ici ).