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.
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…
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.
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).
Ça n'a pas l'air bien, hein ? ☝️
De plus, lorsque vous exécutez des tests API , il lance quand même un navigateur.
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
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.).
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).
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.
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
☝️
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…
✅ 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 .
✅ 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.
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.
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 ).