Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Compose comprehensive testing strategies spanning unit, integration, e2e, and performance tests with optimal coverage.
.claude/skills/williamzujkowski-testing-strategy-composer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 30% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 78% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 62% | 0% |
Trigger conditions:
Use this skill when you need to establish or improve testing practices with clear ROI, balanced coverage across the test pyramid, and framework-specific implementation guidance.
Before execution, verify:
NOW_ET = 2025-10-25T21:30:36-04:00 (NIST/time.gov semantics, America/New_York)system_description is non-empty string or parseable diagramtech_stack contains at least one technology identifierconstraints (if provided) includes valid keys: budget, time, team_sizeexisting_coverage (if provided) has numeric metricsNOW_ET; verify links resolveAbort conditions:
Goal: Analyze system and recommend test type distribution.
json { "test_distribution": { "unit": 70, "integration": 20, "e2e": 10 }, "priority_areas": ["auth", "payment", "data-sync"], "estimated_effort_hours": 40 }
Token budget: ≤2k tokens
Goal: Generate test scaffolding, calculate gaps, and create execution plan.
existing_coverage to targetsToken budget: ≤6k tokens total (including T1)
T3 is not required for this P0 skill; T2 provides sufficient depth for most testing strategies.
Test distribution adjustments:
Effort estimation (per 1000 LOC):
Coverage thresholds (from Martin Fowler Testing):
Stop conditions:
Required fields (all outputs):
typescriptinterface TestStrategy { strategy: string; // Markdown document (200-800 words) test_distribution: { unit: number; // Percentage (0-100) integration: number; e2e: number; performance?: number; }; priority_areas: string[]; // Top 3-5 high-risk components estimated_effort_hours: number; } interface TestScaffolding { framework: string; // e.g., "Jest", "pytest" unit_template: string; // Code snippet integration_template: string; e2e_template: string; setup_instructions: string; // Installation/config steps } interface CoverageGaps { current_coverage_percent: number; target_coverage_percent: number; gap_percent: number; untested_modules: Array<{ name: string; risk: "high" | "medium" | "low"; estimated_effort_hours: number; }>; } interface ExecutionPlan { phases: Array<{ phase_number: number; duration_weeks: number; focus_area: string; deliverables: string[]; success_criteria: string; }>; total_duration_weeks: number; dependencies: string[]; // External blockers }
Format:
test_strategy: Markdown with headings (## Overview, ## Test Types, ## Rationale)test_scaffolding: Code blocks with language hints (javascript)coverage_gaps: Valid JSONexecution_plan: Markdown with tables or numbered listsValidation:
yamlINPUT: system_description: "REST API with Node.js/Express, PostgreSQL, Redis" tech_stack: ["node.js", "express", "jest", "supertest"] existing_coverage: {unit: 45, integration: 10, e2e: 0} OUTPUT: test_distribution: {unit: 65, integration: 25, e2e: 10} scaffolding: # Unit test (Jest) describe('UserService', () => { it('hashes password', () => { expect(hashPassword('secret')).not.toBe('secret'); }); }); # Integration test describe('POST /users', () => { it('creates user in DB', async () => { const res = await request(app).post('/users').send({name: 'Alice'}); expect(res.status).toBe(201); }); }); coverage_gaps: - {module: "AuthService", risk: "high", effort_hours: 8}
Token budgets (mandatory):
Safety checks:
Auditability:
NOW_ETDeterminism:
Validation checklist:
Primary sources (accessed 2025-10-25):
Best practices, case studies, and emerging patterns from Google's testing infrastructure team.
Canonical testing patterns, pyramid model, and test doubles taxonomy.
Detailed guide on test distribution, anti-patterns, and framework examples.
Official guidance for unit, integration, and performance testing in .NET ecosystems.
International standard for testing terminology, lifecycle, and techniques.
Additional templates:
resources/test-pyramid-template.md for Markdown strategy templateexamples/strategy-example.txt for complete workflow exampleRelated skills (future):
performance-test-designer (for load/stress testing deep dive)mutation-testing-analyzer (for assessing test effectiveness)flaky-test-investigator (for debugging unstable tests)End of SKILL.md
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-16 | fail→fail | 14,908 | 11,237 | -25% | 1 | 1 | 0% | 3,600 | 5,255 | +46% | 0 | 0 | — |
case-01 | fail→pass | 29,641 | 18,248 | -38% | 1 | 1 | 0% | 6,296 | 6,795 | +8% | 0 | 0 | — |
case-02 | fail→fail | 31,663 | 21,769 | -31% | 1 | 1 | 0% | 6,281 | 7,703 | +23% | 0 | 0 | — |
case-03 | fail→fail | 30,062 | 18,683 | -38% | 1 | 1 | 0% | 6,283 | 6,966 | +11% | 0 | 0 | — |
case-04 | fail→pass | 19,932 | 10,771 | -46% | 1 | 1 | 0% | 3,720 | 4,850 | +30% | 0 | 0 | — |
case-05 | fail→pass | 15,917 | 14,577 | -8% | 1 | 1 | 0% | 2,861 | 5,694 | +99% | 0 | 0 | — |
case-06 | fail→pass | 21,769 | 18,803 | -14% | 1 | 1 | 0% | 3,683 | 6,564 | +78% | 0 | 0 | — |
case-07 | fail→fail | 29,415 | 14,019 | -52% | 1 | 1 | 0% | 2,697 | 5,550 | +106% | 0 | 0 | — |
case-08 | pass→pass | 28,214 | 19,717 | -30% | 1 | 1 | 0% | 5,868 | 7,167 | +22% | 0 | 0 | — |
case-09 | pass→pass | 26,107 | 17,918 | -31% | 1 | 1 | 0% | 5,761 | 6,364 | +10% | 0 | 0 | — |
case-10 | fail→pass | 21,088 | 14,699 | -30% | 1 | 1 | 0% | 3,656 | 5,926 | +62% | 0 | 0 | — |
case-11 | fail→pass | 15,144 | 11,852 | -22% | 1 | 1 | 0% | 2,480 | 5,028 | +103% | 0 | 0 | — |
case-12 | fail→fail | 16,019 | 8,620 | -46% | 1 | 1 | 0% | 2,910 | 4,300 | +48% | 0 | 0 | — |
case-13 | pass→pass | 10,708 | 3,265 | -70% | 1 | 1 | 0% | 2,095 | 3,292 | +57% | 0 | 0 | — |
case-14 | fail→pass | 31,474 | 20,086 | -36% | 1 | 1 | 0% | 6,172 | 6,689 | +8% | 0 | 0 | — |
case-15 | pass→pass | 22,176 | 18,760 | -15% | 1 | 1 | 0% | 3,839 | 6,237 | +62% | 0 | 0 | — |
case-17 | pass→pass | 15,647 | 16,926 | +8% | 1 | 1 | 0% | 2,712 | 6,430 | +137% | 0 | 0 | — |
case-18 | fail→pass | 13,828 | 3,595 | -74% | 1 | 1 | 0% | 3,080 | 3,451 | +12% | 0 | 0 | — |
case-19 | pass→pass | 11,435 | 9,059 | -21% | 1 | 1 | 0% | 1,974 | 4,318 | +119% | 0 | 0 | — |
case-20 | pass→fail | 15,623 | 15,023 | -4% | 1 | 1 | 0% | 3,031 | 5,420 | +79% | 0 | 0 | — |
case-21 | pass→pass | 16,183 | 17,025 | +5% | 1 | 1 | 0% | 3,262 | 6,006 | +84% | 0 | 0 | — |
case-22 | pass→pass | 8,921 | 8,749 | -2% | 1 | 1 | 0% | 2,038 | 4,506 | +121% | 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. 22 cases were attempted. The headline lift of +32 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
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.
Other measured skills in the registry, with their headline benchmark lift.