Avancé

Automatiser vos tests API avec Playwright

Automatisez vos tests API avec Playwright, sans outil supplémentaire. Requêtes GET et POST, authentification et fixtures, avec des exemples en TypeScript.

Introduction

Beaucoup de développeurs et QA ne savent pas que Playwright intègre un client HTTP puissant pour tester les APIs. Découvrons comment l'utiliser efficacement.

Pourquoi tester les APIs avec Playwright ?

  1. Un seul outil : Pas besoin de maintenir Postman + Playwright
  2. Partage du contexte : Réutilisez l'authentification entre tests E2E et API
  3. Assertions puissantes : Les mêmes matchers pour tout

Configuration

Playwright fournit request dans les fixtures de test :

typescript
import { test, expect } from '@playwright/test';

test('GET users returns 200', async ({ request }) => {
  const response = await request.get('/api/users');
  expect(response.ok()).toBeTruthy();
});

Exemples pratiques

Test GET avec validation du body

typescript
test('GET user by ID', async ({ request }) => {
  const response = await request.get('/api/users/1');
  
  expect(response.status()).toBe(200);
  
  const user = await response.json();
  expect(user).toHaveProperty('id', 1);
  expect(user).toHaveProperty('email');
});

Test POST avec body JSON

typescript
test('POST create user', async ({ request }) => {
  const response = await request.post('/api/users', {
    data: {
      name: 'John Doe',
      email: 'john@example.com'
    }
  });
  
  expect(response.status()).toBe(201);
  
  const user = await response.json();
  expect(user.name).toBe('John Doe');
});

Test avec authentification

typescript
test('protected endpoint requires auth', async ({ request }) => {
  // Sans auth
  const unauthorized = await request.get('/api/admin');
  expect(unauthorized.status()).toBe(401);
  
  // Avec auth
  const authorized = await request.get('/api/admin', {
    headers: {
      'Authorization': 'Bearer valid-token'
    }
  });
  expect(authorized.status()).toBe(200);
});

Fixtures personnalisées

Créez une fixture pour un client API authentifié :

typescript
// fixtures.ts
import { test as base } from '@playwright/test';

export const test = base.extend({
  authenticatedRequest: async ({ request }, use) => {
    // Login et récupération du token
    const loginResponse = await request.post('/api/login', {
      data: { email: 'test@test.com', password: 'password' }
    });
    const { token } = await loginResponse.json();
    
    // Créer un nouveau contexte avec le token
    const authRequest = await request.newContext({
      extraHTTPHeaders: {
        'Authorization': `Bearer ${token}`
      }
    });
    
    await use(authRequest);
  }
});

Conclusion

Les tests API avec Playwright sont simples, puissants et s'intègrent parfaitement avec vos tests E2E. C'est une compétence essentielle pour tout QA automaticien.