Vedro Spec Validator plugin
Project description
vedro-spec-validator is a Vedro plugin that allows to validate mocks via OpenAPI spec/docs.
Version Compatibility Notice
- For versions of this package 0.1.0 and later, only version 2 of the
d42package is compatible.
Installation
Quick
For a quick installation, you can use a plugin manager as follows:
$ vedro plugin install vedro-spec-validator
Manual
To install manually, follow these steps:
- Install the package using pip:
$ pip3 install vedro-spec-validator
- Next, activate the plugin in your
vedro.cfg.pyconfiguration file:
# ./vedro.cfg.py
import vedro
import vedro_spec_validator
class Config(vedro.Config):
class Plugins(vedro.Config.Plugins):
class SpecValidator(vedro_spec_validator.SpecValidator):
enabled = True
Usage
Decorate your mocked function with @validate_spec(), providing a link to a YAML or JSON OpenAPI spec.
import jj
from jj.mock import mocked
from vedro_spec_validator import validate_spec
@validate_spec(spec_link="http://example.com/api/users/spec.yml")
async def your_mocked_function():
matcher = jj.match("GET", "/users")
response = jj.Response(status=200, json=[])
mock = await mocked(matcher, response)
Keys
- The
is_strictkey allows you to choose between strict and non-strict comparison. Non-strict comparison (Falseby default) allows you to mock only some fields from the spec, even if they are required. Strict validation (True) requires you to mock all required fields from the spec.
Example OpenAPI spec with required fields:
openapi: 3.0.0
paths:
/user:
get:
...
properties:
user_name:
type: string
email:
type: string
age:
type: integer
required:
- user_name
- email
- age
With is_strict=True:
from vedro_spec_validator import validate_spec
@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_strict=True)
async def your_mocked_function():
matcher = jj.match("GET", "/user")
payload = {
"user_name": "Foo",
"email": "test@test.com",
"age": 30 # All required fields from the spec must be present
}
response = jj.Response(json=payload)
return await mocked(matcher, response)
With is_strict=False:
from vedro_spec_validator import validate_spec
@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_strict=False)
async def your_mocked_function():
matcher = jj.match("GET", "/user")
payload = {
"user_name": "Foo" # Required fields like "email" and "age" can be omitted
}
response = jj.Response(json=payload)
return await mocked(matcher, response)
- The
prefixkey allows you to specify a path prefix that should be removed from the mock function's paths before they are matched against the OpenAPI spec.
from vedro_spec_validator import validate_spec
@validate_spec(spec_link="http://example.com/api/users/spec.yml", prefix='/__mocked_api__') # Goes to validate `/user` instead of `/__mocked_api__/user`
async def your_mocked_function():
matcher = jj.match("GET", "/__mocked_api__/user")
# The prefix is removed, so the actual path matched against the OpenAPI spec is `/user`
...
- The
is_raise_errorkey allows you to control whether an error should be raised when a validation mismatch occurs. By default (False), no exception is raised, but mismatches will be logged to a file.
With is_raise_error=False:
from vedro_spec_validator import validate_spec
@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_raise_error=False)
async def your_mocked_function():
...
Output will be written to a file:
# /spec_validator/validation_results/your_mocked_function/scenarios/path/to/test/test_scenario.py.txt
subject: scenario subject
valera.ValidationException
- ... # missmatches
With is_raise_error=True:
from vedro_spec_validator import validate_spec
@validate_spec(spec_link="http://example.com/api/users/spec.yml", is_raise_error=True)
async def your_mocked_function():
...
An exception will be raised on the first validation error, causing the test to fail with the following trace:
ValidationException: There are some mismatches in your_mocked_function:
valera.ValidationException
- ... # missmatches
# --seed ...
# 1 scenario, 0 passed, 1 failed, 0 skipped (2.35s)
Process finished with exit code 1
- The
force_strictkey enforces strict validation against the OpenAPI spec, treating all fields as required, even if they are marked as optional in the spec. This is useful in cases where the specification accidentally marks all fields as optional.Falseby default.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vedro_spec_validator-0.1.12.tar.gz.
File metadata
- Download URL: vedro_spec_validator-0.1.12.tar.gz
- Upload date:
- Size: 24.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90ea9052e28a3f37f3e8d9d3ac1dfec2f295c3efd4123190d2082f1263e08f4c
|
|
| MD5 |
51fef4dfb160a731a516d4987f8022ca
|
|
| BLAKE2b-256 |
f829eec76b8a7583d4b48e0647d1fc7d54102bc0061b034ee9912ee86ebc13af
|
File details
Details for the file vedro_spec_validator-0.1.12-py3-none-any.whl.
File metadata
- Download URL: vedro_spec_validator-0.1.12-py3-none-any.whl
- Upload date:
- Size: 29.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c71ef73d52b5741068575c631fc180136217c528db96423f85672b024e045c1e
|
|
| MD5 |
ed54a003e37c945dc841bd70bfaf1560
|
|
| BLAKE2b-256 |
7fb1d0b8916f37819d362a596324df07958aa58ff149f2f997bd1384e6e28d7b
|