393 lines
9.5 KiB
Markdown
393 lines
9.5 KiB
Markdown
# Skill Test Templates
|
|
|
|
Production-ready test templates for validating Claude Code skills in isolated environments.
|
|
|
|
## Overview
|
|
|
|
These templates provide standardized testing workflows for different skill types. Each template includes:
|
|
- Pre-flight environment validation
|
|
- Before/after snapshots for comparison
|
|
- Comprehensive safety and security checks
|
|
- Detailed reporting with pass/fail criteria
|
|
- Automatic cleanup on exit (success or failure)
|
|
|
|
## CI/CD Integration with JSON Output
|
|
|
|
All test templates support JSON output for integration with CI/CD pipelines. The JSON reporter generates:
|
|
- **Structured JSON** - Machine-readable test results
|
|
- **JUnit XML** - Compatible with Jenkins, GitLab CI, GitHub Actions
|
|
- **Markdown Summary** - Human-readable reports for GitHub Actions
|
|
|
|
**Enable JSON output:**
|
|
```bash
|
|
export JSON_ENABLED=true
|
|
./test-templates/docker-skill-test-json.sh my-skill
|
|
```
|
|
|
|
**Output files:**
|
|
- `test-report.json` - Full structured test data
|
|
- `test-report.junit.xml` - JUnit format for CI systems
|
|
- `test-report.md` - Markdown summary
|
|
|
|
**JSON Report Structure:**
|
|
```json
|
|
{
|
|
"test_name": "docker-skill-test",
|
|
"skill_name": "my-skill",
|
|
"timestamp": "2025-11-02T12:00:00Z",
|
|
"status": "passed",
|
|
"duration_seconds": 45,
|
|
"exit_code": 0,
|
|
"metrics": {
|
|
"containers_created": 2,
|
|
"images_created": 1,
|
|
"execution_duration_seconds": 12
|
|
},
|
|
"issues": [],
|
|
"recommendations": []
|
|
}
|
|
```
|
|
|
|
**GitHub Actions Integration:**
|
|
```yaml
|
|
- name: Test Skill
|
|
run: |
|
|
export JSON_ENABLED=true
|
|
./test-templates/docker-skill-test-json.sh my-skill
|
|
|
|
- name: Upload Test Results
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: test-results
|
|
path: /tmp/skill-test-*/test-report.*
|
|
```
|
|
|
|
See `lib/json-reporter.sh` for full API documentation.
|
|
|
|
---
|
|
|
|
## Available Templates
|
|
|
|
### 1. Docker Skill Test (`docker-skill-test.sh`)
|
|
|
|
**Use for skills that:**
|
|
- Start or manage Docker containers
|
|
- Build Docker images
|
|
- Work with Docker volumes, networks, or compose files
|
|
- Require Docker daemon access
|
|
|
|
**Features:**
|
|
- Tracks Docker resource creation (containers, images, volumes, networks)
|
|
- Detects orphaned containers
|
|
- Validates cleanup behavior
|
|
- Resource limit enforcement
|
|
|
|
**Usage:**
|
|
```bash
|
|
chmod +x test-templates/docker-skill-test.sh
|
|
./test-templates/docker-skill-test.sh my-docker-skill
|
|
```
|
|
|
|
**Customization:**
|
|
Edit the skill execution command on line ~178:
|
|
```bash
|
|
docker exec "$SKILL_TEST_CONTAINER_ID" bash -c "
|
|
cd /root/.claude/skills/$SKILL_NAME
|
|
./skill.sh test-mode # <-- Customize this
|
|
"
|
|
```
|
|
|
|
---
|
|
|
|
### 2. API Skill Test (`api-skill-test.sh`)
|
|
|
|
**Use for skills that:**
|
|
- Make HTTP/HTTPS requests to external APIs
|
|
- Require API keys or authentication
|
|
- Interact with web services
|
|
- Need network access
|
|
|
|
**Features:**
|
|
- Network traffic monitoring
|
|
- API call detection and counting
|
|
- API key/secret leak detection
|
|
- Rate limiting validation
|
|
- HTTPS enforcement checking
|
|
|
|
**Usage:**
|
|
```bash
|
|
chmod +x test-templates/api-skill-test.sh
|
|
./test-templates/api-skill-test.sh my-api-skill
|
|
```
|
|
|
|
**Optional: Enable network capture:**
|
|
```bash
|
|
# Requires tcpdump and sudo
|
|
sudo apt-get install tcpdump # or brew install tcpdump
|
|
./test-templates/api-skill-test.sh my-api-skill
|
|
```
|
|
|
|
---
|
|
|
|
### 3. File Manipulation Skill Test (`file-manipulation-skill-test.sh`)
|
|
|
|
**Use for skills that:**
|
|
- Create, read, update, or delete files
|
|
- Modify configuration files
|
|
- Generate reports or artifacts
|
|
- Perform filesystem operations
|
|
|
|
**Features:**
|
|
- Complete filesystem diff (added/removed/modified files)
|
|
- File permission validation
|
|
- Sensitive data scanning
|
|
- Temp file cleanup verification
|
|
- MD5 checksum comparison
|
|
|
|
**Usage:**
|
|
```bash
|
|
chmod +x test-templates/file-manipulation-skill-test.sh
|
|
./test-templates/file-manipulation-skill-test.sh my-file-skill
|
|
```
|
|
|
|
**Customization:**
|
|
Add your own test files to the workspace (lines 54-70):
|
|
```bash
|
|
cat > "$TEST_DIR/test-workspace/your-file.txt" <<'EOF'
|
|
Your test content here
|
|
EOF
|
|
```
|
|
|
|
---
|
|
|
|
### 4. Git Skill Test (`git-skill-test.sh`)
|
|
|
|
**Use for skills that:**
|
|
- Create commits, branches, or tags
|
|
- Modify git history or configuration
|
|
- Work with git worktrees
|
|
- Interact with remote repositories
|
|
|
|
**Features:**
|
|
- Git state comparison (commits, branches, tags)
|
|
- Working tree cleanliness validation
|
|
- Force operation detection
|
|
- History rewriting detection
|
|
- Dangling commit detection
|
|
|
|
**Usage:**
|
|
```bash
|
|
chmod +x test-templates/git-skill-test.sh
|
|
./test-templates/git-skill-test.sh my-git-skill
|
|
```
|
|
|
|
**Customization:**
|
|
Modify the test repository setup (lines 59-81) to match your skill's requirements.
|
|
|
|
---
|
|
|
|
## Common Usage Patterns
|
|
|
|
### Basic Test Execution
|
|
|
|
```bash
|
|
# Run test for a specific skill
|
|
./test-templates/docker-skill-test.sh my-skill-name
|
|
|
|
# Keep container for debugging
|
|
export SKILL_TEST_KEEP_CONTAINER="true"
|
|
./test-templates/docker-skill-test.sh my-skill-name
|
|
|
|
# Keep images after test
|
|
export SKILL_TEST_REMOVE_IMAGES="false"
|
|
./test-templates/docker-skill-test.sh my-skill-name
|
|
```
|
|
|
|
### Custom Resource Limits
|
|
|
|
```bash
|
|
# Set custom memory/CPU limits
|
|
export SKILL_TEST_MEMORY_LIMIT="1g"
|
|
export SKILL_TEST_CPU_LIMIT="2.0"
|
|
./test-templates/docker-skill-test.sh my-skill-name
|
|
```
|
|
|
|
### Parallel Testing
|
|
|
|
```bash
|
|
# Test multiple skills in parallel
|
|
for skill in skill1 skill2 skill3; do
|
|
./test-templates/docker-skill-test.sh "$skill" &
|
|
done
|
|
wait
|
|
echo "All tests complete!"
|
|
```
|
|
|
|
### CI/CD Integration
|
|
|
|
```bash
|
|
# Exit code 0 = pass, 1 = fail
|
|
#!/bin/bash
|
|
set -e
|
|
|
|
SKILLS=(
|
|
"skill-creator"
|
|
"claude-code-otel-setup"
|
|
"playwright-e2e-automation"
|
|
)
|
|
|
|
for skill in "${SKILLS[@]}"; do
|
|
echo "Testing $skill..."
|
|
./test-templates/docker-skill-test.sh "$skill" || {
|
|
echo "❌ $skill failed!"
|
|
exit 1
|
|
}
|
|
done
|
|
|
|
echo "✅ All skills passed!"
|
|
```
|
|
|
|
## Customizing Templates
|
|
|
|
### Add Custom Validation
|
|
|
|
Insert your own checks before the "Generate Test Report" section:
|
|
|
|
```bash
|
|
# ============================================================================
|
|
# Custom Validation
|
|
# ============================================================================
|
|
|
|
echo ""
|
|
echo "=== Running Custom Checks ==="
|
|
|
|
# Your custom checks here
|
|
docker exec "$SKILL_TEST_CONTAINER_ID" bash -c "
|
|
# Example: Check if specific file exists
|
|
test -f /workspace/expected-output.txt || {
|
|
echo 'ERROR: Expected output file not found'
|
|
exit 1
|
|
}
|
|
"
|
|
```
|
|
|
|
### Modify Execution Command
|
|
|
|
Each template has a skill execution section. Customize the command to match your skill's interface:
|
|
|
|
```bash
|
|
# Example: Run skill with arguments
|
|
docker exec "$SKILL_TEST_CONTAINER_ID" bash -c "
|
|
cd /root/.claude/skills/$SKILL_NAME
|
|
./skill.sh --mode=test --output=/workspace/results
|
|
"
|
|
|
|
# Example: Source skill as library
|
|
docker exec "$SKILL_TEST_CONTAINER_ID" bash -c "
|
|
source /root/.claude/skills/$SKILL_NAME/lib.sh
|
|
run_skill_tests
|
|
"
|
|
```
|
|
|
|
### Add Pre-Test Setup
|
|
|
|
Insert setup steps after the "Build Test Environment" section:
|
|
|
|
```bash
|
|
# Install additional dependencies
|
|
docker exec "$SKILL_TEST_CONTAINER_ID" bash -c "
|
|
apt-get update && apt-get install -y your-package
|
|
"
|
|
|
|
# Set environment variables
|
|
docker exec "$SKILL_TEST_CONTAINER_ID" bash -c "
|
|
export SKILL_CONFIG_PATH=/etc/skill-config.json
|
|
"
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
All templates support these environment variables:
|
|
|
|
| Variable | Default | Description |
|
|
|----------|---------|-------------|
|
|
| `SKILL_TEST_KEEP_CONTAINER` | `false` | Keep container after test for debugging |
|
|
| `SKILL_TEST_REMOVE_IMAGES` | `true` | Remove test images after completion |
|
|
| `SKILL_TEST_MEMORY_LIMIT` | `512m` | Container memory limit |
|
|
| `SKILL_TEST_CPU_LIMIT` | `1.0` | Container CPU limit (cores) |
|
|
| `SKILL_TEST_TEMP_DIR` | `/tmp/skill-test-*` | Temporary directory for test artifacts |
|
|
|
|
## Exit Codes
|
|
|
|
- `0` - Test passed (skill executed successfully)
|
|
- `1` - Test failed (skill execution error or validation failure)
|
|
- `>1` - Other errors (environment setup, Docker issues, etc.)
|
|
|
|
## Troubleshooting
|
|
|
|
### "Docker daemon not running"
|
|
```bash
|
|
# macOS
|
|
open -a Docker
|
|
|
|
# Linux
|
|
sudo systemctl start docker
|
|
```
|
|
|
|
### "Permission denied" errors
|
|
```bash
|
|
# Add user to docker group
|
|
sudo usermod -aG docker $USER
|
|
newgrp docker
|
|
```
|
|
|
|
### Container hangs or never exits
|
|
```bash
|
|
# Set a timeout in your skill execution
|
|
timeout 300 ./test-templates/docker-skill-test.sh my-skill
|
|
```
|
|
|
|
### Need to inspect failed test
|
|
```bash
|
|
# Keep container after failure
|
|
export SKILL_TEST_KEEP_CONTAINER="true"
|
|
./test-templates/docker-skill-test.sh my-skill
|
|
|
|
# Inspect container
|
|
docker start -ai <container-id>
|
|
docker logs <container-id>
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
1. **Run tests before committing** - Catch environment-specific bugs early
|
|
2. **Test in clean environment** - Don't rely on local configs or files
|
|
3. **Validate cleanup** - Ensure skills don't leave orphaned resources
|
|
4. **Check for secrets** - Never commit API keys or sensitive data
|
|
5. **Document dependencies** - List all required packages and tools
|
|
6. **Use resource limits** - Prevent runaway processes
|
|
7. **Review diffs carefully** - Understand all file system changes
|
|
|
|
## Contributing
|
|
|
|
To add a new test template:
|
|
|
|
1. Copy an existing template as a starting point
|
|
2. Customize for your skill type
|
|
3. Add comprehensive validation checks
|
|
4. Update this README with usage documentation
|
|
5. Test your template with at least 3 different skills
|
|
|
|
## Related Documentation
|
|
|
|
- `../lib/docker-helpers.sh` - Shared helper functions
|
|
- `../modes/mode2-docker.md` - Docker isolation mode documentation
|
|
- `../skill.md` - Main skill documentation
|
|
|
|
## Support
|
|
|
|
For issues or questions:
|
|
- Check the skill logs: `docker logs <container-id>`
|
|
- Review test artifacts in `/tmp/skill-test-*/`
|
|
- Consult the helper library: `lib/docker-helpers.sh`
|