Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Test automation framework expert for creating and maintaining automated tests. Use when user asks to write tests, automate testing, or improve test coverage.
.claude/skills/test-automator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 60% | 0% |
Expert in creating and maintaining automated tests for various frameworks and languages.
Activates when you:
/\
/E2E\ - Few, expensive, slow
/------\
/ Integration \ - Moderate number
/--------------\
/ Unit Tests \ - Many, cheap, fast
/------------------\typescriptdescribe('UserService', () => { describe('createUser', () => { it('should create a user with valid data', async () => { // Arrange const userData = { name: 'John Doe', email: 'john@example.com' }; // Act const user = await userService.create(userData); // Assert expect(user.id).toBeDefined(); expect(user.email).toBe(userData.email); }); it('should throw error for invalid email', async () => { // Arrange const userData = { email: 'invalid' }; // Act & Assert await expect(userService.create(userData)) .rejects.toThrow('Invalid email'); }); }); });
typescriptdescribe('POST /api/users', () => { it('should create a user', async () => { const response = await request(app) .post('/api/users') .send({ name: 'John Doe', email: 'john@example.com' }) .expect(201) .expect((res) => { expect(res.body.id).toBeDefined(); expect(res.body.email).toBe('john@example.com'); }); }); });
typescripttest('user can login', async ({ page }) => { await page.goto('/login'); await page.fill('[name="email"]', 'user@example.com'); await page.fill('[name="password"]', 'password123'); await page.click('button[type="submit"]'); await expect(page).toHaveURL('/dashboard'); await expect(page.locator('h1')).toContainText('Welcome'); });
| Type | Target | |------|--------| | Lines | > 80% | | Branches | > 75% | | Functions | > 80% | | Statements | > 80% |
bash# Jest npm test -- --coverage # Python (pytest-cov) pytest --cov=src --cov-report=html # Go go test -coverprofile=coverage.out go tool cover -html=coverage.out
typescript// Good: Describes what is being tested it('should reject invalid email addresses') // Good: Describes the scenario and outcome it('returns 401 when user provides invalid credentials') // Bad: Vague it('works correctly')
| Language | Framework | Command | |----------|-----------|---------| | TypeScript/JS | Jest, Vitest | npm test | | Python | pytest | pytest | | Go | testing | go test | | Java | JUnit | mvn test | | Rust | built-in | cargo test |
Generate test boilerplate:
bashpython3 scripts/generate_test.py --name <feature> --output tests/test-plan.md
Check test coverage:
bashpython3 scripts/coverage_report.py --name <service-name> --output coverage-report.md
references/best-practices.md - Testing best practicesreferences/examples/ - Framework-specific examplesreferences/mocking.md - Mocking guidelines| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-24 | pass→pass | 21,249 | 19,073 | -10% | 1 | 1 | 0% | 2,512 | 3,898 | +55% | 0 | 0 | — |
case-01 | fail→pass | 17,662 | 13,294 | -25% | 1 | 1 | 0% | 2,165 | 2,684 | +24% | 0 | 0 | — |
case-02 | fail→fail | 15,960 | 16,139 | +1% | 1 | 1 | 0% | 2,197 | 2,876 | +31% | 0 | 0 | — |
case-03 | pass→pass | 12,602 | 17,291 | +37% | 1 | 1 | 0% | 1,478 | 3,049 | +106% | 0 | 0 | — |
case-04 | pass→pass | 20,335 | 20,407 | +0% | 1 | 1 | 0% | 2,788 | 3,499 | +26% | 0 | 0 | — |
case-05 | pass→pass | 19,989 | 19,445 | -3% | 1 | 1 | 0% | 2,331 | 3,450 | +48% | 0 | 0 | — |
case-06 | pass→pass | 16,605 | 17,059 | +3% | 1 | 1 | 0% | 1,934 | 2,951 | +53% | 0 | 0 | — |
case-07 | fail→pass | 17,917 | 15,292 | -15% | 1 | 1 | 0% | 1,744 | 2,761 | +58% | 0 | 0 | — |
case-08 | pass→pass | 20,043 | 15,303 | -24% | 1 | 1 | 0% | 2,139 | 2,786 | +30% | 0 | 0 | — |
case-09 | pass→pass | 11,755 | 10,778 | -8% | 1 | 1 | 0% | 1,332 | 2,268 | +70% | 0 | 0 | — |
case-10 | pass→pass | 14,386 | 19,593 | +36% | 1 | 1 | 0% | 2,262 | 3,556 | +57% | 0 | 0 | — |
case-11 | fail→pass | 14,164 | 17,499 | +24% | 1 | 1 | 0% | 2,344 | 3,202 | +37% | 0 | 0 | — |
case-12 | pass→pass | 6,351 | 9,545 | +50% | 1 | 1 | 0% | 1,103 | 1,977 | +79% | 0 | 0 | — |
case-13 | pass→pass | 12,525 | 13,987 | +12% | 1 | 1 | 0% | 2,084 | 3,524 | +69% | 0 | 0 | — |
case-14 | pass→pass | 22,160 | 12,625 | -43% | 1 | 1 | 0% | 2,392 | 3,242 | +36% | 0 | 0 | — |
case-15 | fail→pass | 14,610 | 7,203 | -51% | 1 | 1 | 0% | 1,414 | 1,569 | +11% | 0 | 0 | — |
case-16 | pass→pass | 12,115 | 7,264 | -40% | 1 | 1 | 0% | 986 | 1,523 | +54% | 0 | 0 | — |
case-17 | pass→pass | 11,727 | 9,091 | -22% | 1 | 1 | 0% | 891 | 1,707 | +92% | 0 | 0 | — |
case-18 | pass→pass | 13,171 | 10,961 | -17% | 1 | 1 | 0% | 2,276 | 2,945 | +29% | 0 | 0 | — |
case-19 | pass→pass | 15,734 | 9,305 | -41% | 1 | 1 | 0% | 1,792 | 2,728 | +52% | 0 | 0 | — |
case-20 | pass→pass | 20,068 | 15,946 | -21% | 1 | 1 | 0% | 1,890 | 2,968 | +57% | 0 | 0 | — |
case-21 | fail→pass | 17,434 | 17,049 | -2% | 1 | 1 | 0% | 1,566 | 2,511 | +60% | 0 | 0 | — |
case-22 | pass→pass | 8,843 | 8,676 | -2% | 1 | 1 | 0% | 705 | 1,806 | +156% | 0 | 0 | — |
case-23 | pass→pass | 23,080 | 13,467 | -42% | 1 | 1 | 0% | 2,770 | 3,283 | +19% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +21 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 7/24/2026 | +36% |
Other measured skills in the registry, with their headline benchmark lift.