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
ecs
labeled 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
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 |