Smoke Testing Core Knowledge
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:smoke-testingfor comprehensive documentation.
When NOT to Use This Skill
- Unit Testing — Use
vitest,jest,junit, orpytestfor isolated unit tests - E2E Browser Testing — Use
playwrightorcypressfor browser-driven end-to-end tests - Static API Contract Validation — Use
integration-validator-expertfor OpenAPI schema validation without running services - Load/Performance Testing — Use
performance-expertfor benchmarks and profiling
Stack Detection Table
| Marker File | Stack | Build Command | Test Command | Run Command | Default Port |
|-------------|-------|---------------|--------------|-------------|--------------|
| pom.xml | Spring Boot | ./mvnw clean compile -q | ./mvnw test -q | ./mvnw spring-boot:run & | 8080 |
| build.gradle | Spring Boot (Gradle) | ./gradlew build -x test | ./gradlew test | ./gradlew bootRun & | 8080 |
| package.json + @nestjs/core | NestJS | npm run build | npm test | npm run start:dev & | 3000 |
| package.json + express | Express | npm run build | npm test | npm start & | 3000 |
| requirements.txt + fastapi | FastAPI | — | pytest | uvicorn main:app --reload & | 8000 |
| go.mod | Go | go build ./... | go test ./... | go run . & | 8080 |
| Cargo.toml | Rust | cargo build | cargo test | cargo run & | 8080 |
| *.csproj | .NET | dotnet build | dotnet test | dotnet run & | 5000 |
Health Check Endpoints
| Stack | Endpoint | Dependency |
|-------|----------|------------|
| Spring Boot | /actuator/health | spring-boot-starter-actuator |
| NestJS | /health | @nestjs/terminus (or custom) |
| FastAPI | /health or /docs | Custom route |
| Express | /health or /api/health | Custom route |
| Go | /health or /healthz | Custom handler |
| .NET | /health | Microsoft.Extensions.Diagnostics.HealthChecks |
Port Detection Strategy
Search in order:
CLAUDE.md— explicit port mentionsapplication.yml/application.properties→server.portpackage.jsonscripts →--portflag.env/.env.local→PORT=- Fall back to stack default from table above
Authentication Patterns
JWT Login Flow
POST /api/auth/login
Content-Type: application/json
{"email": "{email}", "password": "{password}"}
→ Response: {"token": "eyJ...", "refreshToken": "..."}
→ Use: Authorization: Bearer {token}
Credential Discovery
Search in order:
- Test files → Grep for
login,password,testUserinsrc/test/ortest/ - Config files →
application-test.yml,.env.test,test.env - Seed/fixture files →
data.sql,seed.ts,fixtures/ - Known defaults →
admin/admin,test@test.com/password
Detecting Auth Requirement
No auth needed if:
- No security dependencies in
pom.xml/package.json - Health endpoint returns 200 without token
- No
@PreAuthorize,@UseGuards,Depends(get_current_user)in controllers
Log File Locations
| Stack | Typical Paths | Config Key |
|-------|---------------|------------|
| Spring Boot | logs/, target/ | logging.file.path in application*.yml |
| NestJS | logs/ | LoggerModule config or winston transport |
| FastAPI | logs/ | logging.config in Python files |
| Docker | Container stdout | Access via docker logs or docker-manager MCP |
Fallback chain: /tmp/smoke-test-app.log (stdout redirect) → Glob **/logs/*.log → Docker container logs
HTTP Verification Patterns
Positive Cases
| Method | Expected Status | Body Check | |--------|----------------|------------| | GET (list) | 200 | Array response, non-empty | | GET (by ID) | 200 | Object with matching ID | | POST (create) | 201 | Created object with generated ID | | PUT (update) | 200 | Updated fields reflected | | DELETE | 204 or 200 | Subsequent GET returns 404 |
Negative Cases
| Test | Expected Status | Meaning | |------|----------------|---------| | No auth token | 401 | Unauthorized | | Invalid ID (e.g. 999999) | 404 | Not Found | | Invalid body (missing required field) | 400 | Bad Request | | Wrong HTTP method | 405 | Method Not Allowed |
Anti-Patterns
| Anti-Pattern | Why It's Bad | Solution |
|--------------|-------------|---------|
| Testing against production DB | Data corruption risk | Use test profile or Docker container |
| Hardcoding test credentials | Security risk, breaks across envs | Read from env/test config files |
| Skipping cleanup | Leftover processes and test data | Always kill PID, prefix data with smoke-test-* |
| Testing all endpoints | Scope creep, slow | Focus on recently implemented endpoints |
| Ignoring log errors | Hidden bugs slip through | Always check logs in Phase 7 |
| Retrying without fixing | Wastes iterations | Delegate fix before retrying |
Quick Troubleshooting
| Problem | Likely Cause | Solution |
|---------|-------------|---------|
| Health check timeout | App not started or wrong port | Check log file, verify port in config |
| 401 on all endpoints | JWT expired or wrong header format | Re-authenticate, check Authorization: Bearer format |
| Connection refused | Service not listening yet | Increase health check retry interval |
| 500 on POST | Missing required fields or DB constraint | Check DTO validation and entity defaults |
| Port already in use | Previous smoke test didn't cleanup | kill $(lsof -ti:PORT) then retry |
| Build fails on Windows | Maven wrapper not executable | Use mvnw.cmd instead of ./mvnw |
微信扫一扫