Skip to main content

pytest-snowflake_bdd

PyPI version Python versions

Setup test data and run tests on snowflake in BDD style!


Features

Provides pytest-bdd step definitions for testing snow-sql scripts against a snowflake account.

Installation

You can install “pytest-snowflake_bdd” via pip.

$ pip install pytest-snowflake-bdd

Usage

This plugin relies on pytest-bdd to run bdd tests.

You can pass your snowflake account details using the cli arguments to pytest command.

custom options:
  --snowflake-user=SNOWFLAKE_USER
                        snowflake user for test environment
  --snowflake-password=SNOWFLAKE_PASSWORD
                        snowflake password for test environment
  --snowflake-account=SNOWFLAKE_ACCOUNT
                        snowflake password for test environment
  --snowflake-role=SNOWFLAKE_ROLE
                        optional snowflake role for test environment
  --snowflake-warehouse=SNOWFLAKE_WAREHOUSE
                        optional snowflake warehouse for test environment

Below example illustrates the usage of step definitions provided by the plugin.

Feature: ExampleFeature for snowflake testing

  Scenario: example_scenario
    Given a snowflake connection
    When a temporary called "SNOWFLAKE_LIQUIBASE.PUBLIC.DEPARTMENT" has
      | dept_id: INTEGER | dept_name: STRING      |
      | 1                | "Computer Science"     |
      | 2                | "Software Engineering" |
    When a temporary called "SNOWFLAKE_LIQUIBASE.PUBLIC.PEOPLE" has
      | people_id: INTEGER | name: STRING | dept_id: INTEGER |
      | 10                 | "tilak"      | 1                |
    Then a sql script "./sql/example.sql" runs and the result is
      | people_id: INTEGER | name: STRING | dept_id: INTEGER | dept_name: STRING  |
      | 10                 | "tilak"      | 1                | "Computer Science" |
  • dept_id: INTEGER. dept_id is the column name and INTEGER is the snowflake data type.

  • The step a temporary table called "<fully_qualified_table_name>" has

    Replaces the existing table with a temporary table. And adds data to the temporary table. This shadows the existing table in snowflake for the entire session. Any changes done to the temporary table does not reflect on the actual database. If the table does not exists creates a new temporary table.

  • The step Then a sql script "<sql_script_path>" runs and the result is This runs the sql script and compares the output with given dataframe.

Available Step definitions

Creating a new snowflake session

Given a snowflake connection

Setting up a temporary snowflake table for test

  • Replaces the existing table with a temporary table. And adds data to the temporary table. This shadows the existing table in snowflake for the entire session. Any changes done to the temporary table does not reflect on the actual database. If the table does not exists creates a new temporary table.

When a temporary called "SNOWFLAKE_LIQUIBASE.PUBLIC.DEPARTMENT" has
 | dept_id: INTEGER | dept_name: STRING      |
 | 1                | "Computer Science"     |
 | 2                | "Software Engineering" |

Setting up a snowflake table for test

  • Creates a normal table. Will fail if table already exists.

When a called "SNOWFLAKE_LIQUIBASE.PUBLIC.DEPARTMENT" has
 | dept_id: INTEGER | dept_name: STRING      |
 | 1                | "Computer Science"     |
 | 2                | "Software Engineering" |

Running a sql script and validating results

Then a sql script "./sql/example.sql" runs and the result is
  | people_id: INTEGER | name: STRING | dept_id: INTEGER | dept_name: STRING  |
  | 10                 | "tilak"      | 1                | "Computer Science" |

Representing null in table data

Use {null}

| people_id: INTEGER | name: STRING | dept_id: INTEGER | dept_name: STRING  |
| 10                 | "tilak"      | 1                | {null} |

Understanding data-type mismatch errors

For assertion of tables we are using pandas. Differences are shown in-terms of pandas dataframe.

Below snowflake to pandas type table can help in understanding the errors:

Snowflake datatype

Pandas datatype

BIGINT

int64

BINARY

bytes

BOOLEAN

bool

CHAR

str

CHARACTER

str

DATE

object

DATETIME

object

DEC

object

DECIMAL

object

DOUBLE

float64

FIXED

object

FLOAT

float64

INT

int64

INTEGER

int64

NUMBER

object

REAL

float64

BYTEINT

int64

SMALLINT

int64

STRING

str

TEXT

str

TIME

object

TIMESTAMP

object

TINYINT

int64

VARBINARY

bytes

VARCHAR

str

Contributing

Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.

License

Distributed under the terms of the MIT license, “pytest-snowflake_bdd” is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-snowflake_bdd-0.1.2.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_snowflake_bdd-0.1.2-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file pytest-snowflake_bdd-0.1.2.tar.gz.

File metadata

  • Download URL: pytest-snowflake_bdd-0.1.2.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pytest-snowflake_bdd-0.1.2.tar.gz
Algorithm Hash digest
SHA256 29892bc16c8cdf7383e19c87db55808fbebbd906feefcd3ced58c8ac56d76e35
MD5 aa6a916ee1c22dbc40fd14a3b47c9017
BLAKE2b-256 a11e35a7d08c560f7d1f3e19e1182d1f72b684867141231505f0af5aa5cffdb2

See more details on using hashes here.

File details

Details for the file pytest_snowflake_bdd-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pytest_snowflake_bdd-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.0 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.9

File hashes

Hashes for pytest_snowflake_bdd-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 eec17cb74b76f23d4e994f45a428021a8d24cd34249bdb4b71bfd10fb8a43b13
MD5 3ef43dd9f90afb37da7bd0246003864b
BLAKE2b-256 9d1195e1cdb8559001b30772b21aaea144b1e85237b165460dd6953190f57d0d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page