Allows a test to spot-check various values of a JSON object
Project description
json-verifier
json-verifier is a package which allows a test to spot-check various values of a JSON object.
Installation
pip install json-verifier
Why do We Need It?
Let's pretend that we are testing an API, which returns a JSON object such as:
{
"metadata": {
"name": "sandbox",
"tags": ["scratch", "pre-production", "experimental"]
}
}
Let say we need to check a few things:
- The name must be "staging"
- The description must be "Team sandbox"
- The first tag must be "testing"
- The fourth tag must be "non-production"
A typical test then would look like this:
def test_api():
actual = call_api()
assert actual["metadata"]["name"] == "staging"
assert actual["metadata"]["description"] == "Team sandbox"
assert actual["metadata"]["tags"][0] == "testing"
assert actual["metadata"]["tags"][3] == "non-production"
While this test works, it contains a couple of issues:
- We want to check for all issues, but the above will stop at the first assertion failure and will not test the rest
- Notice that the actual value does not contain a "description" value. That means the expression
actual["metadata"]["description"]will generate aKeyErrorexception - Likewise, the expression
actual["metadata"]["tags"][3]will generate anIndexErrorexception - It would be nice to be able to shorthand the keys, especially when dealing with a deeply nested JSON object
json-verifier is looking to address these issues. Consider the following test:
from json_verifier import JsonVerifier
def test_api(verifier):
actual = call_api()
with JsonVerifier(actual) as verifier:
verifier.verify_value("metadata.name", "staging")
verifier.verify_value("metadata.description", "Team sandbox")
verifier.verify_value("metadata.tags.0", "testing")
verifier.verify_value("metadata.tags.3", "non-production")
Here is a sample pytest output:
AssertionError: Verify JSON failed
Object:
{
"metadata": {
"name": "sandbox",
"tags": [
"scratch",
"pre-production",
"experimental"
]
}
}
Errors:
- path='metadata.name', expected='staging', actual='sandbox'
/home/user/workspace/test_api.py(11) in test_api()
verifier.verify_value("metadata.name", "staging")
- path='metadata.description', expected='Team sandbox', key error: 'description'
/home/user/workspace/test_api.py(12) in test_api()
verifier.verify_value("metadata.description", "Team sandbox")
- path='metadata.tags.0', expected='testing', actual='scratch'
/home/user/workspace/test_api.py(13) in test_api()
verifier.verify_value("metadata.tags.0", "testing")
- path='metadata.tags.3', expected='non-production', index error: 3
/home/user/workspace/test_api.py(14) in test_api()
verifier.verify_value("metadata.tags.3", "non-production")
This output shows some important information:
1. A formatted dump of the object under test
2. A list of errors. Each complete with filename, line number, the function, the offending line, and why test failed
Usage
For additional usage tips, see usage.md
License
json-verifier is distributed under the terms of the MIT license.
Project details
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 json_verifier-0.6.1.tar.gz.
File metadata
- Download URL: json_verifier-0.6.1.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cac4bc093cbeffdde704118c808e512326b5d15f94c51b646f5e7bb266db5fb
|
|
| MD5 |
9f60d25f67e61715f6eb06e088563a66
|
|
| BLAKE2b-256 |
5bcc80e845ecb775f1f24307853807598169bf0ccf51ec95187226aae13eac29
|
File details
Details for the file json_verifier-0.6.1-py3-none-any.whl.
File metadata
- Download URL: json_verifier-0.6.1-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbf4c4fa9e4beff945c5e46a87555c6ae9bc096d74098274fa3352c513e4de15
|
|
| MD5 |
927c9e7f942213a396dc4d957ddcaa25
|
|
| BLAKE2b-256 |
4505166368a2d091afb5b5ee8d189a35b796c26f5a4b97a02636815885ae13c4
|