CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/pytest-api-testing

Pytest patterns for Python APIs -- httpx AsyncClient, conftest fixtures, database isolation, parametrize edge cases, error response testing, auth flows, factory fixtures

99

1.23x
Quality

99%

Does it follow best practices?

Impact

100%

1.23x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

test-order-api-edge-cases.jsonverifiers/

{
  "instruction": "Write pytest tests for a FastAPI order API with endpoints: POST /api/orders (create order), GET /api/orders/{id} (get order), PATCH /api/orders/{id}/status (update status). Orders have statuses: pending, confirmed, preparing, ready, delivered, cancelled. Test edge cases and validation thoroughly.",
  "relevant_when": "Agent writes tests for an API with state transitions or business logic edge cases",
  "context": "Proactively verify that agents use parametrize for edge cases, test invalid state transitions, and cover validation errors -- not just happy paths.",
  "sources": [
    {
      "type": "file",
      "filename": "skills/pytest-api-testing/SKILL.md",
      "tile": "tessl-labs/pytest-api-testing"
    }
  ],
  "checklist": [
    {
      "name": "httpx-async-client",
      "rule": "Tests use httpx.AsyncClient with ASGITransport to test the FastAPI app",
      "relevant_when": "Agent sets up a test client for FastAPI"
    },
    {
      "name": "uses-parametrize",
      "rule": "Tests use @pytest.mark.parametrize to test multiple input variations (e.g., multiple invalid payloads, multiple status transitions) rather than writing separate test functions for each case",
      "relevant_when": "Agent writes tests for multiple similar validation cases or edge cases"
    },
    {
      "name": "tests-invalid-status-transition",
      "rule": "At least one test verifies that an invalid status transition (e.g., pending -> delivered, cancelled -> preparing) returns an error status code, not 200",
      "relevant_when": "Agent writes tests for status update endpoints"
    },
    {
      "name": "tests-validation-errors",
      "rule": "Tests verify that creating an order with invalid data (empty body, missing required fields, invalid item references) returns 400 or 422 with an error response body",
      "relevant_when": "Agent writes tests for order creation"
    },
    {
      "name": "tests-nonexistent-resource",
      "rule": "At least one test verifies that GET or PATCH on a nonexistent order ID returns 404, not 500",
      "relevant_when": "Agent writes tests for endpoints that look up resources by ID"
    },
    {
      "name": "factory-fixture-for-orders",
      "rule": "Tests use a factory fixture or helper to create orders in a known state rather than repeating the full creation payload in every test",
      "relevant_when": "Agent writes multiple tests that need order test data"
    },
    {
      "name": "asserts-response-body",
      "rule": "Tests assert the response body content (e.g., verifying order status changed, error message present) not just the HTTP status code",
      "relevant_when": "Agent writes assertions for API responses"
    }
  ]
}

tile.json