Skip to content
Back to skills

Python Testing

ASecurity

Write focused, deterministic, well-documented pytest tests for AI-authored code.

  • 5 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 12, 2026
testingpythontestinggit

Works with

  • cursor

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 3 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add Unique-AG/ai --skill python-testing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Python Testing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Python Testing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/unique-ag-python-testing/badge)](https://www.skillsdirectory.com/skills/unique-ag-python-testing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: python-testing
description: Write focused, deterministic, well-documented pytest tests for AI-authored code.
license: MIT
compatibility: claude cursor opencode
metadata:
  version: "1.0.0"
  languages: python
  audience: developers
  workflow: testing
  since: "2025-02-24"
---

## What I do

I help with three pytest workflows:
1. **Write tests** — generate focused, well-documented tests following project conventions
2. **Check coverage** — detect untested lines per file or folder
3. **Bootstrap setup** — install dev dependencies and apply recommended pytest configuration

Supporting files in this skill:
- `assets/pytest.ini.template` — ready-to-copy pytest configuration
- `scripts/analyze_coverage.sh [path]` — coverage analysis helper (whole src or specific folder/module)
  - Run from repo root as: `./.claude/skills/python-testing/scripts/analyze_coverage.sh [path]`
  - Or use repo-root-safe path: `"$(git rev-parse --show-toplevel)/.claude/skills/python-testing/scripts/analyze_coverage.sh" [path]`

## When to use me

Use when you want to:
- Write new tests for a module or feature
- Review and improve existing test quality
- Check coverage for a specific file, folder, or the whole project
- Bootstrap pytest for a new project (deps + config)

## Example usage

"Write tests for the `slugify` function in `src/utils/text.py`"
"Check coverage for `src/services/payment.py`"
"Set up pytest for this project with coverage and async support"

---

## Conventions

### Naming
- Files: `test_<module_or_feature>.py`
- Functions: `test_<unit>__<behavior>__<condition>`
- Mark every AI-generated test with `@pytest.mark.ai`

### Docstring (required on every test)
Three-part format:
```
Purpose: What this test verifies.
Why this matters: Business or technical consequence if it breaks.
Setup summary: What's arranged and what's asserted.
```

### Structure
- AAA pattern: Arrange – Act – Assert
- No conditionals or loops in test body (use parametrization)
- One responsibility per test

### Fixtures
- Centralize in `<domain>_fixtures.py`
- Register via `pytest_plugins = ["tests.fixtures"]` in `conftest.py`
- Return typed objects; modify only what changes per test

### Mocking
- Use `mocker` fixture (pytest-mock)
- Mock at the import boundary of the code under test
- Use `spec=True` for type safety

### Coverage
- Target ≥ 80% for AI-authored tests
- `./.claude/skills/python-testing/scripts/analyze_coverage.sh` — full src coverage
- `./.claude/skills/python-testing/scripts/analyze_coverage.sh src/services` — coverage for a specific folder
- `./.claude/skills/python-testing/scripts/analyze_coverage.sh src/utils/text.py` — coverage for a single file

### Test scope & quality
- Test every public function and method you touched
- Cover happy paths plus negative scenarios, validation failures, and async edge cases
- Keep tests deterministic and isolated (clean up temp data, reset mocks)
- Mock only external dependencies using `pytest-mock`'s `mocker` or hand-rolled fixtures
- Document why each test matters using the required docstring template

### Test cases to include
- Happy path scenarios that reflect realistic inputs
- Edge cases such as empty inputs, boundary values, and timeout paths
- Error handling or exception flows (raise and capture specific exceptions)
- Dependency failures (e.g., network timeouts, missing files) while staying fast
- Concurrency and async behavior when applicable (use `pytest.mark.asyncio` or trio)

## Test quality checklist
- [ ] Tested all public functions and methods touched by the change
- [ ] Covered happy path scenarios plus edge cases and negative flows
- [ ] Added or updated tests for error handling and exception cases
- [ ] Mocked external dependencies appropriately and kept mocks scoped
- [ ] Ensured all tests are deterministic and repeatable
- [ ] Kept tests focused (one assertion per behavior) and avoided loops/conditionals
- [ ] Documented each test with the three-part docstring
- [ ] Verified coverage with `scripts/analyze_coverage.sh` when changes affect multiple modules

### Setup (new project)
1. Install dev dependencies:
   - uv: `uv add --dev pytest pytest-cov pytest-asyncio pytest-mock`
   - pip: `pip install pytest pytest-cov pytest-asyncio pytest-mock`
2. Copy `assets/pytest.ini.template` → `pytest.ini` at the project root
3. Add `tests/` directory with an empty `__init__.py` and `conftest.py`

Files in this skill

  • SKILL.md4.3 KB
  • assets/pytest.ini.template91 B
  • scripts/analyze_coverage.sh207 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.