temporal-python-testing

Par wshobson · agents

Testez les workflows Temporal avec pytest, le time-skipping et des stratégies de mocking. Couvre les tests unitaires, les tests d'intégration, les tests de replay et la configuration de l'environnement de développement local. À utiliser lors de l'implémentation de tests de workflows Temporal ou du débogage d'échecs de tests.

npx skills add https://github.com/wshobson/agents --skill temporal-python-testing

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 :

  1. Unitaires : Workflows avec time-skipping, activities avec ActivityEnvironment
  2. Intégration : Workers avec activities mockées
  3. 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

  1. Time-Skipping - Les workflows d'un mois testent en secondes
  2. Mock Activities - Isoler la logique du workflow des dépendances externes
  3. Tests de Replay - Valider le déterminisme avant déploiement
  4. Couverture Élevée - Cible ≥80% pour les workflows en production
  5. 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

Skills similaires