← Back to list

pytest-patterns
by cuba6112
⭐ 0🍴 0📅 Dec 26, 2025
SKILL.md
name: pytest-patterns description: Advanced Python testing strategies with Pytest, covering fixtures, matrix testing with parametrization, and async test architecture. Triggers: pytest, fixtures, parametrize, pytest-asyncio, matrix-testing, yield-fixture.
Pytest Advanced Patterns
Overview
Pytest is a powerful testing framework that emphasizes modularity via fixtures and scalability via parametrization. It simplifies setup/teardown logic and enables complex test matrices with minimal code.
When to Use
- Resource Intensive Tests: Using scoped fixtures for database or API connections to avoid redundant setup.
- Input Combinations: Using parametrization to test a single function against dozens of inputs.
- Async Codebases: Testing coroutines directly without manual event loop management.
Decision Tree
- Is the setup expensive (e.g., creating a DB)?
- YES: Use a fixture with
scope='session'orscope='module'.
- YES: Use a fixture with
- Do you need to cleanup after a test?
- YES: Use a
yieldfixture.
- YES: Use a
- Do you have 3+ similar test cases for one function?
- YES: Use
@pytest.mark.parametrize.
- YES: Use
Workflows
1. Defining a Scoped Setup/Teardown
- Create a fixture using the
@pytest.fixture(scope="module")decorator for expensive resources like database connections. - Use
yieldto provide the resource to tests. - Add cleanup code (e.g., closing the connection) after the
yieldstatement. - Request the fixture by name in any test function within the module.
2. Matrix Testing with Stacked Parametrize
- Apply
@pytest.mark.parametrize("user", ["admin", "guest"])to a test. - Apply a second
@pytest.mark.parametrize("action", ["read", "write"])to the same test. - Pytest will run the test 4 times, once for each combination (admin-read, admin-write, etc.).
3. Testing Async Code
- Install
pytest-asyncio. - Mark the test function with
@pytest.mark.asyncio. - Define the test as an
async def. - Use
awaitfor the code under test and assertions.
Non-Obvious Insights
- Fixture Caching: Fixtures are executed once per requested scope and the return value is cached for all tests in that scope.
- Reverse Teardown: Teardown logic in
yieldfixtures is executed in the exact reverse order of the setup sequence. - Auto-Async Marking: Modern
pytest-asynciocan be configured to treat allasync deftests as async without needing the explicit decorator on every function.
Evidence
- "pytest won’t execute them again for that test... return values are cached." - Pytest Docs
- "Yield fixtures yield instead of return... Any teardown code for that fixture is placed after the yield." - Pytest Docs
- "provides support for coroutines as test functions. This allows users to await code inside their tests." - pytest-asyncio
Scripts
scripts/pytest-patterns_tool.py: Examples of fixtures, parametrization, and async tests.scripts/pytest-patterns_tool.js: (Comparison) Equivalent logic in Vitest/Jest.
Dependencies
pytestpytest-asyncio
References
Score
Total Score
50/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
Reviews
💬
Reviews coming soon