Asynchronously make and validate requests!
Project description
Quickbolt
Asynchronously make and validate requests!
This was forked from api-automation-tools.
Table of contents
Installation
$ pip install quickbolt
Usage
Pytest
The CorePytestBase loads json files from credentials and data folders during setup. Validations and reporting are performed during the teardown.
Async requests with aiohttp or httpx
Make single or batched style async requests using aiohttp or httpx. Each request method call will generate a csv containing useful data about the request(s). The usual request arguments of aiohttp and httpx are supported.
There's a nifty function called generate_batch that'll intake valid (200 type) request information and return a list of corruptions for execution.
from quickbolt.clients import AioRequests, HttpxRequests
aiohttp_requests = AioRequests()
httpx_requests = HttpxRequests()
batch = {'method': 'get', 'headers': {...}, 'url': '...'}
response = aiohttp_requests.request(batch)
response = httpx_requests.request(batch)
or
batch = [{'method': 'get', 'headers': {...}, 'url': '...'}, {...}, ...]
responses = aiohttp_requests.request(batch)
responses = httpx_requests.request(batch)
or
from quickbolt.batch_generation import generate_batch
batch = generate_batch("get", ...)
responses = aiohttp_requests.request(batch)
responses = httpx_requests.request(batch)
Note: Both clients have an awaitable request method called async_request e.g. await aiohttp_requests.async_request(...) or await httpx_requests.async_request(...).
Note: You can indicate where the batch generator will start looking for path parameters by placing a semicolon (;) where the path parameters start (before a /) e.g. https://httpbin.org/get;/param/value.
Async calls with grpc
Make single or batched style async calls using grpc. Each call method call will generate a csv containing useful data about the call(s).
See here for a quick tutorial on the mechanics of making grpc calls.
from quickbolt.clients import AioGPRC
from tests.client.gprc.servers import helloworld_pb2, helloworld_pb2_grpc
aio_grpc = AioGPRC()
options = {
"address": "localhost:50051", # the address of the server
"stub": helloworld_pb2_grpc.GreeterStub, # the stub class reference of the service
"method": "SayHello", # the service method to call
"method_args": helloworld_pb2.HelloRequest(name="Quickbolt"), # the args the service method accepts
}
responses = await pytest.aio_grpc.call(options)
Note: Generate batch is not supported for async grpc calls.
Validations
After each request, a scrubbed copy of the csv history of the execution will be generated. This file (or the original) can be used to validate against executions over time. These files will have the same name as the running test, just with the csv extenstion instead. Any mismatches can be raised as errors and are reported in a separate csv. Historical csv files to be used as reference can be stored in a validations folder at the root level.
from quickbolt.validations import Validations
...requests were made and csv files were generated...
validations = Validations()
mismatches = await validations.validate_references(actual_refs={...})
mismatches =>
[
{
"values": [{"key": "ACTUAL_CODE", "d1": "404", "d2": "999"}, ...],
"keys": [...],
"skipped_keys": [...],
"actual_refs": {...},
"expected_refs": {...},
"unscrubbed_refs": {...},
},
{...},
]
Examples
An example of a test - test_get.py
An example of a base class showing a setup and teardown - some_pytest_base.py
An example of the scrubbed csv report file generated from running the test - get_scrubbed.csv
Project structure
This package requires the following base structure for the project.
.
├── credentials # Optional - credentials
│ └── credentials.json # Optional - credentials as json
├── tests # Required - test files
│ ├── data # Optional - test data
│ │ └── data.json # Optional - test data as json
│ └── test_some_request.py # Required - pytest test
└── validations # Optional - validation data
└── some_request.json # Optional - validation data as json. the validation files
directory structure must match the structure of the tests in the tests folder.
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
File details
Details for the file quickbolt-0.4.1.tar.gz
.
File metadata
- Download URL: quickbolt-0.4.1.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/6.6.12-linuxkit
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 058af1881e63f30d5e7842317f89b7c744ff15464b61931c9eb426e4be00a5eb |
|
MD5 | 7393c67a3cbedeafbd570b84f268850b |
|
BLAKE2b-256 | 60ead33dc950155de31a199059c88b6ebcb901637c1a757229812fddbf63652c |
File details
Details for the file quickbolt-0.4.1-py3-none-any.whl
.
File metadata
- Download URL: quickbolt-0.4.1-py3-none-any.whl
- Upload date:
- Size: 29.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.11.8 Linux/6.6.12-linuxkit
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ad9a5362bf93c16b6e0f6b81bbafa8007dea405959d1cc695d16b15c5748ebbd |
|
MD5 | 63f01f6245c22304964e28127052da46 |
|
BLAKE2b-256 | 6d0f9081b584545c7600b371ae67b49986a7d94a8cba5822a0285a2e2f09f04a |