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
.envfile. - Fully compatible with
SQLAlchemyandPandas: get apandas.Dataframeout of any SQL query you want to test. - Unit-test oriented: Check if the
pandas.Dataframeoutput 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
./testfolder as with any other kind ofunittests(it is in fact compatible with otherunittestsjust 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
DBintegrityTestas if it was aunittest.TestCase. It is important to define the path to the.envthat keeps the Postgres DB credentials:
class TestDBTestModule(DBintegrityTest):
db_config_file = '.postgresql.env'
- Create as many
testfunctions 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
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 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
|