| name | test-executor |
| description | Execute test suites with proper configuration, parallel execution, and detailed reporting. Use when running unit tests, integration tests, or full test suites. |
| allowed-tools | Read, Bash, Grep, Glob |
Test Executor Skill
Purpose
This skill provides systematic test execution capabilities across different test types (unit, integration, e2e) with proper configuration, parallel execution, test filtering, and comprehensive reporting.
When to Use
- Running unit tests for a module or feature
- Executing integration tests with external dependencies
- Running full test suite before commit/PR
- Debugging failing tests with verbose output
- Checking test execution time and performance
- Running tests in different environments (dev, CI/CD)
Test Execution Workflow
1. Test Discovery and Planning
Identify Test Scope:
pytest --collect-only
pytest --collect-only tests/unit/
pytest --collect-only tests/integration/
pytest --collect-only tests/e2e/
pytest --collect-only -q
Analyze Test Organization:
find tests/ -name "test_*.py" -o -name "*_test.py"
ls tests/unit/test_*.py | wc -l
ls tests/integration/test_*.py | wc -l
grep -r "@pytest.mark" tests/
Deliverable: Test inventory and execution plan
2. Unit Test Execution
Run All Unit Tests:
pytest tests/unit/
pytest tests/unit/ -v
pytest tests/unit/ -vv
pytest tests/unit/ -s
pytest tests/unit/ -x
pytest tests/unit/ --lf
Run Specific Tests:
pytest tests/unit/test_feature.py
pytest tests/unit/test_feature.py::test_function_name
pytest tests/unit/test_feature.py::TestClassName
pytest tests/unit/test_feature.py::TestClassName::test_method_name
pytest tests/unit/ -k "test_create"
pytest tests/unit/ -k "test_create or test_update"
pytest tests/unit/ -k "not slow"
Run with Markers:
pytest tests/unit/ -m "not slow"
pytest tests/unit/ -m "smoke"
pytest tests/unit/ -m "smoke and not slow"
pytest --markers
Deliverable: Unit test execution results
3. Integration Test Execution
Run Integration Tests:
pytest tests/integration/ -v
pytest tests/integration/ --timeout=300
ENV=test pytest tests/integration/
pytest tests/integration/ -m "not slow"
Run with Database/Services:
pytest tests/integration/ --db-url=sqlite:///test.db
pytest tests/integration/ --with-docker
pytest tests/integration/ --mock-external
pytest tests/integration/ --real-services
Deliverable: Integration test results
4. End-to-End Test Execution
Run E2E Tests:
pytest tests/e2e/ -v
pytest tests/e2e/ --browser=chrome
pytest tests/e2e/ --browser=firefox
pytest tests/e2e/ --headless
pytest tests/e2e/ --screenshot-on-failure
Deliverable: E2E test results
5. Parallel Test Execution
Run Tests in Parallel:
pip install pytest-xdist
pytest tests/unit/ -n auto
pytest tests/unit/ -n 4
pytest tests/unit/ -n auto --dist=loadscope
pytest tests/unit/ -n auto --dist=worksteal
Performance Optimization:
pytest tests/unit/ --durations=10
pytest tests/unit/ --durations=20
pytest tests/unit/ --profile
time pytest tests/unit/
Deliverable: Parallel execution metrics
6. Test Debugging
Debug Failing Tests:
pytest tests/unit/ -vv
pytest tests/unit/ --pdb
pytest tests/unit/ -x --pdb
pytest tests/unit/ -l
pytest tests/unit/ --tb=short
pytest tests/unit/ --tb=long
pytest tests/unit/ --tb=native
Rerun Failed Tests:
pytest tests/unit/ --lf
pytest tests/unit/ --ff
pytest tests/unit/ --lf -vv
pytest tests/unit/ --cache-clear
Deliverable: Debug output and failure analysis
7. Test Reporting
Generate Test Reports:
pytest tests/ --junitxml=reports/junit.xml
pip install pytest-html
pytest tests/ --html=reports/report.html --self-contained-html
pip install pytest-json-report
pytest tests/ --json-report --json-report-file=reports/report.json
pytest tests/ \
--junitxml=reports/junit.xml \
--html=reports/report.html \
--self-contained-html
Test Summary:
pytest tests/ -q
pytest tests/ -ra
pytest tests/ -rP
pytest tests/ -rf
pytest tests/ -rE
pytest tests/ -rA
Deliverable: Test reports in multiple formats
8. CI/CD Integration
Run Tests in CI/CD Pipeline:
pytest tests/ \
--junitxml=reports/junit.xml \
--cov=src \
--cov-report=xml \
--cov-report=html \
-v
pytest tests/ --strict-markers
pytest tests/ -W error
pytest tests/ -vv --tb=short
GitHub Actions Example:
- name: Run tests
run: |
pytest tests/ \
--junitxml=reports/junit.xml \
--cov=src \
--cov-report=xml \
--cov-fail-under=80 \
-v
Deliverable: CI/CD-ready test execution
Test Execution Patterns
Full Test Suite
pytest tests/ \
-v \
--cov=src \
--cov-report=html \
--cov-report=term-missing \
--junitxml=reports/junit.xml \
--html=reports/report.html \
--self-contained-html
Fast Feedback Loop
pytest tests/unit/ \
-x \
--ff \
--tb=short \
-q
Pre-Commit Tests
pytest tests/unit/ tests/integration/ \
-v \
--cov=src \
--cov-fail-under=80
Nightly/Comprehensive Tests
pytest tests/ \
-v \
--cov=src \
--cov-report=html \
--durations=20 \
--junitxml=reports/junit.xml
Test Configuration
pytest.ini Configuration
[pytest]
testpaths = tests
python_files = test_*.py *_test.py
python_classes = Test*
python_functions = test_*
markers =
slow: marks tests as slow (deselect with '-m "not slow"')
integration: marks tests as integration tests
e2e: marks tests as end-to-end tests
smoke: marks tests as smoke tests
addopts =
-v
--strict-markers
--tb=short
--disable-warnings
[coverage:run]
source = src
omit = tests/*,*/__init__.py
[coverage:report]
exclude_lines =
pragma: no cover
def __repr__
raise AssertionError
raise NotImplementedError
if __name__ == .__main__.:
pyproject.toml Configuration
[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
addopts = [
"-v",
"--strict-markers",
"--tb=short",
]
markers = [
"slow: marks tests as slow",
"integration: marks integration tests",
"e2e: marks end-to-end tests",
]
[tool.coverage.run]
source = ["src"]
omit = ["tests/*", "*/__init__.py"]
[tool.coverage.report]
fail_under = 80
exclude_lines = [
"pragma: no cover",
"def __repr__",
"raise NotImplementedError",
]
Test Execution Checklist
Pre-Execution
Execution
Post-Execution
Common Test Execution Commands
Quick Reference
pytest tests/unit/ -x --ff -q
pytest tests/ --cov=src --cov-report=term-missing
pytest tests/ \
--junitxml=reports/junit.xml \
--cov=src \
--cov-report=xml \
--cov-fail-under=80 \
-v
pytest tests/unit/test_feature.py::test_function -vv --pdb
pytest tests/unit/ -n auto
pytest tests/ --durations=10
pytest tests/ --lf -vv
Test Execution Troubleshooting
Tests Not Found
pytest --collect-only
cat pytest.ini
ls tests/test_*.py
Import Errors
echo $PYTHONPATH
pip install -e .
python -c "import src.module"
Slow Tests
pytest tests/ --durations=20
pytest tests/ -n auto
pytest tests/ -m "not slow"
Flaky Tests
for i in {1..10}; do pytest tests/ || break; done
pip install pytest-randomly
pytest tests/ --randomly-seed=1234
pip install pytest-rerunfailures
pytest tests/ --reruns 3
Integration with Test Runner Specialist
Input: Test execution request from specialist agent
Process: Execute tests with appropriate configuration
Output: Test results, execution logs, and metrics
Next Step: Coverage analysis by coverage-analyzer skill
Test Execution Best Practices
Development
- Run unit tests frequently (every few minutes)
- Use
-x --ff for fast feedback
- Focus on relevant tests with
-k pattern matching
- Keep unit tests fast (< 1 minute total)
Pre-Commit
- Run unit and integration tests
- Verify coverage meets threshold
- Check for flaky tests
- Ensure all tests pass
CI/CD
- Run full test suite
- Generate reports for tracking
- Fail on coverage below threshold
- Run tests in parallel for speed
- Archive test artifacts
Debugging
- Use
-vv for detailed output
- Use
--pdb to drop into debugger
- Use
-l to show local variables
- Run single test in isolation
Supporting Resources
- pytest documentation: https://docs.pytest.org
- pytest-cov: Coverage plugin
- pytest-xdist: Parallel execution plugin
- pytest-html: HTML report generation
Success Metrics