Stratégies de Test Temporal Python
Approches complètes de test pour les workflows Temporal avec pytest, ressources à divulgation progressive pour des scénarios de test spécifiques.
Quand Utiliser Cette Compétence
- Tests unitaires de workflows - Tests rapides avec time-skipping
- Tests d'intégration - Workflows avec activities mockées
- Tests de replay - Valider le déterminisme contre les historiques de production
- Développement local - Configurer le serveur Temporal et pytest
- Intégration CI/CD - Pipelines de test automatisés
- Stratégies de couverture - Atteindre ≥80% de couverture de test
Philosophie de Test
Approche Recommandée (Source : docs.temporal.io/develop/python/testing-suite) :
- Écrire la majorité en tant que tests d'intégration
- Utiliser pytest avec des fixtures async
- Time-skipping permet un retour rapide (workflows d'un mois → secondes)
- Mocker les activities pour isoler la logique du workflow
- Valider le déterminisme avec les tests de replay
Trois Types de Tests :
- Unitaires : Workflows avec time-skipping, activities avec ActivityEnvironment
- Intégration : Workers avec activities mockées
- Bout en bout : Serveur Temporal complet avec activities réelles (utiliser avec parcimonie)
Ressources Disponibles
Cette compétence fournit des conseils détaillés par divulgation progressive. Charger des ressources spécifiques selon vos besoins de test :
Ressources de Test Unitaire
Fichier : resources/unit-testing.md
Quand charger : Tester des workflows ou activities individuels en isolation
Contient :
- WorkflowEnvironment avec time-skipping
- ActivityEnvironment pour tester les activities
- Exécution rapide des workflows long-running
- Patterns d'avancement manuel du temps
- Fixtures et patterns pytest
Ressources de Test d'Intégration
Fichier : resources/integration-testing.md
Quand charger : Tester les workflows avec dépendances externes mockées
Contient :
- Stratégies de mock d'activities
- Patterns d'injection d'erreurs
- Tests de workflows multi-activity
- Tests de signal et de query
- Stratégies de couverture
Ressources de Test de Replay
Fichier : resources/replay-testing.md
Quand charger : Valider le déterminisme ou déployer des changements de workflow
Contient :
- Validation du déterminisme
- Replay d'historique de production
- Patterns d'intégration CI/CD
- Tests de compatibilité de version
Ressources de Développement Local
Fichier : resources/local-setup.md
Quand charger : Configurer l'environnement de développement
Contient :
- Configuration Docker Compose
- Configuration et setup de pytest
- Intégration d'outils de couverture
- Workflow de développement
Guide de Démarrage Rapide
Test de Workflow Basique
import pytest
from temporalio.testing import WorkflowEnvironment
from temporalio.worker import Worker
@pytest.fixture
async def workflow_env():
env = await WorkflowEnvironment.start_time_skipping()
yield env
await env.shutdown()
@pytest.mark.asyncio
async def test_workflow(workflow_env):
async with Worker(
workflow_env.client,
task_queue="test-queue",
workflows=[YourWorkflow],
activities=[your_activity],
):
result = await workflow_env.client.execute_workflow(
YourWorkflow.run,
args,
id="test-wf-id",
task_queue="test-queue",
)
assert result == expected
Test d'Activity Basique
from temporalio.testing import ActivityEnvironment
async def test_activity():
env = ActivityEnvironment()
result = await env.run(your_activity, "test-input")
assert result == expected_output
Cibles de Couverture
Couverture Recommandée (Source : bonnes pratiques docs.temporal.io) :
- Workflows : ≥80% de couverture logique
- Activities : ≥80% de couverture logique
- Intégration : Chemins critiques avec activities mockées
- Replay : Toutes les versions de workflow avant déploiement
Principes Clés de Test
- Time-Skipping - Les workflows d'un mois testent en secondes
- Mock Activities - Isoler la logique du workflow des dépendances externes
- Tests de Replay - Valider le déterminisme avant déploiement
- Couverture Élevée - Cible ≥80% pour les workflows en production
- Retour Rapide - Les tests unitaires s'exécutent en millisecondes
Comment Utiliser les Ressources
Charger une ressource spécifique selon le besoin :
- « Montre-moi les patterns de test unitaire » → Charger
resources/unit-testing.md - « Comment mocker les activities ? » → Charger
resources/integration-testing.md - « Configurer le serveur Temporal local » → Charger
resources/local-setup.md - « Valider le déterminisme » → Charger
resources/replay-testing.md
Références Additionnelles
- SDK Python Testing : docs.temporal.io/develop/python/testing-suite
- Testing Patterns : github.com/temporalio/temporal/blob/main/docs/development/testing.md
- Python Samples : github.com/temporalio/samples-python