Test Suite¶
Collections of test cases for tables or logical groupings
Overview¶
The TestSuite entity represents a set of test cases grouped together to capture data quality tests against data entities. Test suites can be basic (attached to a specific entity like a table) or logical (custom groupings across multiple entities). Test suites enable batch execution, monitoring, and management of related data quality tests.
Relationship Diagram¶
graph TD
%% Main entity - Executable Test Suite
TS[TestSuite<br/>customers.testSuite<br/>Type: Executable]
%% Attached to table
TBL[Table<br/>customers] -->|has test suite| TS
%% Database hierarchy
SVC[DatabaseService<br/>postgres_prod] -->|contains| DB[Database<br/>ecommerce]
DB -->|contains| SCH[Schema<br/>public]
SCH -->|contains| TBL
TBL -->|has| COL1[Column<br/>email]
TBL -->|has| COL2[Column<br/>created_at]
%% Test cases in suite
TS -->|contains| TC1[TestCase<br/>row_count_check]
TS -->|contains| TC2[TestCase<br/>email_unique_check]
TS -->|contains| TC3[TestCase<br/>created_at_not_null]
TS -->|contains| TC4[TestCase<br/>customer_id_unique]
TS -->|contains| TC5[TestCase<br/>status_valid_values]
%% Test cases test entities
TC1 -.->|tests| TBL
TC2 -.->|tests| COL1
TC3 -.->|tests| COL2
TC4 -.->|tests| COL3[Column<br/>customer_id]
TC5 -.->|tests| COL4[Column<br/>status]
%% Test definitions
TD1[TestDefinition<br/>tableRowCountToBeBetween] -->|template for| TC1
TD2[TestDefinition<br/>columnValuesToBeUnique] -->|template for| TC2
TD3[TestDefinition<br/>columnValuesToBeNotNull] -->|template for| TC3
%% Test results and summary
TS -->|has summary| SUM[Summary<br/>Success: 8<br/>Failed: 1<br/>Total: 9]
TC1 -->|latest result| RES1[Result: Success]
TC2 -->|latest result| RES2[Result: Failed]
TC3 -->|latest result| RES3[Result: Success]
%% Execution and scheduling
SCHEDULE[Schedule<br/>Daily 2 AM UTC] -.->|executes| TS
PIPE[Pipeline<br/>data_quality_check] -.->|runs| TS
%% Governance
OWNER[Team<br/>DataQuality] -.->|owns| TS
DOM[Domain<br/>Sales] -.->|groups| TS
%% Logical test suite example
TS2[TestSuite<br/>critical_pii_tests<br/>Type: Logical]
TS2 -->|contains| TC6[TestCase<br/>customers_email_unique]
TS2 -->|contains| TC7[TestCase<br/>profiles_phone_format]
TS2 -->|contains| TC8[TestCase<br/>addresses_not_null]
TC6 -.->|tests| COL1
TC7 -.->|tests| COL5[Column<br/>customer_profiles.phone]
TC8 -.->|tests| COL6[Column<br/>customer_addresses.address]
%% Cross-table logical grouping
TBL2[Table<br/>customer_profiles] -->|column| COL5
TBL3[Table<br/>customer_addresses] -->|column| COL6
%% Alerts
RES2 -.->|triggers| ALERT[Alert<br/>Email duplicates found]
ALERT -.->|notifies| OWNER
%% Styling
classDef suite fill:#EF4444,stroke:#DC2626,color:#fff
classDef testcase fill:#DC2626,stroke:#B91C1C,color:#fff
classDef definition fill:#8B5CF6,stroke:#7C3AED,color:#fff
classDef data fill:#2563EB,stroke:#1E40AF,color:#fff
classDef result fill:#F59E0B,stroke:#D97706,color:#fff
classDef governance fill:#059669,stroke:#047857,color:#fff
classDef execution fill:#0891B2,stroke:#0E7490,color:#fff
class TS,TS2 suite
class TC1,TC2,TC3,TC4,TC5,TC6,TC7,TC8 testcase
class TD1,TD2,TD3 definition
class SVC,DB,SCH,TBL,TBL2,TBL3,COL1,COL2,COL3,COL4,COL5,COL6 data
class RES1,RES2,RES3,SUM result
class OWNER,DOM governance
class SCHEDULE,PIPE,ALERT execution Schema Specifications¶
View the complete TestSuite schema in your preferred format:
Complete JSON Schema Definition
{
"$id": "https://open-metadata.org/schema/tests/testSuite.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "TestSuite",
"description": "TestSuite is a set of test cases grouped together to capture data quality tests against data entities.",
"type": "object",
"javaType": "org.openmetadata.schema.tests.TestSuite",
"javaInterfaces": [
"org.openmetadata.schema.ServiceEntityInterface"
],
"definitions": {
"testSuiteConnection": {
"type": "object",
"javaInterfaces": [
"org.openmetadata.schema.ServiceConnectionEntityInterface"
],
"properties": {
"config": {
"type": "null"
}
},
"resultSummary": {
"javaType": "org.openmetadata.schema.tests.ResultSummary",
"properties": {
"testCaseName": {
"description": "Name of the test case.",
"$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
},
"status": {
"description": "Status of the test case.",
"$ref": "./basic.json#/definitions/testCaseStatus"
},
"timestamp": {
"description": "Timestamp of the test case execution.",
"$ref": "../type/basic.json#/definitions/timestamp"
}
}
}
}
},
"properties": {
"id": {
"description": "Unique identifier of this test suite instance.",
"$ref": "../type/basic.json#/definitions/uuid"
},
"name": {
"description": "Name that identifies this test suite.",
"$ref": "../api/tests/createTestSuite.json#/definitions/testSuiteEntityName"
},
"displayName": {
"description": "Display Name that identifies this test suite.",
"type": "string"
},
"fullyQualifiedName": {
"description": "FullyQualifiedName same as `name`.",
"$ref": "../type/basic.json#/definitions/fullyQualifiedEntityName"
},
"description": {
"description": "Description of the test suite.",
"$ref": "../type/basic.json#/definitions/markdown"
},
"tests": {
"type": "array",
"items": {
"$ref": "../type/entityReference.json"
},
"default": null
},
"connection": {
"description": "TestSuite mock connection, since it needs to implement a Service.",
"$ref": "#/definitions/testSuiteConnection"
},
"testConnectionResult": {
"description": "Result of the test connection.",
"$ref": "../entity/services/connections/testConnectionResult.json"
},
"pipelines": {
"description": "References to pipelines deployed for this Test Suite to execute the tests.",
"$ref": "../type/entityReferenceList.json",
"default": null
},
"serviceType": {
"description": "Type of database service such as MySQL, BigQuery, Snowflake, Redshift, Postgres...",
"javaInterfaces": [
"org.openmetadata.schema.EnumInterface"
],
"type": "string",
"enum": [
"TestSuite"
],
"default": "TestSuite"
},
"owners": {
"description": "Owners of this TestCase definition.",
"$ref": "../type/entityReferenceList.json",
"default": null
},
"version": {
"description": "Metadata version of the entity.",
"$ref": "../type/entityHistory.json#/definitions/entityVersion"
},
"updatedAt": {
"description": "Last update time corresponding to the new version of the entity in Unix epoch time milliseconds.",
"$ref": "../type/basic.json#/definitions/timestamp"
},
"updatedBy": {
"description": "User who made the update.",
"type": "string"
},
"href": {
"description": "Link to the resource corresponding to this entity.",
"$ref": "../type/basic.json#/definitions/href"
},
"changeDescription": {
"description": "Change that lead to this version of the entity.",
"$ref": "../type/entityHistory.json#/definitions/changeDescription"
},
"incrementalChangeDescription": {
"description": "Change that lead to this version of the entity.",
"$ref": "../type/entityHistory.json#/definitions/changeDescription"
},
"deleted": {
"description": "When `true` indicates the entity has been soft deleted.",
"type": "boolean",
"default": false
},
"basic": {
"description": "Indicates if the test suite is basic, i.e., the parent suite of a test and linked to an entity. Set on the backend.",
"type": "boolean",
"default": false
},
"executable": {
"description": "DEPRECATED in 1.6.2: Use 'basic'",
"type": "boolean",
"deprecated": true
},
"basicEntityReference": {
"description": "Entity reference the test suite needs to execute the test against. Only applicable if the test suite is basic.",
"$ref": "../type/entityReference.json"
},
"executableEntityReference": {
"description": "DEPRECATED in 1.6.2: Use 'basicEntityReference'.",
"$ref": "../type/entityReference.json",
"deprecated": true
},
"dataContract": {
"description": "Reference to the data contract that this test suite is associated with.",
"$ref": "../type/entityReference.json",
"default": null
},
"summary": {
"description": "Summary of the previous day test cases execution for this test suite.",
"$ref": "./basic.json#/definitions/testSummary"
},
"testCaseResultSummary": {
"description": "Summary of test case execution",
"type": "array",
"items": {
"$ref": "#/definitions/testSuiteConnection/resultSummary"
}
},
"domains": {
"description": "Domains the test Suite belongs to. When not set, the test Suite inherits the domain from the table it belongs to.",
"$ref": "../type/entityReferenceList.json"
},
"tags": {
"description": "Tags for this test suite. This is an inherited field from the parent entity if the testSuite is native.",
"type": "array",
"items": {
"$ref": "../type/tagLabel.json"
},
"default": []
},
"inherited": {
"description": "Indicates if the test suite is inherited from a parent entity.",
"type": "boolean",
"default": false
},
"ingestionRunner": {
"description": "Link to the ingestion pipeline that ingested this entity.",
"$ref": "../type/entityReference.json"
},
"reviewers": {
"description": "List of reviewers for this entity.",
"$ref": "../type/entityReferenceList.json",
"default": null
}
},
"required": [
"name"
],
"additionalProperties": false
}
RDF/OWL Ontology Definition
@prefix om: <https://open-metadata.org/schema/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
# TestSuite Class Definition
om:TestSuite a owl:Class ;
rdfs:subClassOf om:ServiceEntity ;
rdfs:label "TestSuite" ;
rdfs:comment "TestSuite is a set of test cases grouped together to capture data quality tests against data entities." ;
om:hierarchyLevel 3 .
# Properties
om:testSuiteName a owl:DatatypeProperty ;
rdfs:domain om:TestSuite ;
rdfs:range xsd:string ;
rdfs:label "name" ;
rdfs:comment "Name that identifies this test suite" .
om:testSuiteDisplayName a owl:DatatypeProperty ;
rdfs:domain om:TestSuite ;
rdfs:range xsd:string ;
rdfs:label "displayName" ;
rdfs:comment "Display name that identifies this test suite" .
om:isBasicTestSuite a owl:DatatypeProperty ;
rdfs:domain om:TestSuite ;
rdfs:range xsd:boolean ;
rdfs:label "basic" ;
rdfs:comment "Indicates if the test suite is basic, i.e., the parent suite of a test and linked to an entity" .
om:appliedToEntity a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:Entity ;
rdfs:label "basicEntityReference" ;
rdfs:comment "Entity reference the test suite needs to execute the test against. Only applicable if the test suite is basic" .
om:containsTestCase a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:TestCase ;
rdfs:label "tests" ;
rdfs:comment "Test cases in this suite" .
om:hasTestSummary a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:TestSummary ;
rdfs:label "summary" ;
rdfs:comment "Summary of the previous day test cases execution for this test suite" .
om:hasOwners a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:EntityReferenceList ;
rdfs:label "owners" ;
rdfs:comment "Owners of this TestSuite definition" .
om:belongsToDomains a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:EntityReferenceList ;
rdfs:label "domains" ;
rdfs:comment "Domains the test Suite belongs to. When not set, the test Suite inherits the domain from the table it belongs to" .
om:hasDataContract a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:DataContract ;
rdfs:label "dataContract" ;
rdfs:comment "Reference to the data contract that this test suite is associated with" .
om:hasReviewers a owl:ObjectProperty ;
rdfs:domain om:TestSuite ;
rdfs:range om:EntityReferenceList ;
rdfs:label "reviewers" ;
rdfs:comment "List of reviewers for this entity" .
om:isInherited a owl:DatatypeProperty ;
rdfs:domain om:TestSuite ;
rdfs:range xsd:boolean ;
rdfs:label "inherited" ;
rdfs:comment "Indicates if the test suite is inherited from a parent entity" .
# Example Instance
ex:customersTestSuite a om:TestSuite ;
om:testSuiteName "customers.testSuite" ;
om:testSuiteDisplayName "Customers Table Test Suite" ;
om:isBasicTestSuite true ;
om:appliedToEntity ex:customersTable ;
om:containsTestCase ex:rowCountTest ;
om:containsTestCase ex:emailUniqueTest ;
om:containsTestCase ex:createdAtNotNullTest ;
om:hasTestSummary ex:latestSummary ;
om:hasOwners ex:dataQualityTeamList ;
om:belongsToDomains ex:salesDomainList .
ex:latestSummary a om:TestSummary ;
om:success 8 ;
om:failed 1 ;
om:aborted 0 ;
om:queued 0 ;
om:total 9 .
JSON-LD Context and Example
{
"@context": {
"@vocab": "https://open-metadata.org/schema/",
"om": "https://open-metadata.org/schema/",
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
"xsd": "http://www.w3.org/2001/XMLSchema#",
"TestSuite": "om:TestSuite",
"name": {
"@id": "om:testSuiteName",
"@type": "xsd:string"
},
"fullyQualifiedName": {
"@id": "om:fullyQualifiedName",
"@type": "xsd:string"
},
"displayName": {
"@id": "om:testSuiteDisplayName",
"@type": "xsd:string"
},
"description": {
"@id": "om:description",
"@type": "xsd:string"
},
"basic": {
"@id": "om:isBasicTestSuite",
"@type": "xsd:boolean"
},
"basicEntityReference": {
"@id": "om:appliedToEntity",
"@type": "@id"
},
"tests": {
"@id": "om:containsTestCase",
"@type": "@id",
"@container": "@set"
},
"summary": {
"@id": "om:hasTestSummary",
"@type": "@id"
},
"owners": {
"@id": "om:hasOwners",
"@type": "@id",
"@container": "@set"
},
"domains": {
"@id": "om:belongsToDomains",
"@type": "@id",
"@container": "@set"
},
"dataContract": {
"@id": "om:hasDataContract",
"@type": "@id"
},
"reviewers": {
"@id": "om:hasReviewers",
"@type": "@id",
"@container": "@set"
},
"inherited": {
"@id": "om:isInherited",
"@type": "xsd:boolean"
}
}
}
Example JSON-LD Instance:
{
"@context": "https://open-metadata.org/context/testSuite.jsonld",
"@type": "TestSuite",
"@id": "https://example.com/testSuites/customers_suite",
"name": "customers.testSuite",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers.testSuite",
"displayName": "Customers Table Test Suite",
"description": "Data quality tests for the customers master table",
"basic": true,
"basicEntityReference": {
"@id": "https://example.com/data/tables/customers",
"@type": "Table",
"name": "customers",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers"
},
"tests": [
{
"@id": "https://example.com/testCases/customers_row_count",
"@type": "TestCase",
"name": "customers_row_count_check"
},
{
"@id": "https://example.com/testCases/email_unique",
"@type": "TestCase",
"name": "email_unique_check"
}
],
"summary": {
"success": 8,
"failed": 1,
"aborted": 0,
"queued": 0,
"total": 9
},
"owners": [
{
"@id": "https://example.com/teams/data-quality",
"@type": "Team",
"name": "data-quality"
}
],
"domains": [
{
"@id": "https://example.com/domains/sales",
"@type": "Domain",
"name": "Sales"
}
]
}
Use Cases¶
- Group all quality tests for a specific table
- Create custom test collections (e.g., "Critical PII Tests", "Hourly Validation Suite")
- Execute tests in batch
- Monitor test suite health and trends
- Track test success rates over time
- Manage test dependencies and execution order
- Set up automated test scheduling
- Generate test execution reports
JSON Schema Specification¶
Core Properties¶
id (uuid)¶
Type: string (UUID format) Required: Yes (system-generated) Description: Unique identifier for this test suite
name (entityName)¶
Type: string Required: Yes Pattern: ^[^.]*$ (no dots allowed in the name component) Description: Name of the test suite (convention: <tablename>.testSuite for executable suites)
fullyQualifiedName (fullyQualifiedEntityName)¶
Type: string Required: Yes (system-generated) Description: Fully qualified name
displayName¶
Type: string Required: No Description: Human-readable display name
description (markdown)¶
Type: string (Markdown format) Required: No Description: Description of the test suite's purpose
{
"description": "# Customers Table Data Quality Suite\n\nComprehensive data quality tests for the customers master table.\n\n## Test Categories\n- Schema validation\n- Data integrity\n- Business rules\n- PII compliance"
}
Test Suite Configuration Properties¶
basic (boolean)¶
Type: boolean Required: No (system-managed, default: false) Description: Indicates if the test suite is basic, i.e., the parent suite of a test and linked to an entity. Set on the backend.
Note: The executable property is deprecated in version 1.6.2. Use basic instead.
basicEntityReference (EntityReference)¶
Type: object Required: No (for basic test suites) Description: Entity reference the test suite needs to execute the test against. Only applicable if the test suite is basic.
{
"basicEntityReference": {
"id": "8f6a9c7e-3b2d-4a1f-9e5c-6d8b4f2a1e9c",
"type": "table",
"name": "customers",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers"
}
}
Note: The executableEntityReference property is deprecated in version 1.6.2. Use basicEntityReference instead.
tests[] (EntityReference[])¶
Type: array of EntityReference objects Required: No Description: Test cases in this suite
{
"tests": [
{
"id": "f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c",
"type": "testCase",
"name": "customers_row_count_check",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers.testSuite.customers_row_count_check"
},
{
"id": "a7b8c9d0-e1f2-4a3b-4c5d-6e7f8a9b0c1d",
"type": "testCase",
"name": "email_unique_check",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers.testSuite.email_unique_check"
},
{
"id": "b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e",
"type": "testCase",
"name": "created_at_not_null",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers.testSuite.created_at_not_null"
}
]
}
Results Properties¶
summary (TestSummary)¶
Type: object Required: No (populated after execution) Description: Summary of the previous day test cases execution for this test suite
TestSummary Object Properties:
| Property | Type | Description |
|---|---|---|
success | integer | Number of test cases that passed |
failed | integer | Number of test cases that failed |
aborted | integer | Number of test cases that aborted |
queued | integer | Number of test cases that are queued for execution |
total | integer | Total number of test cases |
Governance Properties¶
owners (EntityReferenceList)¶
Type: array of EntityReference objects Required: No (default: null) Description: Owners of this TestSuite definition
{
"owners": [
{
"id": "d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a",
"type": "team",
"name": "data-quality",
"displayName": "Data Quality Team"
},
{
"id": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
"type": "user",
"name": "john.doe"
}
]
}
domains (EntityReferenceList)¶
Type: array of EntityReference objects Required: No Description: Domains the test Suite belongs to. When not set, the test Suite inherits the domain from the table it belongs to.
{
"domains": [
{
"id": "e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b",
"type": "domain",
"name": "Sales",
"fullyQualifiedName": "Sales"
}
]
}
dataContract (EntityReference)¶
Type: object Required: No (default: null) Description: Reference to the data contract that this test suite is associated with
{
"dataContract": {
"id": "f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c",
"type": "dataContract",
"name": "customer_data_contract",
"fullyQualifiedName": "customer_data_contract"
}
}
reviewers (EntityReferenceList)¶
Type: array of EntityReference objects Required: No (default: null) Description: List of reviewers for this entity
{
"reviewers": [
{
"id": "a7b8c9d0-e1f2-4a3b-4c5d-6e7f8a9b0c1d",
"type": "user",
"name": "jane.smith",
"displayName": "Jane Smith"
}
]
}
tags (array)¶
Type: array of TagLabel objects Required: No (default: []) Description: Tags for this test suite. This is an inherited field from the parent entity if the testSuite is native.
inherited (boolean)¶
Type: boolean Required: No (default: false) Description: Indicates if the test suite is inherited from a parent entity
Versioning and System Properties¶
version (entityVersion)¶
Type: number Required: No (system-managed) Description: Metadata version of the entity
updatedAt (timestamp)¶
Type: number (Unix epoch time milliseconds) Required: No (system-managed) Description: Last update time corresponding to the new version of the entity
updatedBy (string)¶
Type: string Required: No (system-managed) Description: User who made the update
href (href)¶
Type: string (URI) Required: No (system-generated) Description: Link to the resource corresponding to this entity
changeDescription (changeDescription)¶
Type: object Required: No (system-managed) Description: Change that lead to this version of the entity
{
"changeDescription": {
"fieldsAdded": [],
"fieldsUpdated": [
{
"name": "description",
"oldValue": "Old description",
"newValue": "New description"
}
],
"fieldsDeleted": [],
"previousVersion": 1.1
}
}
deleted (boolean)¶
Type: boolean Required: No (default: false) Description: When true indicates the entity has been soft deleted
Service Properties¶
serviceType (enum)¶
Type: string enum Required: No (default: "TestSuite") Allowed Values: TestSuite Description: Type of database service such as MySQL, BigQuery, Snowflake, Redshift, Postgres...
connection (testSuiteConnection)¶
Type: object Required: No Description: TestSuite mock connection, since it needs to implement a Service
pipelines (EntityReferenceList)¶
Type: array of EntityReference objects Required: No (default: null) Description: References to pipelines deployed for this Test Suite to execute the tests
{
"pipelines": [
{
"id": "b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e",
"type": "pipeline",
"name": "test_suite_pipeline",
"fullyQualifiedName": "test_suite_pipeline"
}
]
}
testCaseResultSummary (array)¶
Type: array of ResultSummary objects Required: No Description: Summary of test case execution
{
"testCaseResultSummary": [
{
"testCaseName": "customers_row_count_check",
"status": "Success",
"timestamp": 1704240000000
}
]
}
ingestionRunner (EntityReference)¶
Type: object Required: No Description: Link to the ingestion pipeline that ingested this entity
{
"ingestionRunner": {
"id": "c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f",
"type": "ingestionPipeline",
"name": "test_ingestion_pipeline"
}
}
Complete Examples¶
Basic Test Suite (Table-Specific)¶
{
"id": "e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b",
"name": "customers.testSuite",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers.testSuite",
"displayName": "Customers Table Test Suite",
"description": "Data quality tests for the customers master table",
"basic": true,
"basicEntityReference": {
"id": "8f6a9c7e-3b2d-4a1f-9e5c-6d8b4f2a1e9c",
"type": "table",
"name": "customers",
"fullyQualifiedName": "postgres_prod.ecommerce.public.customers"
},
"tests": [
{
"id": "f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c",
"type": "testCase",
"name": "customers_row_count_check"
},
{
"id": "a7b8c9d0-e1f2-4a3b-4c5d-6e7f8a9b0c1d",
"type": "testCase",
"name": "email_unique_check"
},
{
"id": "b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e",
"type": "testCase",
"name": "created_at_not_null"
}
],
"summary": {
"success": 8,
"failed": 1,
"aborted": 0,
"queued": 0,
"total": 9
},
"owners": [
{
"id": "d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a",
"type": "team",
"name": "data-quality"
}
],
"domains": [
{
"id": "e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b",
"type": "domain",
"name": "Sales"
}
],
"serviceType": "TestSuite",
"version": 1.2
}
Logical Test Suite (Custom Grouping)¶
{
"id": "f7a8b9c0-d1e2-4f3a-4b5c-6d7e8f9a0b1c",
"name": "critical_customer_pii_tests",
"fullyQualifiedName": "critical_customer_pii_tests",
"displayName": "Critical Customer PII Tests",
"description": "# Critical PII Validation Suite\n\nHigh-priority tests for customer personally identifiable information across all customer-related tables.\n\n## Scope\n- Email validation\n- Phone number format\n- Address completeness\n- SSN encryption\n\n## SLA\n- Must pass 100% daily\n- Failures trigger immediate alerts",
"basic": false,
"tests": [
{
"id": "test-1-uuid",
"type": "testCase",
"name": "customers_email_unique"
},
{
"id": "test-2-uuid",
"type": "testCase",
"name": "customers_email_format_valid"
},
{
"id": "test-3-uuid",
"type": "testCase",
"name": "customer_profiles_phone_format"
},
{
"id": "test-4-uuid",
"type": "testCase",
"name": "customer_addresses_not_null"
},
{
"id": "test-5-uuid",
"type": "testCase",
"name": "sensitive_data_ssn_encrypted"
}
],
"summary": {
"success": 5,
"failed": 0,
"aborted": 0,
"queued": 0,
"total": 5
},
"owners": [
{
"id": "team-uuid",
"type": "team",
"name": "compliance-team",
"displayName": "Compliance Team"
}
],
"domains": [
{
"id": "domain-uuid",
"type": "domain",
"name": "CustomerData"
}
],
"tags": [
{
"tagFQN": "PII.Sensitive",
"labelType": "Manual",
"state": "Confirmed"
}
],
"serviceType": "TestSuite",
"version": 1.0
}
Test Suite with Comprehensive Summary¶
{
"id": "g8b9c0d1-e2f3-4a4b-5c6d-7e8f9a0b1c2d",
"name": "orders.testSuite",
"fullyQualifiedName": "postgres_prod.ecommerce.public.orders.testSuite",
"displayName": "Orders Table Test Suite",
"description": "Comprehensive data quality tests for the orders table",
"basic": true,
"basicEntityReference": {
"id": "orders-table-uuid",
"type": "table",
"name": "orders",
"fullyQualifiedName": "postgres_prod.ecommerce.public.orders"
},
"tests": [
{
"id": "test-uuid-1",
"type": "testCase",
"name": "order_id_unique"
},
{
"id": "test-uuid-2",
"type": "testCase",
"name": "order_total_positive"
},
{
"id": "test-uuid-3",
"type": "testCase",
"name": "order_date_not_future"
},
{
"id": "test-uuid-4",
"type": "testCase",
"name": "customer_id_foreign_key_valid"
},
{
"id": "test-uuid-5",
"type": "testCase",
"name": "order_status_valid_values"
}
],
"summary": {
"success": 4,
"failed": 1,
"aborted": 0,
"queued": 0,
"total": 5
},
"serviceType": "TestSuite",
"inherited": false,
"version": 1.0
}
RDF Representation¶
Instance Example¶
@prefix om: <https://open-metadata.org/schema/> .
@prefix ex: <https://example.com/data/> .
ex:customersTestSuite a om:TestSuite ;
om:testSuiteName "customers.testSuite" ;
om:fullyQualifiedName "postgres_prod.ecommerce.public.customers.testSuite" ;
om:testSuiteDisplayName "Customers Table Test Suite" ;
om:isBasicTestSuite true ;
om:appliedToEntity ex:customersTable ;
om:containsTestCase ex:rowCountTest ;
om:containsTestCase ex:emailUniqueTest ;
om:containsTestCase ex:createdAtNotNullTest ;
om:hasTestSummary [
om:success 8 ;
om:failed 1 ;
om:aborted 0 ;
om:queued 0 ;
om:total 9
] ;
om:hasOwners ex:dataQualityTeamList ;
om:belongsToDomains ex:salesDomainList ;
om:isInherited false .
Relationships¶
Parent Entities¶
- Table (or other entities): The entity this basic test suite is attached to (via
basicEntityReference)
Child Entities¶
- TestCase: Test cases in this suite
Associated Entities¶
- Owners: Users or teams owning this suite
- Domains: Business domain assignments
- DataContract: Data contract association
- Reviewers: Users reviewing this suite
- Pipelines: Pipeline references for test execution
- IngestionRunner: Ingestion pipeline that created this entity
Custom Properties¶
This entity supports custom properties through the extension field. Common custom properties include:
- Data Classification: Sensitivity level
- Cost Center: Billing allocation
- Retention Period: Data retention requirements
- Application Owner: Owning application/team
See Custom Properties for details on defining and using custom properties.
API Operations¶
Create Test Suite¶
Basic Test Suite (auto-created with table):
POST /api/v1/testSuites
Content-Type: application/json
{
"name": "customers.testSuite",
"basicEntityReference": "postgres_prod.ecommerce.public.customers"
}
Logical Test Suite:
POST /api/v1/testSuites
Content-Type: application/json
{
"name": "critical_pii_tests",
"displayName": "Critical PII Tests",
"description": "High-priority PII validation tests"
}
Get Test Suite¶
GET /api/v1/testSuites/name/postgres_prod.ecommerce.public.customers.testSuite?fields=tests,summary,owners,domains
Add Test Case to Suite¶
PUT /api/v1/testSuites/{id}/tests
Content-Type: application/json
{
"testCaseId": "f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c"
}
Execute Test Suite¶
Get Test Suite Summary¶
List Test Suites¶
Related Documentation¶
- Test Definition - Test templates
- Test Case - Test instances
- Table - Table entity
- Data Quality Overview - Quality framework