Unittest wrapper focused on making DB integrity tests
Project description
unit-db-test ·
Is your tool hard to debug? Would it be easier to check it at the DB level?
This module is for you! unit-db-test is a Python tool for conducting database tests. It is a unittest wrapper focussed on making DB integrity tests.
As it is an extension over the unittest.TestCase
it is easy to configure and easy to integrate with GitHub actions.
Features
- It has an integrated connection to a Postgres Database: easily configurable using the
.env
file. - Fully compatible with
SQLAlchemy
andPandas
: get apandas.Dataframe
out of any SQL query you want to test. - Unit-test oriented: Check if the
pandas.Dataframe
output matches the expected values, or catch it when the test fails.
Installation
You can install dbtests using pip:
pip install unit-db-test
Usage
Here's how you can use dbtests in your projects:
- Create a
./test
folder as with any other kind ofunittests
(it is in fact compatible with otherunittests
just make there is a connection to a Postgres DB), and create atest-file
.
my-tool/
├── my-tool/
│ ├── __init__.py
│ ├── script_1.py
└── tests/
├── __init__.py
└── test_script_1.py
- Once the script is created, we need to import the dependencies:
# test_script_1.py
# Dependencies
import unittest
from unit_db_test.testcase import DBintegrityTest
- Create a
DBintegrityTest
as if it was aunittest.TestCase
. It is important to define the path to the.env
that keeps the Postgres DB credentials:
class TestDBTestModule(DBintegrityTest):
db_config_file = '.postgresql.env'
- Create as many
test
functions as pleased:
def test_not_null_items_in_column(self):
# the query that SHOULDN'T create an assertion
sql_query = """
SELECT
id
FROM test_table;
"""
df = self.db.get_df_from_sql_query(sql_query)
self.assertNotNullItemsInColumn(df, 'id')
if __name__ == '__main__':
unittest.main()
- Run it as you please:
python -m unittest tests/test_script_1.py
The tests can be run locally or integrated with Github Actions. For more examples, please check:
Custom Assert
The dbtest module contemplates new assert functions over pandas.Dataframe
objects.
This way the result of a simple query can be easily checked with the standard unittest
nomenclature.
The list of current Asserts is the following:
- assertNotNullItemsInColumn(self, df, column)
- assertCustomNullItemsInColumn(self, df, column, target)
- assertNoRows(self, df)
- assertNRows(self, df, target_rows)
There will be more to come (under demand most probably). Feel free to suggest new ones though!
Contributing
If you want to contribute to this project, please follow these guidelines:
- Fork the repository
- Create a new branch
- Make your changes
- Submit a pull request
- Bugs and Issues
If you encounter any bugs or issues, please report them here.
Contact
Author: Mikel Cortes (@cortze)
Feel free to reach out if you have any questions or suggestions!
License
This project is licensed under the MIT License - see the LICENSE file for details.
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
File details
Details for the file unit-db-test-0.1.13.tar.gz
.
File metadata
- Download URL: unit-db-test-0.1.13.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9b7ad7f8ffaebc67d0153a6be042a76cd4491f907abde9c7ed71626bf7b85f8d |
|
MD5 | cf6767b2d42620a168d71a54340f28a0 |
|
BLAKE2b-256 | 982ba439d2e7ca954472f14838cc4287da5df1a56df35aabd93106481571b2bd |
File details
Details for the file unit_db_test-0.1.13-py3-none-any.whl
.
File metadata
- Download URL: unit_db_test-0.1.13-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 233c9f13c6daf7a3fd105c2fd24b1aa7c232db33155ac28c4de210bd1a7f2709 |
|
MD5 | 3bebad8e6f0405750df81a5fdea669a6 |
|
BLAKE2b-256 | 0bfd5fb311416f2762c7a4684b80b5e9bb82db94f2b48f59789527082e8bca10 |