Agent skill
testing
Backend testing strategies and test automation. Unit, integration, E2E, and load testing with best practices.
Install this agent skill to your Project
npx add-skill https://github.com/pluginagentmarketplace/custom-plugin-backend/tree/main/skills/testing
SKILL.md
Testing Skill
Bonded to: testing-security-agent (Secondary)
Quick Start
# Invoke testing skill
"Write unit tests for my user service"
"Set up integration tests with database"
"Configure load testing with k6"
Testing Pyramid
/\
/E2E\ Few, slow, expensive
/────\
/Integration\ Some, medium speed
/────────────\
/ Unit Tests \ Many, fast, cheap
/────────────────\
| Type | Coverage | Speed | Cost |
|---|---|---|---|
| Unit | 80%+ | Fast | Low |
| Integration | 60%+ | Medium | Medium |
| E2E | Critical paths | Slow | High |
Examples
Unit Test (pytest)
import pytest
from unittest.mock import Mock
from app.services.user_service import UserService
class TestUserService:
@pytest.fixture
def service(self):
return UserService(db=Mock())
def test_get_user_returns_user(self, service):
service.db.get_user.return_value = {"id": 1, "name": "John"}
result = service.get_user(1)
assert result["name"] == "John"
service.db.get_user.assert_called_once_with(1)
def test_get_user_raises_when_not_found(self, service):
service.db.get_user.return_value = None
with pytest.raises(UserNotFoundError):
service.get_user(999)
Integration Test
import pytest
from fastapi.testclient import TestClient
from app.main import app
from app.database import get_db
@pytest.fixture
def client(test_db):
def override_get_db():
return test_db
app.dependency_overrides[get_db] = override_get_db
with TestClient(app) as c:
yield c
def test_create_and_get_user(client):
# Create user
response = client.post("/users", json={"email": "test@example.com"})
assert response.status_code == 201
user_id = response.json()["id"]
# Get user
response = client.get(f"/users/{user_id}")
assert response.status_code == 200
assert response.json()["email"] == "test@example.com"
Load Test (k6)
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '30s', target: 100 },
{ duration: '1m', target: 100 },
{ duration: '30s', target: 0 },
],
thresholds: {
http_req_duration: ['p(95)<200'],
http_req_failed: ['rate<0.01'],
},
};
export default function () {
const res = http.get('http://localhost:8000/api/v1/users');
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 200ms': (r) => r.timings.duration < 200,
});
sleep(1);
}
Troubleshooting
| Issue | Cause | Solution |
|---|---|---|
| Flaky tests | Race conditions | Use mocks, fix async |
| Slow suite | Too many E2E | Optimize pyramid |
| Low coverage | Untested edges | Add boundary tests |
Resources
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
languages
Master programming languages for backend development. Learn language selection, fundamentals, and ecosystem for JavaScript, Python, Go, Java, C#, PHP, Ruby, and Rust.
api-design
Design and build professional APIs with REST, GraphQL, and gRPC. Master authentication, documentation, testing, and operational concerns.
architecture
Master architectural design with SOLID principles, design patterns, microservices, and event-driven systems. Learn to design scalable backend systems.
devops
Deploy applications with Docker and Kubernetes, automate with CI/CD, manage infrastructure with code, and configure cloud platforms and networking.
databases
Master relational and NoSQL databases. Learn PostgreSQL, MySQL, MongoDB, Redis, and other technologies for data persistence, optimization, and scaling.
messaging
Message queues and event-driven backend architecture. RabbitMQ, Kafka, pub/sub patterns, and async communication.
Didn't find tool you were looking for?