A library to facilitate the testing of data inside data pipelines. Results are pushed to a messaging queue of some sort for consumption by applications, persistence, etc.
Project description
dtest
A library to facilitate the testing of data inside data pipelines. Results are pushed to a messaging queue of some sort for consumption by applications, persistence, etc.
Supported messaging queues / streaming platforms
- RabbitMQ
- MQTT
- Redis
- Kafka
- Kinesis
Supported secrets managers
- AWS Secrets Manager
- Hashicorp Vault
Installation
pip3 install dtest-framework
Unit Tests
Testing is set up using Pytest
Install Pytest with pip3 install -U pytest
Run the tests with pytest in the root directory.
Quick Start
from dtest.dtest import Dtest
from hamcrest import *
# If publishing to a RabbitMQ queue, specify 'queue' \
# If publishing to a key-value store, specify 'kv-store' \
# Or specify both
connectionConfig = {
"queue": {
"host": "localhost",
"username": "guest",
"password": "guest",
"exchange": "test.dtest",
"exchange_type": "fanout"
},
"kv-store": {
"api_url": "localhost:8080/api/",
"retrieve_path": "getKeyValue/",
"publish_path": "postKeyValue/"
}
}
metadata = {
"description": "This is a test of the assertCondition",
"topic": "test.dtest",
"ruleSet": "Testing some random data",
"dataSet": "random_data_set_123912731.csv"
}
dt = Dtest(connectionConfig, metadata)
dsQubert = [0,1]
dt.assert_that(dsQubert, has_length(2))
// True
dt.publish()
// Publishes test suite to MQ server
////////////////////////////////////////
// Store value in KV store for later use
dt.publishKeyValue('some-descriptor-dsQubert-length', len(dqQubert))
// Retrieve value from KV store to compare other files against
count = dt.retrieveKeyValue('some-descriptor-dsQubert-length')
dt.assert_that(dsQubert, has_length(count))
Connection configuration
There are two options for providing the connection configuration for the publisher - the default way described above and by storing your configuration in a secrets manager. To utilize a secrets manager, use a connectionConfig similar to:
connectionConfig = {
"queue": {
"vault": {
"provider": "aws_secrets_manager",
"secret_name": "secret_name_here",
"region": "us-east-1"
}
}
}
Here we are giving the provider name aws_secrets_manager, the key to use to retrieve the secret secret_name, and the region in which Secrets Manager is hosted. secret_name and region are passed to boto3 directly. region_name is provided when initializing the boto3 session and secret_name is provided to the boto3.secretsmanager.get_secret_value() function as SecretId.
Custom handlers
It is possible to create custom message queue and key value store handlers. Implement a class that inherits from dtest.handler.MqHandler or dtest.handler.KvHandler depending on your needs.
class MqHandler:
@classmethod
def version(self): return "1.0"
@abstractmethod
def connect(self): raise NotImplementedError
@abstractmethod
def publishResults(self): raise NotImplementedError
@abstractmethod
def closeConnection(self): raise NotImplementedError
class KvHandler:
@classmethod
def version(self): return "1.0"
@abstractmethod
def retrieve(self): raise NotImplementedError
@abstractmethod
def publish(self): raise NotImplementedError
Package dependencies
I did not want to require that all dependencies of every module need to be installed. As such, the following packages need to be installed via pip if you would like to utilize the specified functionality
| Package | Dependent module/functionality |
|---|---|
| pandas | Local testing with pytest |
CI/CD
- Use the standard
ecslabeled Jenkins agent - Performs tests on master commits and PRs
- Does not deploy to PyPI automatically
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 dtest-framework-0.1.23.tar.gz.
File metadata
- Download URL: dtest-framework-0.1.23.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59b073ed1cdbd96112c0a50385cf0389e411649e8c33bd579c615f124ffaab93
|
|
| MD5 |
51d7b58b77d7480056b345cd7df390d3
|
|
| BLAKE2b-256 |
af5396296b69a9e8104f2ef05121469fcdce14c2e6ca2e5e2295ad51c6d87561
|
File details
Details for the file dtest_framework-0.1.23-py3-none-any.whl.
File metadata
- Download URL: dtest_framework-0.1.23-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17bf678f56b53ef479b1921e883fbe9ff9d9f6d5e7d18a63d9c4eb6ca2fff085
|
|
| MD5 |
9f707d0ef659c3f0d32de655923475a5
|
|
| BLAKE2b-256 |
f803d871cc6925d7459be429db721c1b607a918b06668de27aea8a6a3aae9c9b
|