This tutorial demonstrates how deepchecks can be used inside unit tests performed on data or model, with the pytest framework. We will use the diabetes dataset from scikit-learn, and check whether certain columns contain drift between the training and the test sets.

import pytest
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split

from deepchecks import Dataset
from deepchecks.tabular.checks import TrainTestFeatureDrift
from deepchecks.tabular.suites import data_integrity

Defining Pytest Fixtures#

pytest fixtures provide a defined, reliable and consistent context for the tests. This could include environment (for example a database configured with known parameters) or content (such as a dataset). In this tutorial we will define a fixture that load the diabetes dataset from scikit-learn.

def diabetes_df():
    diabetes = load_diabetes(return_X_y=False, as_frame=True).frame
    return diabetes

Implementing the Test#

Now, we will implement a test that will check if some columns in the dataset have drifted between the train and test datasets. the test sets.

def test_diabetes_drift(diabetes_df):
    train_df, test_df = train_test_split(diabetes_df, test_size=0.33, random_state=42)
    train = Dataset(train_df, label='target', cat_features=['sex'])
    test = Dataset(test_df, label='target', cat_features=['sex'])

    check = TrainTestFeatureDrift(columns=['age', 'sex', 'bmi'])

    result =, test)

    assert result.passed_conditions()

Please note the passed_conditions() method of the deepchecks.core.CheckResult object. This method will return True if all the conditions are met, and False otherwise.

It’s possible to evaluate the result of a suite of checks, and to get the overall result of the test, by using the deepchecks.core.SuiteResult.passed() method.

def test_diabetes_integrity(diabetes_df):
    ds = Dataset(diabetes_df, label='target', cat_features=['sex'])

    suite = data_integrity()
    result =

    assert result.passed(fail_if_warning=True, fail_if_check_not_run=False)