Skip to main content

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.

Metadata

Release files for quickbolt 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quickbolt 0.4.3
File Size Uploaded
quickbolt-0.4.3.tar.gz 22.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for quickbolt 0.4.3
File Interpreter ABI Platform
quickbolt-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 52.0 kB

Release files / quickbolt-0.4.3.tar.gz

Download URL quickbolt-0.4.3.tar.gz
Size 22.7 kB
Tags Source
SHA-256 checksum
How to use checksums
f3978fc8eeae85924c4c22e88ffc4f8b11f1abc9610422cb754ed33e5818e66a
BLAKE2b-256 checksum
How to use checksums
f973b14ba40ec3c18e4b4d06c6fc71ec63f1662a11bc850067bdd6c5359458a1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.2.1 CPython/3.14.0 Linux/6.10.14-linuxkit

Release files / quickbolt-0.4.3-py3-none-any.whl

Download URL quickbolt-0.4.3-py3-none-any.whl
Size 29.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
040f1f5e209ef678d1bb2edbbb0123b522f349e64e7adf3c49bb9e5ca70f103d
BLAKE2b-256 checksum
How to use checksums
8da5e110841a377e8a7fd1b11ee465a68d49e02c373d63a264e5f164c9b5a817
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.2.1 CPython/3.14.0 Linux/6.10.14-linuxkit

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page