[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XD3F4F2PWKNG10WJNW4TAF":3,"skill-same:01M6XD3F4F2PWKNG10WJNW4TAF":90},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":13,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6XD3F4F2PWKNG10WJNW4TAF","temporal-python-testing",null,"Test Temporal workflows with pytest, time-skipping, and mocking strategies. Covers unit testing, integration testing, replay testing, and local development setup. Use when implementing Temporal workflow tests or debugging test failures.","Waaaalnut\u002Fskillsbench","Waaaalnut","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F103995656?v=4","01M6XCS9K1V51EY3JMB7DGMX24","01M6XCS9Q4WPW88W62C55G1H44",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"python","testing","python testing","temporal","temporal python testing","when","implementing","local development","mocking","unit","integration testing","tests","local","time","replay","use","development","debugging","workflows","workflow","2026-11-10 10:12:30",false,"---\nname: temporal-python-testing\ndescription: Test Temporal workflows with pytest, time-skipping, and mocking strategies. Covers unit testing, integration testing, replay testing, and local development setup. Use when implementing Temporal workflow tests or debugging test failures.\n---\n\n# Temporal Python Testing Strategies\n\nComprehensive testing approaches for Temporal workflows using pytest, progressive disclosure resources for specific testing scenarios.\n\n## When to Use This Skill\n\n- **Unit testing workflows** - Fast tests with time-skipping\n- **Integration testing** - Workflows with mocked activities\n- **Replay testing** - Validate determinism against production histories\n- **Local development** - Set up Temporal server and pytest\n- **CI\u002FCD integration** - Automated testing pipelines\n- **Coverage strategies** - Achieve ≥80% test coverage\n\n## Testing Philosophy\n\n**Recommended Approach** (Source: docs.temporal.io\u002Fdevelop\u002Fpython\u002Ftesting-suite):\n- Write majority as integration tests\n- Use pytest with async fixtures\n- Time-skipping enables fast feedback (month-long workflows → seconds)\n- Mock activities to isolate workflow logic\n- Validate determinism with replay testing\n\n**Three Test Types**:\n1. **Unit**: Workflows with time-skipping, activities with ActivityEnvironment\n2. **Integration**: Workers with mocked activities\n3. **End-to-end**: Full Temporal server with real activities (use sparingly)\n\n## Available Resources\n\nThis skill provides detailed guidance through progressive disclosure. Load specific resources based on your testing needs:\n\n### Unit Testing Resources\n**File**: `resources\u002Funit-testing.md`\n**When to load**: Testing individual workflows or activities in isolation\n**Contains**:\n- WorkflowEnvironment with time-skipping\n- ActivityEnvironment for activity testing\n- Fast execution of long-running workflows\n- Manual time advancement patterns\n- pytest fixtures and patterns\n\n### Integration Testing Resources\n**File**: `resources\u002Fintegration-testing.md`\n**When to load**: Testing workflows with mocked external dependencies\n**Contains**:\n- Activity mocking strategies\n- Error injection patterns\n- Multi-activity workflow testing\n- Signal and query testing\n- Coverage strategies\n\n### Replay Testing Resources\n**File**: `resources\u002Freplay-testing.md`\n**When to load**: Validating determinism or deploying workflow changes\n**Contains**:\n- Determinism validation\n- Production history replay\n- CI\u002FCD integration patterns\n- Version compatibility testing\n\n### Local Development Resources\n**File**: `resources\u002Flocal-setup.md`\n**When to load**: Setting up development environment\n**Contains**:\n- Docker Compose configuration\n- pytest setup and configuration\n- Coverage tool integration\n- Development workflow\n\n## Quick Start Guide\n\n### Basic Workflow Test\n\n```python\nimport pytest\nfrom temporalio.testing import WorkflowEnvironment\nfrom temporalio.worker import Worker\n\n@pytest.fixture\nasync def workflow_env():\n    env = await WorkflowEnvironment.start_time_skipping()\n    yield env\n    await env.shutdown()\n\n@pytest.mark.asyncio\nasync def test_workflow(workflow_env):\n    async with Worker(\n        workflow_env.client,\n        task_queue=\"test-queue\",\n        workflows=[YourWorkflow],\n        activities=[your_activity],\n    ):\n        result = await workflow_env.client.execute_workflow(\n            YourWorkflow.run,\n            args,\n            id=\"test-wf-id\",\n            task_queue=\"test-queue\",\n        )\n        assert result == expected\n```\n\n### Basic Activity Test\n\n```python\nfrom temporalio.testing import ActivityEnvironment\n\nasync def test_activity():\n    env = ActivityEnvironment()\n    result = await env.run(your_activity, \"test-input\")\n    assert result == expected_output\n```\n\n## Coverage Targets\n\n**Recommended Coverage** (Source: docs.temporal.io best practices):\n- **Workflows**: ≥80% logic coverage\n- **Activities**: ≥80% logic coverage\n- **Integration**: Critical paths with mocked activities\n- **Replay**: All workflow versions before deployment\n\n## Key Testing Principles\n\n1. **Time-Skipping** - Month-long workflows test in seconds\n2. **Mock Activities** - Isolate workflow logic from external dependencies\n3. **Replay Testing** - Validate determinism before deployment\n4. **High Coverage** - ≥80% target for production workflows\n5. **Fast Feedback** - Unit tests run in milliseconds\n\n## How to Use Resources\n\n**Load specific resource when needed**:\n- \"Show me unit testing patterns\" → Load `resources\u002Funit-testing.md`\n- \"How do I mock activities?\" → Load `resources\u002Fintegration-testing.md`\n- \"Setup local Temporal server\" → Load `resources\u002Flocal-setup.md`\n- \"Validate determinism\" → Load `resources\u002Freplay-testing.md`\n\n## Additional References\n\n- Python SDK Testing: docs.temporal.io\u002Fdevelop\u002Fpython\u002Ftesting-suite\n- Testing Patterns: github.com\u002Ftemporalio\u002Ftemporal\u002Fblob\u002Fmain\u002Fdocs\u002Fdevelopment\u002Ftesting.md\n- Python Samples: github.com\u002Ftemporalio\u002Fsamples-python\n","# Temporal Python Testing Strategies\n\nComprehensive testing approaches for Temporal workflows using pytest, progressive disclosure resources for specific testing scenarios.\n\n## When to Use This Skill\n\n- **Unit testing workflows** - Fast tests with time-skipping\n- **Integration testing** - Workflows with mocked activities\n- **Replay testing** - Validate determinism against production histories\n- **Local development** - Set up Temporal server and pytest\n- **CI\u002FCD integration** - Automated testing pipelines\n- **Coverage strategies** - Achieve ≥80% test coverage\n\n## Testing Philosophy\n\n**Recommended Approach** (Source: docs.temporal.io\u002Fdevelop\u002Fpython\u002Ftesting-suite):\n- Write majority as integration tests\n- Use pytest with async fixtures\n- Time-skipping enables fast feedback (month-long workflows → seconds)\n- Mock activities to isolate workflow logic\n- Validate determinism with replay testing\n\n**Three Test Types**:\n1. **Unit**: Workflows with time-skipping, activities with ActivityEnvironment\n2. **Integration**: Workers with mocked activities\n3. **End-to-end**: Full Temporal server with real activities (use sparingly)\n\n## Available Resources\n\nThis skill provides detailed guidance through progressive disclosure. Load specific resources based on your testing needs:\n\n### Unit Testing Resources\n**File**: `resources\u002Funit-testing.md`\n**When to load**: Testing individual workflows or activities in isolation\n**Contains**:\n- WorkflowEnvironment with time-skipping\n- ActivityEnvironment for activity testing\n- Fast execution of long-running workflows\n- Manual time advancement patterns\n- pytest fixtures and patterns\n\n### Integration Testing Resources\n**File**: `resources\u002Fintegration-testing.md`\n**When to load**: Testing workflows with mocked external dependencies\n**Contains**:\n- Activity mocking strategies\n- Error injection patterns\n- Multi-activity workflow testing\n- Signal and query testing\n- Coverage strategies\n\n### Replay Testing Resources\n**File**: `resources\u002Freplay-testing.md`\n**When to load**: Validating determinism or deploying workflow changes\n**Contains**:\n- Determinism validation\n- Production history replay\n- CI\u002FCD integration patterns\n- Version compatibility testing\n\n### Local Development Resources\n**File**: `resources\u002Flocal-setup.md`\n**When to load**: Setting up development environment\n**Contains**:\n- Docker Compose configuration\n- pytest setup and configuration\n- Coverage tool integration\n- Development workflow\n\n## Quick Start Guide\n\n### Basic Workflow Test\n\n```python\nimport pytest\nfrom temporalio.testing import WorkflowEnvironment\nfrom temporalio.worker import Worker\n\n@pytest.fixture\nasync def workflow_env():\n    env = await WorkflowEnvironment.start_time_skipping()\n    yield env\n    await env.shutdown()\n\n@pytest.mark.asyncio\nasync def test_workflow(workflow_env):\n    async with Worker(\n        workflow_env.client,\n        task_queue=\"test-queue\",\n        workflows=[YourWorkflow],\n        activities=[your_activity],\n    ):\n        result = await workflow_env.client.execute_workflow(\n            YourWorkflow.run,\n            args,\n            id=\"test-wf-id\",\n            task_queue=\"test-queue\",\n        )\n        assert result == expected\n```\n\n### Basic Activity Test\n\n```python\nfrom temporalio.testing import ActivityEnvironment\n\nasync def test_activity():\n    env = ActivityEnvironment()\n    result = await env.run(your_activity, \"test-input\")\n    assert result == expected_output\n```\n\n## Coverage Targets\n\n**Recommended Coverage** (Source: docs.temporal.io best practices):\n- **Workflows**: ≥80% logic coverage\n- **Activities**: ≥80% logic coverage\n- **Integration**: Critical paths with mocked activities\n- **Replay**: All workflow versions before deployment\n\n## Key Testing Principles\n\n1. **Time-Skipping** - Month-long workflows test in seconds\n2. **Mock Activities** - Isolate workflow logic from external dependencies\n3. **Replay Testing** - Validate determinism before deployment\n4. **High Coverage** - ≥80% target for production workflows\n5. **Fast Feedback** - Unit tests run in milliseconds\n\n## How to Use Resources\n\n**Load specific resource when needed**:\n- \"Show me unit testing patterns\" → Load `resources\u002Funit-testing.md`\n- \"How do I mock activities?\" → Load `resources\u002Fintegration-testing.md`\n- \"Setup local Temporal server\" → Load `resources\u002Flocal-setup.md`\n- \"Validate determinism\" → Load `resources\u002Freplay-testing.md`\n\n## Additional References\n\n- Python SDK Testing: docs.temporal.io\u002Fdevelop\u002Fpython\u002Ftesting-suite\n- Testing Patterns: github.com\u002Ftemporalio\u002Ftemporal\u002Fblob\u002Fmain\u002Fdocs\u002Fdevelopment\u002Ftesting.md\n- Python Samples: github.com\u002Ftemporalio\u002Fsamples-python\n",{"name":5,"description":7},"main","7eeb258ada72b7f58119b0e7a2c00ea89d9beedd","tasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench","https:\u002F\u002Fgithub.com\u002FWaaaalnut","student of Zhejiang University","2026-04-21 23:16:23",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add Waaaalnut\u002Fskillsbench --skill temporal-python-testing",{"tool":64,"command":65},"bunx","bunx skills add Waaaalnut\u002Fskillsbench --skill temporal-python-testing",{"tool":67,"command":68},"pnpm","pnpm dlx skills add Waaaalnut\u002Fskillsbench --skill temporal-python-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing\u002FSKILL.md",true,[72,78,82,86],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"resources\u002Fintegration-testing.md","REFERENCE","参考文档",12988,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing\u002Fresources\u002Fintegration-testing.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"resources\u002Flocal-setup.md",12066,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing\u002Fresources\u002Flocal-setup.md",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"resources\u002Freplay-testing.md",12374,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing\u002Fresources\u002Freplay-testing.md",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"resources\u002Funit-testing.md",8702,"https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks-no-skills\u002Ffix-build-agentops\u002Fenvironment\u002Fskills\u002Ftemporal-python-testing\u002Fresources\u002Funit-testing.md",[91,105,120,144,165,184],{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":101,"publishedAt":46},"01M6XEWMJ6VY3ZC53MPDCPG3GH","data-reconciliation","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fxlsx-recover-data\u002Fenvironment\u002Fskills\u002Fdata-reconciliation\u002FSKILL.md",[96],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[102,103,104],"data reconciliation","reconciliation","data",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":46},"01M6XEW8MNPMF1KRXV6ATGFRQF","speech-to-text","Transcribe video to timestamped text using Whisper tiny model (pre-installed).","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-tutorial-indexer\u002Fenvironment\u002Fskills\u002Fspeech-to-text\u002FSKILL.md",[],[112,113,114,115,116,117,118,119],"speech","text","speech to text","transcribe video","whisper","model","Video","transcribe",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":129,"publishedAt":46},"01M6XEW3FQZP0T1RKQQJFXVY9T","video-processor","Process videos by removing segments and concatenating remaining parts. Use when you need to remove detected pauses\u002Fopenings from videos, create highlight reels, or batch process segment removals using ffmpeg filter_complex.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fvideo-processor\u002FSKILL.md",[126],{"categoryNo":127,"categoryName":128,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[118,130,131,132,133,134,31,135,136,137,138,139,140,141,142,41,143],"processor","video processor","batch","create","reels","parts","segments","process","videos","you","segment","filter","ffmpeg","remove",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":46},"01M6XEVXJ5KZ0NTY3XZKRY4AS1","silence-detector","Detect initial silence segments in audio\u002Fvideo using energy-based analysis. Use when you need to find low-energy periods at the start of recordings (title slides, setup time, pre-roll silence).","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fsilence-detector\u002FSKILL.md",[150],{"categoryNo":127,"categoryName":128,"taxonomyType":20,"taxonomyTypeDesc":21},[152,153,154,155,31,139,39,156,157,158,159,136,160,161,118,162,163,164,41],"detector","silence detector","title","slides","energy","at","recordings","detect","find","Audio","analysis","start","setup",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":46},"01M6XEVT3NGRN1FT7JPMAPXS6M","segment-combiner","Combine multiple segment detection results into a unified list. Use when you need to merge segments from different detectors, prepare removal lists for video processing, or consolidate detection outputs.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Fsegment-combiner\u002FSKILL.md",[],[140,172,118,173,174,175,176,177,31,178,179,136,139,180,181,41,182,183],"segment combiner","detection","prepare","merge","video processing","for","outputs","combine","processing","consolidate","results","list",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":193,"publishedAt":46},"01M6XEVMPVASGS2KX86QK4FMT7","report-generator","Generate compression reports for video processing. Use when you need to create structured JSON reports with duration statistics, compression ratios, and segment details after video processing.","https:\u002F\u002Fgithub.com\u002FWaaaalnut\u002Fskillsbench\u002Fblob\u002Fmain\u002Ftasks\u002Fvideo-silence-remover\u002Fenvironment\u002Fskills\u002Freport-generator\u002FSKILL.md",[190],{"categoryNo":191,"categoryName":192,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000034","行政与办公人员",[194,195,196,140,31,177,139,197,180,198,199,200,41,176,201,118,202,203,133],"generator","report generator","report","with","statistics","structured","reports","json","compression","generate"]