Test de Régression Cherry
Exécute des tests E2E Playwright déterministes contre un processus Cherry Studio par plateforme, contrôlé par le driver. Le produit testé inclut Chat, Agents, MCP, Skills, les bases de connaissances, la traduction, la génération d'images et les outils de code ; un agent de test LLM ne contrôle pas l'exécution du test.
Contrat CI
Utilisez .github/workflows/cherry-regression-test.yml comme point d'entrée. Il :
- Résout une branche de confiance ou une étiquette de version.
- Initialise un répertoire isolé dans le dossier temporaire du runner GitHub.
- Installe l'application et les outils de code en test.
- Lance un processus Electron contrôlé avec CDP activé.
- Exécute les dix fichiers de
tests/e2e/cherry-regression/du simple au complexe. - Continue après une phase échouée pour que les résultats ultérieurs soient toujours collectés.
- Produit des rapports en anglais par plateforme et agrégés, puis applique le verdict.
- Arrête uniquement le processus Electron enregistré dans le répertoire d'exécution isolé.
N'ajoutez pas une boucle d'outil LLM, un serveur de contrôle MCP, une limite de tours ou un second lancement Electron pour chaque test. Un redémarrage est autorisé uniquement lorsque le contrat du cas vérifie explicitement la persistance ou bascule du profil de démarrage propre au profil partagé authentifié.
Configuration
Le workflow lit ces variables et secrets de repository :
CHERRY_TEST_CUSTOM_PROVIDER_BASE_URLCHERRY_TEST_CUSTOM_PROVIDER_ANTHROPIC_BASE_URLCHERRY_TEST_CUSTOM_PROVIDER_API_KEYCHERRY_TEST_CUSTOM_PROVIDER_CHAT_MODELCHERRY_TEST_CUSTOM_PROVIDER_EMBEDDING_BASE_URLCHERRY_TEST_CUSTOM_PROVIDER_EMBEDDING_API_KEYCHERRY_TEST_CUSTOM_PROVIDER_EMBEDDING_MODELCHERRY_TEST_CHERRYIN_CHAT_MODELCHERRY_TEST_CHERRYIN_IMAGE_MODELCHERRY_TEST_CHERRYIN_ACCOUNTCHERRY_TEST_CHERRYIN_PASSWORD
Le fournisseur de chat personnalisé nécessite les deux URLs : CHERRY_TEST_CUSTOM_PROVIDER_BASE_URL remplit OpenAI, et CHERRY_TEST_CUSTOM_PROVIDER_ANTHROPIC_BASE_URL remplit Anthropic. Les deux endpoints partagent CHERRY_TEST_CUSTOM_PROVIDER_API_KEY.
Les fournisseurs de chat et embedding sont indépendants. N'imprimez jamais les credentials littéraux, ne les écrivez pas dans les fixtures, ne les joignez pas aux artefacts Playwright et ne les transmettez pas à une action non liée.
Organisation des tests
Lisez l'organisation des scénarios et le contrat du contrôleur avant d'apporter des modifications.
Enregistrez chaque cas depuis le manifest :
test(...caseDefinition('S-01'), async ({ mainWindow }) => {
// Assert the user-visible outcome.
})
cases.ts possède les IDs des cas, les titres, les étiquettes de tâche, les phases et les exigences de capacité. Le workflow accepte un ID de tâche et délègue la sélection au contrôleur. Préférez les rôles accessibles, les libellés, les placeholders, les IDs de test et le texte visible. Les dialogues natifs et les interactions entre applications doivent utiliser les helpers du repository dans systemAutomation.ts.
Enregistrez les assertions dans Playwright, pas en prose. Le rapporteur personnalisé écrit le statut du cas et de la phase dans run.json et alimente les rapports Markdown/JUnit en anglais. La fixture sauvegarde les captures d'écran des défaillances. Les erreurs d'exécution et les phases interrompues bloquent un verdict positif. N'activez pas Playwright Trace pour les tests porteurs de credentials car les paramètres d'action peuvent exposer des secrets. Un résultat positif ne dépend pas du jugement d'un modèle.
Exécution ciblée
Avec un répertoire d'exécution initialisé et son processus Electron contrôlé en cours d'exécution :
pnpm exec tsx scripts/cherry-regression-test/cli.ts run-phase \
--run-dir /absolute/run-directory --phase 02-basic-features
La tâche sélectionnée lors de l'initialisation de l'exécution détermine les cas exécutés. Pour une exécution réservée aux Notes, initialisez avec --task notes. L'énumération est en lecture seule : définissez CHERRY_TEST_RUN_DIR sur un chemin absolu, mais aucun répertoire d'exécution initialisé ou processus Electron en cours d'exécution n'est requis car --list n'exécute pas les fixtures.
CHERRY_TEST_RUN_DIR=/tmp/cherry-regression-list pnpm test:e2e:regression --list
N'appelez pas la commande de nettoyage de régression pour une instance Electron détenue par cherry-electron-dev ; le nettoyage n'est que pour un enregistrement d'app créé par ce driver.
Vérification lors de la modification du framework
Exécutez la suite de scripts ciblée et énumérez les cas Playwright :
pnpm exec vitest run --project scripts scripts/cherry-regression-test
CHERRY_TEST_RUN_DIR=/tmp/cherry-regression-list \
pnpm test:e2e:regression --list
pnpm typecheck:e2e
pnpm test:lint
N'utilisez pas pnpm test ou pnpm build:check pour ce changement de workflow ciblé.