Skip to main content

sqltest

pypi python codecov main pre-commit.ci status Downloads License Package Status codestyle Imports: isort

The sqltest framework makes it easy to write test cases for testing complicated ETL processing logic. What you need to do is prepare your source & target dataset with CSV format or Excel format, and also prepare your ETL SQLs.

Installing

Install and update using pip

$ pip install sqltest

An Simple Example

  1. Prepare your ETL SQL file, for example: spark_etl_demo.sql.
  2. Prepare your source dataset and target dataset, refer Dataset preparation check more detail.
  3. Write your test cases follow by the below examples.
    def test_excel_data_source_demo(self):
        environments = {
            "env": "dev",
            "target_data_path": f"{PROJECT_PATH}/tests/data/tables",
        }

        reader = ExcelDatasetReader(
            data_path=f"{PROJECT_PATH}/tests/data/cases/spark_etl_sql_test_excel_demo/spark_etl_demo.xlsx"
        )
        sql_file_path = f"{PROJECT_PATH}/tests/data/cases/spark_etl_sql_test_excel_demo/spark_etl_demo.sql"

        engine = SparkEngine(SPARK, environments)
        engine.run(reader, sql_file_path)
        engine.verify_target_dataset()

    @excel_reader(
        data_path=f"{PROJECT_PATH}/tests/data/cases/spark_etl_sql_test_excel_demo/spark_etl_demo.xlsx"
    )
    @spark_engine(
        spark=SPARK,
        sql_path=f"{PROJECT_PATH}/tests/data/cases/spark_etl_sql_test_excel_demo/spark_etl_demo.sql",
        env={"env": "dev", "target_data_path": f"{PROJECT_PATH}/tests/data/tables"},
    )
    def test_excel_with_decorate(self, reader: DatasetReader, engine: SqlEngine):
        engine.verify_target_dataset()

    @spark_engine(
        spark=SPARK,
        sql_path=f"{PROJECT_PATH}/tests/data/cases/spark_etl_sql_test_excel_demo/spark_etl_demo.sql",
        reader=ExcelDatasetReader(
            f"{PROJECT_PATH}/tests/data/cases/spark_etl_sql_test_excel_demo/spark_etl_demo.xlsx"
        ),
        env={"env": "dev", "target_data_path": f"{PROJECT_PATH}/tests/data/tables"},
    )
    def test_excel_with_engine_decorate(self, engine: SqlEngine):
        engine.verify_target_dataset()
  1. Run you test cases.

Dataset Preparation

Currently, we also support two kinds of dataset reader, and we need to follow specific pattern to prepare source data and target data.

CSV Dataset Reader

  1. There will be a source and a target folder under specific dataset folder, click spark_etl_sql_test_csv_demo to check the example detail.
  2. Under source or target, you can create your source/target datasets defined in ETL SQL file, each dataset stands for a table, and we will used the csv file name as the table name, so please double check if the file name is match with table name in the SQL file.
  3. Read dataset, there are two kinds of use scenarios
  • Creating a reader object to read dataset by CsvDatasetReader(data_path="{dataset_folder}")
  • Using an annotation @csv_reader based on test function
@csv_reader(data_path="{dataset_folder}")
def test_case(reader: DatasetReader):
    pass

Excel Dataset Reader

  1. Different with CSV Dataset Reader, there is only one excel file which will include source datasets and target datasets.
  2. Within the Excel file, each sheet stands for a table, the sheet whose name starts with source-- stands for source dataset/table, target-- stands for target dataset/table. Different with CSV file, we are not use sheet name as the table name, because Excel has length limitation of sheet name, so we store the table name in the first row & first column, click spark_etl_demo.xlsx to get more detail.
  3. There also two kinds of use scenarios to read data
  • Creating a reader object to read dataset by ExcelDatasetReader(data_path="{excel_file_path}")
  • Using an annotation @csv_reader based on test function
@excel_reader(data_path="{excel_file_path}")
def test_case(reader: DatasetReader):
    pass

SQL Engine

Currently, we only support spark engine, we have plan to support other SQL engine, e.g. Flink.

Bugs/Requests

Please use the GitHub issue tracker to submit bugs or request features.

Metadata

Release files for sqltest 0.0.14

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

Source distribution (sdist)

Source distribution for sqltest 0.0.14
File Size Uploaded Provenance Actions
sqltest-0.0.14.tar.gz 12.0 kB Without provenance Details for sqltest-0.0.14.tar.gz

Built distribution (wheel)

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

Total release size: 27.4 kB

Release files / sqltest-0.0.14.tar.gz

Download URL sqltest-0.0.14.tar.gz
Size 12.0 kB
Tags Source
SHA-256 checksum
How to use checksums
4f3f27648ad5fa2231933b29b318aed052912940102c36cbe947b2a1f7d57352
BLAKE2b-256 checksum
How to use checksums
556b092f7026cc65492c188ab154059b54ea689c56315029fe763f2c89253c0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.3

Release files / sqltest-0.0.14-py3-none-any.whl

Download URL sqltest-0.0.14-py3-none-any.whl
Size 15.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7d2e889a78c8f22778f7b3d72ac7c661523964b030e882b24207d008f8cd8551
BLAKE2b-256 checksum
How to use checksums
a7720f21c9a157e85b91d28579eb6fa141f14fc43ce5e457d9f03cf0d57819ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.3

Security for sqltest 0.0.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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