wshobson/temporal-python-testing

Prueba flujos de trabajo de Temporal con pytest, salto temporal y estrategias de simulación. Cubre pruebas unitarias, de integración, de reproducción y configuración de desarrollo local. Útil al implementar pruebas de flujos de trabajo de Temporal o depurar fallos en pruebas.

¿Qué es temporal-python-testing?

Esta habilidad está diseñada para desarrolladores que trabajan con la plataforma Temporal en Python, proporcionando un conjunto completo de herramientas y guías para probar flujos de trabajo (workflows). Incluye estrategias para pruebas unitarias con pytest, pruebas de integración que verifican la interacción con servicios externos, y pruebas de reproducción (replay) para asegurar la compatibilidad con versiones anteriores de las definiciones de flujo de trabajo. También cubre la configuración de un entorno de desarrollo local con el servidor de desarrollo de Temporal. La habilidad explica cómo usar el decorador `@workflow_test` y el cliente de prueba para saltar el tiempo (time-skipping), lo que permite probar temporizadores y actividades largas sin tener que esperar en tiempo real. Además, detalla estrategias de simulación (mocking) para aislar las pruebas de actividades y otros servicios. Es útil tanto para implementar nuevas pruebas como para depurar fallos existentes en pruebas de flujos de trabajo de Temporal. La habilidad se basa en la documentación oficial de Temporal y las mejores prácticas de la comunidad.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/wshobson/agents/tree/main/skills/temporal-python-testing

Installed? Explore more Productividad y colaboración skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace temporal-python-testing?

Prueba flujos de trabajo de Temporal con pytest, salto temporal y estrategias de simulación. Cubre pruebas unitarias, de integración, de reproducción y configuración de desarrollo local. Útil al implementar pruebas de flujos de trabajo de Temporal o depurar fallos en pruebas.

Visión General

Esta habilidad proporciona guías y ejemplos para probar flujos de trabajo de Temporal en Python de manera efectiva. Incluye:

  • Pruebas unitarias: Prueba la lógica del flujo de trabajo de forma aislada.
  • Pruebas de integración: Verifica la interacción con actividades reales o simuladas.
  • Pruebas de reproducción (replay): Asegura la compatibilidad con versiones anteriores del flujo de trabajo.
  • Configuración de desarrollo local: Usa el servidor de desarrollo de Temporal para pruebas locales.

Requisitos Previos

  • Python 3.10+
  • temporalio paquete instalado (pip install temporalio)
  • pytest instalado (pip install pytest)
  • Acceso a un servidor de Temporal (opcional para pruebas locales)

Instalación

Instala las dependencias necesarias:

pip install temporalio pytest

Estructura del Proyecto

project/
├── workflows/
│   └── my_workflow.py
├── activities/
│   └── my_activity.py
└── tests/
    └── test_my_workflow.py

Pruebas Unitarias con Time-Skipping

Usa el decorador @workflow_test y WorkflowEnvironment para saltar el tiempo:

import pytest
from temporalio.testing import WorkflowEnvironment
from temporalio.worker import Worker
from workflows.my_workflow import MyWorkflow

@pytest.mark.asyncio
async def test_my_workflow_with_time_skip():
    async with await WorkflowEnvironment.start_time_skipping() as env:
        async with Worker(
            env.client,
            task_queue="my-task-queue",
            workflows=[MyWorkflow],
        ):
            result = await env.client.execute_workflow(
                MyWorkflow.run,
                arg="test",
                id="my-workflow-id",
                task_queue="my-task-queue",
            )
            assert result == "expected_output"

Pruebas de Integración

Para probar con actividades reales:

from activities.my_activity import my_activity

# En la prueba, registrar la actividad en el Worker
async with Worker(
    env.client,
    task_queue="my-task-queue",
    workflows=[MyWorkflow],
    activities=[my_activity],
):
    # ... ejecutar workflow

Estrategias de Simulación (Mocking)

Simula actividades usando unittest.mock:

from unittest.mock import AsyncMock, patch

@patch("activities.my_activity.my_activity", new_callable=AsyncMock)
async def test_with_mocked_activity(mock_activity):
    mock_activity.return_value = "mocked_result"
    async with await WorkflowEnvironment.start_time_skipping() as env:
        async with Worker(...):
            result = await env.client.execute_workflow(...)
            assert result == "expected_with_mocked_result"

Pruebas de Reproducción (Replay)

Usa Replayer para verificar que un flujo de trabajo se reproduce correctamente:

from temporalio.worker import Replayer

async def test_replay():
    replayer = Replayer(workflows=[MyWorkflow])
    # Cargar historial de eventos desde un archivo
    with open("history.json", "r") as f:
        history = json.load(f)
    await replayer.replay_workflow(history)

Configuración de Desarrollo Local

Inicia el servidor de desarrollo de Temporal:

temporal server start-dev

Luego, en las pruebas, usa WorkflowEnvironment.start_local():

async with await WorkflowEnvironment.start_local() as env:
    # ... pruebas con servidor local

Buenas Prácticas

  • Usa time-skipping para pruebas rápidas y deterministas.
  • Simula actividades externas para evitar dependencias de red.
  • Escribe pruebas de reproducción después de cambios en el flujo de trabajo.
  • Mantén las pruebas en archivos separados por flujo de trabajo.
  • Ejecuta pruebas con pytest -v para obtener salida detallada.

Solución de Problemas

  • Error de conexión: Asegúrate de que el servidor de Temporal esté en ejecución.
  • Timeouts: Verifica la configuración de timeouts del flujo de trabajo.
  • Fallos en reproducción: Compara el historial con la definición actual del flujo de trabajo.

Referencias

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

wshobson/accessibility-compliance

Implement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.

wshobson/airflow-dag-patterns

Build production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs.

wshobson/angular-migration

Migrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applications, planning framework migrations, or modernizing legacy Angular code.

wshobson/anti-reversing-techniques

Understand anti-reversing, obfuscation, and protection techniques encountered during software analysis. Use this skill when analyzing malware evasion techniques, when implementing anti-debugging protections for CTF challenges, when reverse engineering packed binaries, or when building security research tools that need to detect virtualized environments.

wshobson/api-design-principles

Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.

wshobson/architecture-decision-records

Write and maintain Architecture Decision Records (ADRs) following best practices for technical decision documentation. Use when documenting significant technical decisions, reviewing past architectural choices, or establishing decision processes.

wshobson/architecture-patterns

Implement proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design. Use this skill when designing clean architecture for a new microservice, when refactoring a monolith to use bounded contexts, when implementing hexagonal or onion architecture patterns, or when debugging dependency cycles between application layers.

wshobson/async-python-patterns

Master Python asyncio, concurrent programming, and async/await patterns for high-performance applications. Use when building async APIs, concurrent systems, or I/O-bound applications requiring non-blocking operations.

wshobson/attack-tree-construction

Build comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders.

wshobson/auth-implementation-patterns

Master authentication and authorization patterns including JWT, OAuth2, session management, and RBAC to build secure, scalable access control systems. Use when implementing auth systems, securing APIs, or debugging security issues.

wshobson/avoid-ai-writing

Audit and rewrite prose so it stops reading as machine-generated. Use this skill when asked to remove AI-isms, clean up AI writing, edit a draft for AI tells, audit a README, changelog, release note, PR description, or blog post for machine-sounding prose, or make text sound less like AI. Supports a detect-only mode, a rewrite mode, and an edit-in-place mode, with optional voice and context profiles.

wshobson/backtesting-frameworks

Build robust backtesting systems for trading strategies with proper handling of look-ahead bias, survivorship bias, and transaction costs. Use when developing trading algorithms, validating strategies, or building backtesting infrastructure.

wshobson/bash-defensive-patterns

Master defensive Bash programming techniques for production-grade scripts. Use when writing robust shell scripts, CI/CD pipelines, or system utilities requiring fault tolerance and safety.

wshobson/bats-testing-patterns

Master Bash Automated Testing System (Bats) for comprehensive shell script testing. Use when writing tests for shell scripts, CI/CD pipelines, or requiring test-driven development of shell utilities.

wshobson/bazel-build-optimization

Optimize Bazel builds for large-scale monorepos. Use when configuring Bazel, implementing remote execution, or optimizing build performance for enterprise codebases.

wshobson/before-you-build

Pre-build product and feature risk review for founders, product managers, and AI-assisted builders. Use this skill when the user is about to build a landing page, MVP, SaaS product, internal tool, agent workflow, or major feature and needs to check demand, positioning, monetization, retention, trust, distribution, and adoption risk before implementation starts.

wshobson/billing-automation

Build automated billing systems for recurring payments, invoicing, subscription lifecycle, and dunning management. Use when implementing subscription billing, automating invoicing, or managing recurring payment systems.

wshobson/binary-analysis-patterns

Master binary analysis patterns including disassembly, decompilation, control flow analysis, and code pattern recognition. Use when analyzing executables, understanding compiled code, or performing static analysis on binaries.

wshobson/block-no-verify-hook

Configure a PreToolUse hook to prevent AI agents from skipping git pre-commit hooks with --no-verify and other bypass flags. Use when setting up Claude Code projects that enforce commit quality gates.

wshobson/brand-landingpage

Brand-first landing page designer — runs a brand-identity interview (colors, typography, shape language), then generates and iterates on a polished landing page via Stitch with deployment-ready HTML. Use when the user asks to create, design, or build a landing page, homepage, or marketing page and has no established visual direction. Skip when they have a design mockup, need a dashboard or app UI, are working at component level, building a multi-page app, or restyling with known design tokens — use frontend-design instead.

Skills relacionados