From smoke-test-runner
Execute fast smoke tests validating critical functionality after deployment. Use when performing specialized testing. Trigger with phrases like "run smoke tests", "quick validation", or "test critical paths".
npx claudepluginhub flight505/skill-forge --plugin smoke-test-runnerThis skill is limited to using the following tools:
Execute fast, high-confidence smoke tests that validate critical application functionality after deployment or build. Smoke tests verify that the application starts, core user flows work, and key integrations respond -- without running the full test suite.
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies Acme Corporation brand guidelines including colors, fonts, layouts, and messaging to generated PowerPoint, Excel, and PDF documents.
Share bugs, ideas, or general feedback.
Execute fast, high-confidence smoke tests that validate critical application functionality after deployment or build. Smoke tests verify that the application starts, core user flows work, and key integrations respond -- without running the full test suite.
curl, wget, node-fetch, or Playwright)curl for HTTP checks or Playwright for browser-based checks.scripts/smoke-test.sh or tests/smoke.test.ts)| Error | Cause | Solution |
|---|---|---|
| Connection refused | Application not yet ready after deployment | Add a startup wait with exponential backoff (max 30 seconds) before running smoke tests |
| 503 Service Unavailable | Application is starting or behind a load balancer draining | Retry with 2-second delay up to 3 times; check load balancer health check status |
| Unexpected redirect (301/302) | URL changed or SSL redirect not accounted for | Follow redirects with curl -L; update expected URLs in smoke config |
| Content mismatch | Page content changed but smoke test pattern is too specific | Use broad patterns (check for <title> or key element IDs, not exact text) |
| Timeout on database check | Database migration running or connection pool exhausted | Increase timeout for database checks; verify migration completed before smoke tests |
Shell-based smoke test script:
#!/bin/bash
set -e
BASE_URL="${1:-http://localhost:3000}" # 3000: 3 seconds in ms
PASS=0; FAIL=0
check() {
local name="$1" url="$2" expected="$3"
status=$(curl -s -o /dev/null -w '%{http_code}' --max-time 5 "$url")
if [ "$status" = "$expected" ]; then
echo "PASS: $name (HTTP $status)"
((PASS++))
else
echo "FAIL: $name (expected $expected, got $status)"
((FAIL++))
fi
}
check "Health check" "$BASE_URL/health" "200" # HTTP 200 OK
check "Homepage" "$BASE_URL/" "200" # HTTP 200 OK
check "API status" "$BASE_URL/api/status" "200" # HTTP 200 OK
check "Login page" "$BASE_URL/login" "200" # HTTP 200 OK
echo "Results: $PASS passed, $FAIL failed"
[ "$FAIL" -eq 0 ] || exit 1
Playwright smoke test:
import { test, expect } from '@playwright/test';
test('homepage loads with navigation', async ({ page }) => {
await page.goto('/', { timeout: 10000 }); # 10000: 10 seconds in ms
await expect(page.locator('nav')).toBeVisible();
await expect(page).toHaveTitle(/My App/);
});
test('API health endpoint responds', async ({ request }) => {
const response = await request.get('/api/health');
expect(response.ok()).toBeTruthy();
expect(await response.json()).toHaveProperty('status', 'ok');
});