partest
Methodology-driven API (and optional UI) autotest harness for Python, with OpenAPI coverage that measures whether the right test cases exist — not just whether an endpoint was called.
pip install partest
pip install 'partest[ui]' # + Playwright and Pillow for UI suites
What you get
ApiClient— async HTTP for suites: JSON, form, files, rawcontent=, multi-status expectations, GraphQL, and rich status-mismatch errors.- Coverage by methodology — every operation is classified into a method subtype, and each subtype has a required set of test cases. The report tells you which cases are missing.
partest-gen— scaffold a runnable pytest monorepo suite straight from an OpenAPI file.- Reporting —
check_*helpers, Allure steps and attaches (Allure is a soft dependency), interactive HTML coverage,coverage.json, compare / badge / stub CLI. - Auth, tracking, security — OIDC
TokenManagerwith injected credentials, created-resource tracking with LIFO cleanup,SecHttpraw transport, JWT tampering sets,RiskProfile. - UI extra —
BasePage,PageMonitor, storage helpers, visual comparison, baseline capture.
A first test
from partest import ApiClient, TypesTestCases
from partest.zorro_report import zorro
types = TypesTestCases
async def test_get_item(api_client):
"""Item is returned by id."""
await api_client.make_request(
"GET",
"/items/{id}",
add_url1="/1",
defining_url="/items/{id}", # OpenAPI template — this is what coverage matches
expected_status_code=200,
validate_model=ItemValidation,
type=types.request_default, # explicit type beats inference
)
def test_zorro():
report = zorro() # Allure summary + coverage HTML
# report.endpoints[*].missing_p1 → your backlog for the next test cases
Scaffold a whole suite
partest-gen from-openapi ./my-suite --file openapi.yaml --depth p1 --with-ui
partest-gen sync-openapi ./my-suite --depth p1 # after the spec changes
--depth resources emits paths and collections, default adds payloads, validators and the
first tests, p1 adds the full priority-one stub matrix plus a checklist per tag.
Documentation
Source, issues and the full documentation wiki: https://github.com/Dec01/partest
The user-facing pages also ship inside the package, so they are readable next to your installed copy without a trip to the browser:
python -m partest.docs list # what is available
python -m partest.docs show howto-quickstart # read a page
python -m partest.docs path # where the files live
Included: quickstart, migration notes, the coverage methodology, permissions, upload testing, reporting, security, UI, recipes, layers, and enterprise notes (shared client, retries, redaction, xdist). The decisions behind them — why coverage is scored this way, what stays in your project — live in the repository, not the wheel.
Or from Python:
from partest.docs import list_docs, read_doc
print(read_doc("concepts-methodology.md"))
Requirements
Python 3.9+. Core dependencies: httpx, pydantic, pyyaml, pytest, pytest-asyncio,
allure-pytest, requests, python-dotenv, Faker, matplotlib. The ui extra adds
playwright and Pillow.
The bundled pytest plugin loads automatically and enriches Allure titles. Turn it off with
PARTEST_PYTEST_PLUGIN=0, pytest_plugin = False in confpartest.py, or pytest -p no:partest
if your project already owns Allure hooks.
License
MIT.
Release files for partest 1.7.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| partest-1.7.1.tar.gz | 215.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| partest-1.7.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 470.5 kB
Release files / partest-1.7.1.tar.gz
| Download URL | partest-1.7.1.tar.gz |
|---|---|
| Size | 215.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5bdad812f1fb9905e7f00bd3e0d674e91f8152e73858caee234b1e956de8347
|
|
BLAKE2b-256 checksum How to use checksums |
e7c08bf92feff34aa3fb4fb8224ebb6c5d2c53c3f252bde925c5146855e53083
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.11
|
Release files / partest-1.7.1-py3-none-any.whl
| Download URL | partest-1.7.1-py3-none-any.whl |
|---|---|
| Size | 255.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
62bd55fd308e0d2fb089c9a73402edf3e1aea90ab0610dfe2b60ad39c73f5b48
|
|
BLAKE2b-256 checksum How to use checksums |
603ad231d137d1f482a41e9398298077aa98ff787309303327b77cefb072ea99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.11
|