54 lines
1.8 KiB
Markdown
54 lines
1.8 KiB
Markdown
---
|
|
name: cpython-testing
|
|
description: Use this skill when you need to run CPython tests, whether running individual test files, specific test cases, the full test suite, or collecting code coverage. It covers unittest-based testing (not pytest), debugging tests, and test best practices.
|
|
---
|
|
|
|
# Running CPython Tests
|
|
|
|
**Critical rules:**
|
|
1. **ALWAYS use sub-agents when running tests**
|
|
2. **NEVER use `pytest`** - CPython tests are `unittest` based
|
|
3. **Use `--match` not `-k`** for filtering (this is not pytest!)
|
|
|
|
Prerequisite: `BUILT_PY=build/python` or `build/python.exe`
|
|
|
|
## Running Tests
|
|
|
|
```bash
|
|
# Single test module (recommended - proper discovery, parallel execution)
|
|
$BUILT_PY -m test test_zipfile -j $(nproc)
|
|
|
|
# Multiple modules
|
|
$BUILT_PY -m test test_csv test_json -j $(nproc)
|
|
|
|
# Direct execution (quick but may miss test packages)
|
|
$BUILT_PY Lib/test/test_csv.py
|
|
|
|
# Specific test pattern (use --match, NOT -k!)
|
|
$BUILT_PY -m test test_zipfile --match "*large*" -j $(nproc)
|
|
$BUILT_PY -m test test_csv --match "TestDialect*"
|
|
$BUILT_PY -m test test_json --match "TestEncode.test_encode_string"
|
|
|
|
# Full test suite (ASK FIRST - takes significant time!)
|
|
make -C $BUILD_DIR test
|
|
|
|
# Useful flags: -v (verbose), -f (fail fast), --list-tests (show all), --help
|
|
```
|
|
|
|
**Test packages** (directories like `test_asyncio/`) require `load_tests()` in `__init__.py` to work with `python -m test`.
|
|
|
|
## Code Coverage
|
|
|
|
```bash
|
|
# Collect coverage (uses trace mechanism via libregrtest)
|
|
$BUILT_PY -m test --coverage test_csv test_json --coveragedir .claude/coverage/ -j $(nproc)
|
|
|
|
# Reports go to specified coveragedir
|
|
```
|
|
|
|
## Debugging
|
|
|
|
For interactive debugging (pdb/lldb/gdb) or testing REPL features: **Control a tmux session**.
|
|
|
|
Add `breakpoint()` in test code, then run with `-v` for verbose output.
|