modelscope.cn

FastAPI Testing

This skill should be used when the user asks about "testing FastAPI", "FastAPI tests", "API testing", "test FastAPI endpoints", "mock FastAPI dependencies", "TestClient", "async API tests

Installation

$ npx skills add https://modelscope.cn

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from modelscope.cn · top by installs.

npx skills add https://modelscope.cn

Browse all from modelscope.cn

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Skill metadata

Parsed from SKILL.md frontmatter.

Version1.0.0

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 3,062 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

FastAPI Testing

Patterns for testing FastAPI applications.

Core Concepts

Test Clients

Client Use Case Async Support
TestClient Sync tests (most cases) No
AsyncClient (httpx) Async endpoints, lifespan events Yes

Key concept: TestClient wraps the ASGI app - no server needed.


Dependency Override Pattern

FastAPI's killer feature for testing: replace any dependency.

How it works:

  1. Define test version of dependency
  2. Add to app.dependencyoverrides[original] = testversion
  3. Run tests
  4. Clear overrides after test

Common overrides:

  • Database session → test database or mock
  • Auth/current user → test user or bypassed auth
  • External services → mocked responses

Test Patterns

CRUD Testing Checklist

Operation Happy Path Error Cases
Create Returns 201, correct data 400 validation, 409 duplicate
Read Returns 200, correct data 404 not found
Update Returns 200, updated data 404, 400 validation
Delete Returns 204 404 not found

Validation Testing

Use parametrize for boundary conditions:

  • Valid inputs → expected success
  • Invalid email format → 422
  • Missing required fields → 422
  • Too short/long values → 422

Database Testing Strategies

Strategy Pros Cons
In-memory SQLite Fast, isolated Different from prod DB
Test database Realistic Slower, needs setup
Transactions + rollback Fast, realistic Complex setup
Mocked repository Fastest Less integration coverage

Key concept: Use function-scoped fixtures to ensure test isolation.


Project Structure

tests/
├── conftest.py       # Shared fixtures (client, db, auth)
├── test_users.py     # Endpoint tests
├── test_auth.py      # Auth-specific tests
└── factories/        # Test data factories

Common Pitfalls

Pitfall Solution
Shared state between tests Use function-scoped fixtures
Forgetting to clear overrides Use fixture with cleanup
Testing implementation not behavior Focus on HTTP responses
Missing async marks Add @pytest.mark.asyncio
SQLite vs Postgres differences Use same DB type for important tests

Quick Reference

Test client fixture pattern: Create client, set overrides, yield, clear overrides

Protected endpoint testing: Override getcurrentuser dependency

File upload testing: Use files={"file": (name, content, mimetype)}

Resources