CI avec GitHub Actions : exécuter UI + API à chaque push
Un framework que personne n'exécute est du code mort. La CI corrige ça — elle exécute vos tests automatiquement à chaque push, pour que les problèmes apparaissent en minutes au lieu de sprints.
L'idée, en une ligne
La CI est un robot qui exécute vos suites de tests pour vous à chaque changement de code. Avec GitHub Actions vous décrivez ce robot dans un fichier YAML sous .github/workflows/.
Les mots à connaître
- on — le déclencheur. Quand ceci devrait-il s'exécuter ?
push,pull_request. - jobs — unités de travail. Ils s'exécutent en parallèle par défaut ; chacun choisit une machine avec runs-on.
- steps — s'exécutent dans l'ordre à l'intérieur d'un job. uses tire une action préconstruite (comme checkout) ; run exécute une commande shell.
- with — passe des entrées à une action.
- needs — fait attendre un job après un autre. Utilisez-le seulement quand il y a une vraie dépendance.
▸ try it
name: tests
on:
push:
pull_request:
jobs:
api:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install -r requirements.txt
- run: pytest tests/api --alluredir=allure-results
- uses: actions/upload-artifact@v4
if: always() # upload even when tests fail
with:
name: allure-api
path: allure-results
ui:
runs-on: ubuntu-latest
strategy:
matrix:
browser: [chromium, firefox] # fan out across browsers
steps:
- uses: actions/checkout@v4
- run: pytest tests/ui --browser=${{ matrix.browser }}Lisez-le de haut en bas : deux jobs, api et ui, s'exécutent côte à côte. Le job api installe Python, lance les tests d'API, et sauvegarde le rapport. Le job ui lance ses tests une fois par navigateur.
Avancé — deux touches qui marquent un senior
- Séparez UI et API en jobs distincts pour qu'ils s'exécutent en même temps, et qu'un échec UI ne cache pas un échec API.
- Publiez toujours les résultats comme artefacts avec
actions/upload-artifact, et mettezif: always()pour que les rapports s'uploadent même quand les tests échouent. Une exécution échouée sans logs ne vous dit rien. - Utilisez une matrice pour éclater un job à travers des versions ou des navigateurs — un fichier devient une grille cross-environnement complète.
Basé sur la doc officielle de la syntaxe des workflows GitHub Actions et le README d'actions/upload-artifact
Toutes les leçons de Architecture de framework & CI/CD
- Concevoir un framework de zéro : les couches
- Les quatre patterns que les SDET utilisent vraiment
- Données de test : fixtures vs factories vs ensemencement
- CI avec GitHub Actions : exécuter UI + API à chaque push
- Docker & Selenium Grid : des environnements de test reproductibles
- Parallèle, réessais & quarantaine des tests instables