Guide du développeur
Cette page est le point d'entrée pour un développeur qui découvre capTests et veut y brancher un projet. Elle synthétise l'organisation de la plate-forme et le flux de travail côté développement, et renvoie aux pages de détail pour chaque sujet.
Principe à garder en tête : capTests n'exécute pas les tests. Il centralise la liste des points à tester, ingère les résultats des tests automatiques (Playwright, PHPUnit) et des verdicts manuels, et calcule la couverture par version. Les tests, eux, tournent dans votre environnement / votre CI.
L'organisation en bref
| Notion | Ce que c'est | Page de détail |
|---|---|---|
| Projet | Un logiciel suivi. Porte un préfixe de référence (ex. SI). |
Administration |
| Cas (point de test) | Une chose à vérifier. Reçoit une référence stable (ex. SI-001) qui ne change jamais. |
Cas de test |
| Version | Une livraison (ex. 2.0.65.304). Ouvre une campagne où tous les points repassent "non testé". |
Couverture automatique |
| Plateforme | Cible d'un point : mobile / tablette / desktop. Permet de releaser appareil par appareil. | Cas de test |
| Badge de couverture | État d'un point pour une version : Couvert, Partiel, Régression, En attente CI, Ignoré, Non couvert, Manuel. | Couverture automatique |
La référence du cas est la clé de voûte : c'est elle qui relie un point à son test automatique. Tout le reste (intitulé, section, instructions) peut évoluer, la référence reste.
Comment y accéder
Trois portes d'entrée, selon l'usage :
- Console web (rôle Développeur) : créer et modifier les cas, créer les versions, relier les tests, lire la couverture. Voir Premiers pas et Rôles et permissions.
- API REST (
/api/v1) : pour l'outillage et les reporters CI. L'ingestion des runs se fait surPOST /api/v1/projects/{id}/runsavec un jeton de service portant l'habilitationci:ingest. - Serveur MCP (
POST /api/v1/mcp, JSON-RPC) : pour piloter la liste depuis un agent IA / l'IDE (créer des cas, relier des tests, remonter un run, créer/dater une version). Le guide dédié à l'agent décrit la connexion et chaque outil.
Le flux de travail type
flowchart LR
A["Ecrire / tenir<br/>les cas (refs)"] --> B["Relier les tests<br/>automatiques"]
B --> C["Lancer la CI<br/>(Playwright / PHPUnit)"]
C --> D["Remonter les resultats<br/>(un run par source)"]
D --> E["Couverture<br/>recalculee par version"]
E --> F["Si tout vert :<br/>dater la version"]
Relier un test à un cas : deux mécanismes
capTests sait rapprocher un résultat de test du bon cas de deux façons. Les deux aboutissent au même calcul de couverture ; elles diffèrent par l'endroit où vit le lien test -> cas.
Mécanisme A -- le repère dans le test (canonique)
Le lien est porté par le test lui-même, via un repère dérivé de la référence du cas. Non invasif : on ajoute un tag/groupe, rien d'autre.
- Playwright : tag
@TC-<ref>sur le test, reportercaptest-playwright-reporter(reporters/playwright/). - PHPUnit : attribut
#[Group('<ref>')], extensionCapTestExtension(reporters/phpunit/).
À la fin du run, le reporter collecte les tests repérés, en déduit le statut et
POSTe le tout sur /api/v1/projects/{id}/runs. Configuration par variables
d'environnement (CAPTEST_API_URL, CAPTEST_PROJECT, CAPTEST_VERSION,
CAPTEST_TOKEN, CAPTEST_CI_REF). Détails dans les README de reporters/ et
Automatisation.
À choisir quand on maîtrise les tests et qu'on accepte d'y poser un repère.
Mécanisme B -- la carte de couverture externe
Le lien vit dans un fichier à part, coverage-map.json, qui associe l'identité
d'un test (nom de base du spec Playwright, ou nom de classe PHPUnit) à une ou
plusieurs références de cas. Un reporter maison lit les fichiers de résultats
déjà produits (JSON Playwright, JUnit PHPUnit), traduit chaque test en référence
via la carte, puis appelle l'outil MCP report_run.
- Aucun tag dans les tests : utile quand on ne veut pas (ou ne peut pas) toucher les tests existants.
- Le mapping est centralisé et relisable d'un coup d'oeil.
- Exemple de référence complet et réutilisable : le module smartInterventions
(
test/captests/coverage-map.json+report-to-captests.mjs).
À choisir quand on préfère un lien externe non invasif, ou pour brancher une suite de tests existante sans la modifier.
Quel que soit le mécanisme, le repère envoyé doit être la référence du cas (
SI-001), jamais le nom du test. Un nom de test non résolu ressort enorphan_refscôté serveur et ne met rien à jour.
Remonter les résultats
- Un run par source : chaque remontée est rattachée à une source (
playwrightouphpunit) et à une version. - Règle à connaître : une remontée REMPLACE les résultats de la paire (version, source) -- elle n'accumule pas. Il faut donc envoyer tout le résultat d'une source en un seul appel. Concrètement, si plusieurs suites PHPUnit tournent (intégration + unit + http), il faut fusionner les JUnit en un seul fichier avant de reporter, sinon seule la dernière suite survit.
- La couverture est recalculée à l'ingestion. Le badge dépend du résultat le plus récent sur la version : un test qui passe -> Couvert, qui échoue -> Régression.
Versions et date de sortie
create_versionest create-only : sur une version existante, elle la renvoie inchangée (elle ne met pas à jourreleased_at).update_versionfait la mise à jour partielle (seuls les champs fournis changent), typiquement pour poserreleased_aten fin de campagne.- Flux de release recommandé : lancer toutes les suites -> remonter chaque source
(en un appel) -> si et seulement si tout est vert, poser
released_at = aujourd'huiviaupdate_version. smartInterventions automatise ce flux (test/captests/release.sh, ciblemake captests-release).
Vidéos de référence et d'échec
Un reporter peut publier une vidéo de référence (comportement attendu, envoyée une seule fois par cas et par plateforme) et une vidéo d'échec (rattachée à la version). Elles se retrouvent côte à côte sur la fiche du cas. Détail et geste type : Automatisation.
Pièges courants
- "En attente CI" : le cas a un test lié mais aucun run n'a encore remonté son résultat pour la version affichée. Un report le fait basculer en Couvert ou Régression. Vérifiez surtout que vous regardez la bonne version.
- Double remontée d'une même source : elle écrase la précédente (voir plus haut). Toujours un seul appel par source.
coverage_leveldes liens "collant" : le niveau affiché dans les "Tests automatiques liés" d'un cas ne reflète pas forcément la dernière version. Pour l'état réel d'une version, fiez-vous à la synthèse de couverture.orphan_refs: une remontée dont le repère ne correspond à aucun cas. Signe d'un repère erroné (nom de test au lieu de la référence, ou référence inexistante sur le projet).
Pour aller plus loin
- Cas de test -- créer et organiser les points.
- Couverture automatique -- les badges et la synthèse par version.
- Automatisation -- le branchement CI / agent IA au niveau fonctionnel.
- Todolist et verdicts -- le quotidien des testeurs, utile à connaître côté dev.
- Spécification technique complète :
docs/project.mddu dépôt capTests. - Reporters de référence :
reporters/playwright/etreporters/phpunit/.