How is TestGen different from dbt tests or Great Expectations?

dbt tests and Great Expectations' GX Core have you write every check yourself, in YAML, SQL, or Python. DataOps TestGen profiles your tables on 55 column characteristics first, then generates tests from 34 test types plus freshness, volume, and schema monitors, with a web UI and scorecards. DataKitchen estimates generation covers about 80 percent of the tests you need.

Key points

  • dbt ships four built-in generic tests (unique, not_null, accepted_values, relationships), and every test past those is written by hand in YAML or SQL, model by model.
  • Great Expectations' GX Core is a Python library: you define each expectation yourself, and it has no auto-generated tests and no quality scoring, per DataKitchen's comparison reviewed June 11, 2026.
  • As of October 2026, DataOps TestGen profiles every column on 55 characteristics, runs 32 hygiene detectors, and generates tests from 34 test types, with 19 more test types you configure by hand for business rules.
  • DataKitchen estimates TestGen generates about 80 percent of the tests a data team needs; its June 2026 Medallion testing post counts about 5,000 tests for three layers, and hand-writing half of them at 30 minutes each takes 1,250 hours.
  • Generated tests check consistency, not correctness: in DataKitchen's August 2026 NYC taxi run, a generated minimum-fare test set its floor at negative $367, so a person still had to write the rule that fares are never negative.

The difference is the order of operations. dbt and Great Expectations start with you: you decide what could break, then write a test for it. TestGen starts with the data. It profiles every column, and the tests come out of what it finds.

That sounds like a small distinction until you count.

Three tools, side by side

dbt rows come from DataKitchen’s Microsoft data quality review, which covers dbt jobs; the two cells marked “DataKitchen’s reading” are our description, not dbt’s documentation. GX Core rows come from the TestGen vs GX OSS comparison, reviewed June 11, 2026. TestGen rows come from the product page, as of October 2026. We sell TestGen, so check the TestGen column against your own install.

dbt testsGX CoreDataOps TestGen
Who writes each testYou, in YAML or SQL, per modelYou, as Python expectationsGenerated from a profile; you add business rules
Starting setFour built-in generic tests: unique, not_null, accepted_values, relationshipsExpectations you choose and configure34 generated test types, 32 hygiene detectors, 19 configurable test types
Profiles the data firstNot part of dbt’s built-in tests (DataKitchen’s reading)Profiling, but tests aren’t generated from itYes, 55 characteristics per column
Anomaly monitorsNot built in; packages such as Elementary, now owned by Boomi, add themRule-basedFreshness, volume, schema, and custom metric monitors that learn from history
Where results liveRun artifacts; the tests sit in git next to the models (DataKitchen’s reading)Wherever you send them: you wire up the runner and build the dashboardWeb UI with test results, scorecards, and a catalog
Stops a pipelineYes: dbt build halts the downstream modelWhen you wire it into the pipelineRuns on a schedule or on demand
Best atGating the models you ownChecks as code next to a pipeline stepCoverage across many tables

The second row is the one that matters. A starting set of four tests is a vocabulary. A starting set of 34 generated types, applied to every column the profile finds, is coverage.

Why the order of operations matters

dbt and GX Core assume you can anticipate every failure. Usually you can’t, and when you can, you don’t have time to type it. DataKitchen’s Medallion testing post does the arithmetic. A three-layer Medallion needs about 5,000 tests. Hand-writing just half of them at 30 minutes each is 1,250 hours, or about 7.2 months of a senior engineer doing nothing else. So the keys get tested and the rest waits.

The argument for generating 80 percent is that dbt, GX, and Soda Core are all domain-specific languages. They make each test faster to write. Every test still starts as code. TestGen’s answer is to skip the writing for the mechanical checks (nulls, ranges, lengths, patterns, uniqueness) and put a UI in front of the results, so a data steward who doesn’t write Python can review them.

Where dbt and GX Core still win

dbt’s tests live in git, get code review, and stop a bad model from building. TestGen doesn’t replace that gate. Keep it, and point TestGen at the same database. When dbt tests are enough covers the cases where you need nothing else.

GX Core wins when your checks belong in Python next to the step they guard, and when you have several engineers and no budget. GX Core software costs $0 at any team size. Open-source TestGen is free for one user, one connection, and one project; a second user needs Enterprise at $100 per user and $100 per connection per month, per the pricing page. TestGen or Great Expectations has that head-to-head, including how GX Cloud shut down on June 1, 2026.

What generated tests can’t do

They learn the data in front of them, including what’s normally wrong. In DataKitchen’s NYC taxi run, 62 generated tests passed on a 300,000-row sample. The minimum-fare test had set its floor at negative $367, the lowest fare present. Somebody has to write the rule that a fare is never negative. Can AI write your data quality tests covers what happened when an AI drafted those rules and they ran on the full month.

So the honest split is 80 and 20. Generation writes the 80. The 20 is business logic, and in dbt, GX, or TestGen, that part is yours.

Frequently asked questions

Short answers to the follow-up questions people ask next.

Does TestGen replace dbt tests?

No. Keep your dbt tests as the gate inside dbt build, where a failed test stops the model downstream of it. DataOps TestGen connects to the same database, profiles the tables dbt builds, and generates tests and monitors that run as SQL there. The two cover different ground: dbt guards the models you wrote tests for, and TestGen covers the columns nobody had time to write tests for.

Do I need to write YAML or Python to use TestGen?

No. DataOps TestGen generates tests from a profile of your data and manages them in a web UI, so the baseline needs no YAML, Python, or SQL. You write SQL only for business rules, through custom conditions such as shipped quantity never exceeding ordered quantity or full custom SQL queries. dbt tests are written in YAML and SQL, and Great Expectations' GX Core in Python.

Does Great Expectations have a UI or scorecards?

No. GX Cloud, the hosted product with the UI, shut down on June 1, 2026. GX Core, the Apache 2.0 library that continues under Fivetran, is Python you assemble into a system, and DataKitchen's comparison reviewed June 11, 2026 lists it with no data quality scoring. DataOps TestGen ships a profiling UI, test results, quality scorecards, and a data catalog in its open-source edition.

What does TestGen still need a person for?

Business rules. Generated tests learn what your data already looks like, including what is normally wrong. In DataKitchen's August 2026 NYC taxi run, 62 generated tests passed on a 300,000-row sample because the minimum-fare floor calibrated to negative $367. The rule that a fare is never negative came from outside the profile. DataKitchen puts that hand-written share at about 20 percent.

Try it on your own data

DataOps TestGen is free and open source. Profile a table and generate its tests this afternoon.