Software Testing & Automation Skill — Quick Reference
Use this skill when the primary focus is how to test software effectively rather than how to implement features. This skill provides execution-ready patterns for building reliable, maintainable test suites across all testing layers.
When to Use This Skill
Invoke when users ask for:
- Test strategy for a new service or feature
- Unit testing with Jest or Vitest
- Integration testing with databases, APIs, external services
- E2E testing with Playwright or Cypress
- Performance and load testing with k6
- BDD with Cucumber and Gherkin
- API contract testing with Pact
- Visual regression testing
- Test automation CI/CD integration
- Test data management and fixtures
- Security and accessibility testing
- Test coverage analysis and improvement
- Flaky test diagnosis and fixes
- Mobile app testing (iOS/Android)
Quick Reference Table
| Test Type |
Framework |
Command |
When to Use |
| Unit Tests |
Vitest |
vitest run |
Pure functions, business logic (40-60% of tests) |
| Component Tests |
React Testing Library |
vitest --ui |
React components, user interactions (20-30%) |
| Integration Tests |
Supertest + Docker |
vitest run integration.test.ts |
API endpoints, database operations (15-25%) |
| E2E Tests |
Playwright |
playwright test |
Critical user journeys, cross-browser (5-10%) |
| Performance Tests |
k6 |
k6 run load-test.js |
Load testing, stress testing (nightly/pre-release) |
| API Contract Tests |
Pact |
pact test |
Microservices, consumer-provider contracts |
| Visual Regression |
Percy/Chromatic |
percy snapshot |
UI consistency, design system validation |
| Security Tests |
OWASP ZAP |
zap-baseline.py |
Vulnerability scanning (every PR) |
| Accessibility Tests |
axe-core |
vitest run a11y.test.ts |
WCAG compliance (every component) |
| Mutation Tests |
Stryker |
stryker run |
Test quality validation (weekly) |
Decision Tree: Test Strategy
Need to test: [Feature Type]
│
├─ Pure business logic?
│ └─ Unit tests (Jest/Vitest) — Fast, isolated, AAA pattern
│ ├─ Has dependencies? → Mock them
│ ├─ Complex calculations? → Property-based testing (fast-check)
│ └─ State machine? → State transition tests
│
├─ UI Component?
│ ├─ Isolated component?
│ │ └─ Component tests (React Testing Library)
│ │ ├─ User interactions → fireEvent/userEvent
│ │ └─ Accessibility → axe-core integration
│ │
│ └─ User journey?
│ └─ E2E tests (Playwright)
│ ├─ Critical path → Always test
│ ├─ Edge cases → Selective E2E
│ └─ Visual → Percy/Chromatic
│
├─ API Endpoint?
│ ├─ Single service?
│ │ └─ Integration tests (Supertest + test DB)
│ │ ├─ CRUD operations → Test all verbs
│ │ ├─ Auth/permissions → Test unauthorized paths
│ │ └─ Error handling → Test error responses
│ │
│ └─ Microservices?
│ └─ Contract tests (Pact) + integration tests
│ ├─ Consumer defines expectations
│ └─ Provider verifies contracts
│
├─ Performance-critical?
│ ├─ Load capacity?
│ │ └─ k6 load testing (ramp-up, stress, spike)
│ │
│ └─ Response time?
│ └─ k6 performance benchmarks (SLO validation)
│
└─ External dependency?
├─ Mock it (unit tests) → Use test doubles
└─ Real implementation (integration) → Docker containers (Testcontainers)
Decision Tree: Choosing Test Framework
What are you testing?
│
├─ JavaScript/TypeScript?
│ ├─ New project? → Vitest (faster, modern)
│ ├─ Existing Jest project? → Keep Jest
│ └─ Browser-specific? → Playwright component testing
│
├─ Python?
│ ├─ General testing? → pytest
│ ├─ Django? → pytest-django
│ └─ FastAPI? → pytest + httpx
│
├─ Go?
│ ├─ Unit tests? → testing package
│ ├─ Mocking? → gomock or testify
│ └─ Integration? → testcontainers-go
│
├─ Rust?
│ ├─ Unit tests? → Built-in #[test]
│ └─ Property-based? → proptest
│
└─ E2E (any language)?
├─ Web app? → Playwright (recommended)
├─ API only? → k6 or Postman/Newman
└─ Mobile? → Detox (RN), XCUITest (iOS), Espresso (Android)
Decision Tree: Flaky Test Diagnosis
Test is flaky?
│
├─ Timing-related?
│ ├─ Race condition? → Add proper waits (not sleep)
│ ├─ Animation? → Disable animations in test mode
│ └─ Network timeout? → Increase timeout, add retry
│
├─ Data-related?
│ ├─ Shared state? → Isolate test data
│ ├─ Random data? → Use seeded random
│ └─ Order-dependent? → Fix test isolation
│
├─ Environment-related?
│ ├─ CI-only failures? → Check resource constraints
│ ├─ Timezone issues? → Use UTC in tests
│ └─ Locale issues? → Set consistent locale
│
└─ External dependency?
├─ Third-party API? → Mock it
└─ Database? → Use test containers
Test Pyramid
/\
/ \
/ E2E \ 5-10% - Critical user journeys
/--------\ - Slow, expensive, high confidence
/Integration\ 15-25% - API, database, services
/--------------\ - Medium speed, good coverage
/ Unit \ 40-60% - Functions, components
/------------------\ - Fast, cheap, foundation
Target coverage by layer:
| Layer |
Coverage |
Speed |
Confidence |
| Unit |
80%+ |
~1000/sec |
Low (isolated) |
| Integration |
70%+ |
~10/sec |
Medium |
| E2E |
Critical paths |
~1/sec |
High |
Core Capabilities
Unit Testing
- Frameworks: Vitest, Jest, pytest, Go testing
- Patterns: AAA (Arrange-Act-Assert), Given-When-Then
- Mocking: Dependency injection, test doubles
- Coverage: Line, branch, function coverage
Integration Testing
- Database: Testcontainers, in-memory DBs
- API: Supertest, httpx, REST-assured
- Services: Docker Compose, localstack
- Fixtures: Factory patterns, seeders
E2E Testing
- Web: Playwright, Cypress
- Mobile: Detox, XCUITest, Espresso
- API: k6, Postman/Newman
- Patterns: Page Object Model, test locators
Performance Testing
- Load: k6, Locust, Gatling
- Profiling: Browser DevTools, Lighthouse
- Monitoring: Real User Monitoring (RUM)
- Benchmarks: Response time, throughput, error rate
Common Patterns
AAA Pattern (Arrange-Act-Assert)
describe('calculateDiscount', () => {
it('should apply 10% discount for orders over $100', () => {
// Arrange
const order = { total: 150, customerId: 'user-1' };
// Act
const result = calculateDiscount(order);
// Assert
expect(result.discount).toBe(15);
expect(result.finalTotal).toBe(135);
});
});
Page Object Model (E2E)
// pages/login.page.ts
class LoginPage {
async login(email: string, password: string) {
await this.page.fill('[data-testid="email"]', email);
await this.page.fill('[data-testid="password"]', password);
await this.page.click('[data-testid="submit"]');
}
async expectLoggedIn() {
await expect(this.page.locator('[data-testid="dashboard"]')).toBeVisible();
}
}
// tests/login.spec.ts
test('user can login with valid credentials', async ({ page }) => {
const loginPage = new LoginPage(page);
await loginPage.login('user@example.com', 'password');
await loginPage.expectLoggedIn();
});
Test Data Factory
// factories/user.factory.ts
export const createUser = (overrides = {}) => ({
id: faker.string.uuid(),
email: faker.internet.email(),
name: faker.person.fullName(),
createdAt: new Date(),
...overrides,
});
// Usage in tests
const admin = createUser({ role: 'admin' });
const guest = createUser({ role: 'guest', email: 'guest@test.com' });
CI/CD Integration
GitHub Actions Example
name: Test Suite
on: [push, pull_request]
jobs:
unit-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm ci
- run: npm run test:unit -- --coverage
- uses: codecov/codecov-action@v3
integration-tests:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: test
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run test:integration
e2e-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npx playwright install --with-deps
- run: npm run test:e2e
Quality Gates
| Gate |
Threshold |
Action on Failure |
| Unit test coverage |
80% |
Block merge |
| All tests pass |
100% |
Block merge |
| No new critical bugs |
0 |
Block merge |
| Performance regression |
<10% |
Warning |
| Security vulnerabilities |
0 critical |
Block deploy |
Anti-Patterns to Avoid
| Anti-Pattern |
Problem |
Solution |
| Testing implementation |
Breaks on refactor |
Test behavior, not internals |
| Shared mutable state |
Flaky tests |
Isolate test data |
| sleep() in tests |
Slow, unreliable |
Use proper waits/assertions |
| Testing everything E2E |
Slow, expensive |
Use test pyramid |
| No test data cleanup |
Test pollution |
Reset state between tests |
| Ignoring flaky tests |
False confidence |
Fix or quarantine immediately |
| Copy-paste tests |
Hard to maintain |
Use factories and helpers |
| Testing third-party code |
Wasted effort |
Trust libraries, test integration |
AI-Assisted Testing (2025 Trend)
72% of teams are exploring AI-driven testing workflows. Key patterns:
| Tool |
Use Case |
Example |
| GitHub Copilot |
Generate unit tests |
"Write tests for this function" in editor |
| Playwright + MCP |
AI-generated E2E |
Model Context Protocol enables AI agents to create/execute tests |
| Visual AI |
Smart visual regression |
Applitools, Percy AI ignore irrelevant changes |
| Test Generation |
Edge case discovery |
AI analyzes code paths for missing coverage |
When to use AI testing:
- Generating boilerplate test scaffolding
- Suggesting edge cases from code analysis
- Visual regression with intelligent diffing
- Test data generation from schemas
When NOT to use AI testing:
- Critical business logic (review manually)
- Security-sensitive assertions
- Performance benchmarks (needs human baseline)
Navigation
Resources
- resources/operational-playbook.md — Testing pyramid guidance, BDD/test data patterns, CI gates, and anti-patterns
- resources/playwright-webapp-testing.md — Playwright decision tree, server lifecycle helper, and recon-first scripting pattern
- resources/comprehensive-testing-guide.md — Full testing methodology reference
- resources/test-automation-patterns.md — Automation patterns and best practices
- resources/shift-left-testing.md — Early testing strategies
Templates
- templates/test-strategy-template.md — Test strategy starter
- templates/automation-pipeline-template.md — CI/CD automation pattern
- templates/unit/template-jest-vitest.md — Unit testing
- templates/integration/template-api-integration.md — Integration/API testing
- templates/e2e/template-playwright.md — Playwright E2E
- templates/bdd/template-cucumber-gherkin.md — BDD/Gherkin
- templates/performance/template-k6-load-testing.md — k6 performance
- templates/visual-regression/template-visual-testing.md — Visual regression
Data
- data/sources.json — Curated external references
Related Skills
1---2name: qa-testing-strategy-23description: Test strategy, QA patterns, and automation practices across unit, integration, E2E, performance, BDD, and security testing with modern frameworks (Jest, Vitest, Playwright, k6, Cucumber).4---5
6# Software Testing & Automation Skill — Quick Reference
7
8Use this skill when the primary focus is how to test software effectively rather than how to implement features. This skill provides execution-ready patterns for building reliable, maintainable test suites across all testing layers.
9
10---
11
12## When to Use This Skill
13
14Invoke when users ask for:
15
16- Test strategy for a new service or feature
17- Unit testing with Jest or Vitest
18- Integration testing with databases, APIs, external services
19- E2E testing with Playwright or Cypress
20- Performance and load testing with k6
21- BDD with Cucumber and Gherkin
22- API contract testing with Pact
23- Visual regression testing
24- Test automation CI/CD integration
25- Test data management and fixtures
26- Security and accessibility testing
27- Test coverage analysis and improvement
28- Flaky test diagnosis and fixes
29- Mobile app testing (iOS/Android)
30
31---
32
33## Quick Reference Table
34
35| Test Type | Framework | Command | When to Use |
36|-----------|-----------|---------|-------------|
37| Unit Tests | Vitest | `vitest run` | Pure functions, business logic (40-60% of tests) |
38| Component Tests | React Testing Library | `vitest --ui` | React components, user interactions (20-30%) |
39| Integration Tests | Supertest + Docker | `vitest run integration.test.ts` | API endpoints, database operations (15-25%) |
40| E2E Tests | Playwright | `playwright test` | Critical user journeys, cross-browser (5-10%) |
41| Performance Tests | k6 | `k6 run load-test.js` | Load testing, stress testing (nightly/pre-release) |
42| API Contract Tests | Pact | `pact test` | Microservices, consumer-provider contracts |
43| Visual Regression | Percy/Chromatic | `percy snapshot` | UI consistency, design system validation |
44| Security Tests | OWASP ZAP | `zap-baseline.py` | Vulnerability scanning (every PR) |
45| Accessibility Tests | axe-core | `vitest run a11y.test.ts` | WCAG compliance (every component) |
46| Mutation Tests | Stryker | `stryker run` | Test quality validation (weekly) |
47
48---
49
50## Decision Tree: Test Strategy
51
52```text
53Need to test: [Feature Type]
54 │
55 ├─ Pure business logic?
56 │ └─ Unit tests (Jest/Vitest) — Fast, isolated, AAA pattern
57 │ ├─ Has dependencies? → Mock them
58 │ ├─ Complex calculations? → Property-based testing (fast-check)
59 │ └─ State machine? → State transition tests
60 │
61 ├─ UI Component?
62 │ ├─ Isolated component?
63 │ │ └─ Component tests (React Testing Library)
64 │ │ ├─ User interactions → fireEvent/userEvent
65 │ │ └─ Accessibility → axe-core integration
66 │ │
67 │ └─ User journey?
68 │ └─ E2E tests (Playwright)
69 │ ├─ Critical path → Always test
70 │ ├─ Edge cases → Selective E2E
71 │ └─ Visual → Percy/Chromatic
72 │
73 ├─ API Endpoint?
74 │ ├─ Single service?
75 │ │ └─ Integration tests (Supertest + test DB)
76 │ │ ├─ CRUD operations → Test all verbs
77 │ │ ├─ Auth/permissions → Test unauthorized paths
78 │ │ └─ Error handling → Test error responses
79 │ │
80 │ └─ Microservices?
81 │ └─ Contract tests (Pact) + integration tests
82 │ ├─ Consumer defines expectations
83 │ └─ Provider verifies contracts
84 │
85 ├─ Performance-critical?
86 │ ├─ Load capacity?
87 │ │ └─ k6 load testing (ramp-up, stress, spike)
88 │ │
89 │ └─ Response time?
90 │ └─ k6 performance benchmarks (SLO validation)
91 │
92 └─ External dependency?
93 ├─ Mock it (unit tests) → Use test doubles
94 └─ Real implementation (integration) → Docker containers (Testcontainers)
95```
96
97## Decision Tree: Choosing Test Framework
98
99```text
100What are you testing?
101 │
102 ├─ JavaScript/TypeScript?
103 │ ├─ New project? → Vitest (faster, modern)
104 │ ├─ Existing Jest project? → Keep Jest
105 │ └─ Browser-specific? → Playwright component testing
106 │
107 ├─ Python?
108 │ ├─ General testing? → pytest
109 │ ├─ Django? → pytest-django
110 │ └─ FastAPI? → pytest + httpx
111 │
112 ├─ Go?
113 │ ├─ Unit tests? → testing package
114 │ ├─ Mocking? → gomock or testify
115 │ └─ Integration? → testcontainers-go
116 │
117 ├─ Rust?
118 │ ├─ Unit tests? → Built-in #[test]
119 │ └─ Property-based? → proptest
120 │
121 └─ E2E (any language)?
122 ├─ Web app? → Playwright (recommended)
123 ├─ API only? → k6 or Postman/Newman
124 └─ Mobile? → Detox (RN), XCUITest (iOS), Espresso (Android)
125```
126
127## Decision Tree: Flaky Test Diagnosis
128
129```text
130Test is flaky?
131 │
132 ├─ Timing-related?
133 │ ├─ Race condition? → Add proper waits (not sleep)
134 │ ├─ Animation? → Disable animations in test mode
135 │ └─ Network timeout? → Increase timeout, add retry
136 │
137 ├─ Data-related?
138 │ ├─ Shared state? → Isolate test data
139 │ ├─ Random data? → Use seeded random
140 │ └─ Order-dependent? → Fix test isolation
141 │
142 ├─ Environment-related?
143 │ ├─ CI-only failures? → Check resource constraints
144 │ ├─ Timezone issues? → Use UTC in tests
145 │ └─ Locale issues? → Set consistent locale
146 │
147 └─ External dependency?
148 ├─ Third-party API? → Mock it
149 └─ Database? → Use test containers
150```
151
152---
153
154## Test Pyramid
155
156```text
157 /\
158 / \
159 / E2E \ 5-10% - Critical user journeys
160 /--------\ - Slow, expensive, high confidence
161 /Integration\ 15-25% - API, database, services
162 /--------------\ - Medium speed, good coverage
163 / Unit \ 40-60% - Functions, components
164 /------------------\ - Fast, cheap, foundation
165```
166
167**Target coverage by layer:**
168
169| Layer | Coverage | Speed | Confidence |
170|-------|----------|-------|------------|
171| Unit | 80%+ | ~1000/sec | Low (isolated) |
172| Integration | 70%+ | ~10/sec | Medium |
173| E2E | Critical paths | ~1/sec | High |
174
175---
176
177## Core Capabilities
178
179### Unit Testing
180
181- **Frameworks**: Vitest, Jest, pytest, Go testing
182- **Patterns**: AAA (Arrange-Act-Assert), Given-When-Then
183- **Mocking**: Dependency injection, test doubles
184- **Coverage**: Line, branch, function coverage
185
186### Integration Testing
187
188- **Database**: Testcontainers, in-memory DBs
189- **API**: Supertest, httpx, REST-assured
190- **Services**: Docker Compose, localstack
191- **Fixtures**: Factory patterns, seeders
192
193### E2E Testing
194
195- **Web**: Playwright, Cypress
196- **Mobile**: Detox, XCUITest, Espresso
197- **API**: k6, Postman/Newman
198- **Patterns**: Page Object Model, test locators
199
200### Performance Testing
201
202- **Load**: k6, Locust, Gatling
203- **Profiling**: Browser DevTools, Lighthouse
204- **Monitoring**: Real User Monitoring (RUM)
205- **Benchmarks**: Response time, throughput, error rate
206
207---
208
209## Common Patterns
210
211### AAA Pattern (Arrange-Act-Assert)
212
213```javascript
214describe('calculateDiscount', () => {
215 it('should apply 10% discount for orders over $100', () => {
216 // Arrange
217 const order = { total: 150, customerId: 'user-1' };
218
219 // Act
220 const result = calculateDiscount(order);
221
222 // Assert
223 expect(result.discount).toBe(15);
224 expect(result.finalTotal).toBe(135);
225 });
226});
227```
228
229### Page Object Model (E2E)
230
231```typescript
232// pages/login.page.ts
233class LoginPage {
234 async login(email: string, password: string) {
235 await this.page.fill('[data-testid="email"]', email);
236 await this.page.fill('[data-testid="password"]', password);
237 await this.page.click('[data-testid="submit"]');
238 }
239
240 async expectLoggedIn() {
241 await expect(this.page.locator('[data-testid="dashboard"]')).toBeVisible();
242 }
243}
244
245// tests/login.spec.ts
246test('user can login with valid credentials', async ({ page }) => {
247 const loginPage = new LoginPage(page);
248 await loginPage.login('user@example.com', 'password');
249 await loginPage.expectLoggedIn();
250});
251```
252
253### Test Data Factory
254
255```typescript
256// factories/user.factory.ts
257export const createUser = (overrides = {}) => ({
258 id: faker.string.uuid(),
259 email: faker.internet.email(),
260 name: faker.person.fullName(),
261 createdAt: new Date(),
262 ...overrides,
263});
264
265// Usage in tests
266const admin = createUser({ role: 'admin' });
267const guest = createUser({ role: 'guest', email: 'guest@test.com' });
268```
269
270---
271
272## CI/CD Integration
273
274### GitHub Actions Example
275
276```yaml
277name: Test Suite
278on: [push, pull_request]
279
280jobs:
281 unit-tests:
282 runs-on: ubuntu-latest
283 steps:
284 - uses: actions/checkout@v4
285 - uses: actions/setup-node@v4
286 - run: npm ci
287 - run: npm run test:unit -- --coverage
288 - uses: codecov/codecov-action@v3
289
290 integration-tests:
291 runs-on: ubuntu-latest
292 services:
293 postgres:
294 image: postgres:15
295 env:
296 POSTGRES_PASSWORD: test
297 steps:
298 - uses: actions/checkout@v4
299 - run: npm ci
300 - run: npm run test:integration
301
302 e2e-tests:
303 runs-on: ubuntu-latest
304 steps:
305 - uses: actions/checkout@v4
306 - run: npm ci
307 - run: npx playwright install --with-deps
308 - run: npm run test:e2e
309```
310
311### Quality Gates
312
313| Gate | Threshold | Action on Failure |
314|------|-----------|-------------------|
315| Unit test coverage | 80% | Block merge |
316| All tests pass | 100% | Block merge |
317| No new critical bugs | 0 | Block merge |
318| Performance regression | <10% | Warning |
319| Security vulnerabilities | 0 critical | Block deploy |
320
321---
322
323## Anti-Patterns to Avoid
324
325| Anti-Pattern | Problem | Solution |
326|--------------|---------|----------|
327| Testing implementation | Breaks on refactor | Test behavior, not internals |
328| Shared mutable state | Flaky tests | Isolate test data |
329| sleep() in tests | Slow, unreliable | Use proper waits/assertions |
330| Testing everything E2E | Slow, expensive | Use test pyramid |
331| No test data cleanup | Test pollution | Reset state between tests |
332| Ignoring flaky tests | False confidence | Fix or quarantine immediately |
333| Copy-paste tests | Hard to maintain | Use factories and helpers |
334| Testing third-party code | Wasted effort | Trust libraries, test integration |
335
336---
337
338## AI-Assisted Testing (2025 Trend)
339
34072% of teams are exploring AI-driven testing workflows. Key patterns:
341
342| Tool | Use Case | Example |
343|------|----------|---------|
344| **GitHub Copilot** | Generate unit tests | "Write tests for this function" in editor |
345| **Playwright + MCP** | AI-generated E2E | Model Context Protocol enables AI agents to create/execute tests |
346| **Visual AI** | Smart visual regression | Applitools, Percy AI ignore irrelevant changes |
347| **Test Generation** | Edge case discovery | AI analyzes code paths for missing coverage |
348
349**When to use AI testing:**
350
351- Generating boilerplate test scaffolding
352- Suggesting edge cases from code analysis
353- Visual regression with intelligent diffing
354- Test data generation from schemas
355
356**When NOT to use AI testing:**
357
358- Critical business logic (review manually)
359- Security-sensitive assertions
360- Performance benchmarks (needs human baseline)
361
362---
363
364## Navigation
365
366### Resources
367
368- [resources/operational-playbook.md](resources/operational-playbook.md) — Testing pyramid guidance, BDD/test data patterns, CI gates, and anti-patterns
369- [resources/playwright-webapp-testing.md](resources/playwright-webapp-testing.md) — Playwright decision tree, server lifecycle helper, and recon-first scripting pattern
370- [resources/comprehensive-testing-guide.md](resources/comprehensive-testing-guide.md) — Full testing methodology reference
371- [resources/test-automation-patterns.md](resources/test-automation-patterns.md) — Automation patterns and best practices
372- [resources/shift-left-testing.md](resources/shift-left-testing.md) — Early testing strategies
373
374### Templates
375
376- [templates/test-strategy-template.md](templates/test-strategy-template.md) — Test strategy starter
377- [templates/automation-pipeline-template.md](templates/automation-pipeline-template.md) — CI/CD automation pattern
378- [templates/unit/template-jest-vitest.md](templates/unit/template-jest-vitest.md) — Unit testing
379- [templates/integration/template-api-integration.md](templates/integration/template-api-integration.md) — Integration/API testing
380- [templates/e2e/template-playwright.md](templates/e2e/template-playwright.md) — Playwright E2E
381- [templates/bdd/template-cucumber-gherkin.md](templates/bdd/template-cucumber-gherkin.md) — BDD/Gherkin
382- [templates/performance/template-k6-load-testing.md](templates/performance/template-k6-load-testing.md) — k6 performance
383- [templates/visual-regression/template-visual-testing.md](templates/visual-regression/template-visual-testing.md) — Visual regression
384
385### Data
386
387- [data/sources.json](data/sources.json) — Curated external references
388
389---
390
391## Related Skills
392
393- [../software-backend/SKILL.md](../software-backend/SKILL.md) — API design and backend patterns to test
394- [../software-frontend/SKILL.md](../software-frontend/SKILL.md) — Frontend components and UI patterns
395- [../ops-devops-platform/SKILL.md](../ops-devops-platform/SKILL.md) — CI/CD pipelines and infrastructure
396- [../qa-debugging/SKILL.md](../qa-debugging/SKILL.md) — Debugging failing tests
397- [../software-security-appsec/SKILL.md](../software-security-appsec/SKILL.md) — Security testing patterns