mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-10-27 16:55:06 +00:00
Docs - Add Airflow execution for test suite (#7381)
* Add Airflow execution for test suite * Add types
This commit is contained in:
parent
f6e1d37716
commit
1b5d93dc77
@ -92,7 +92,7 @@ After clicking `Add Ingestion` you will be able to select an execution schedule
|
|||||||
|
|
||||||
## Adding Tests with the YAML Config
|
## Adding Tests with the YAML Config
|
||||||
When creating a JSON config for a test workflow the source configuration is very simple.
|
When creating a JSON config for a test workflow the source configuration is very simple.
|
||||||
```
|
```yaml
|
||||||
source:
|
source:
|
||||||
type: TestSuite
|
type: TestSuite
|
||||||
serviceName: <your_service_name>
|
serviceName: <your_service_name>
|
||||||
@ -103,7 +103,7 @@ source:
|
|||||||
The only section you need to modify here is the `serviceName` key. Note that this name needs to be unique across OM platform Test Suite name.
|
The only section you need to modify here is the `serviceName` key. Note that this name needs to be unique across OM platform Test Suite name.
|
||||||
|
|
||||||
Once you have defined your source configuration you'll need to define te processor configuration.
|
Once you have defined your source configuration you'll need to define te processor configuration.
|
||||||
```
|
```yaml
|
||||||
processor:
|
processor:
|
||||||
type: "orm-test-runner"
|
type: "orm-test-runner"
|
||||||
config:
|
config:
|
||||||
@ -127,7 +127,7 @@ The processor type should be set to ` "orm-test-runner"`. For accepted test defi
|
|||||||
|
|
||||||
### Full `yaml` config example
|
### Full `yaml` config example
|
||||||
|
|
||||||
```
|
```yaml
|
||||||
source:
|
source:
|
||||||
type: TestSuite
|
type: TestSuite
|
||||||
serviceName: MyAwesomeTestSuite
|
serviceName: MyAwesomeTestSuite
|
||||||
@ -162,11 +162,73 @@ workflowConfig:
|
|||||||
```
|
```
|
||||||
|
|
||||||
### How to Run Tests
|
### How to Run Tests
|
||||||
|
|
||||||
To run the tests from the CLI execute the following command
|
To run the tests from the CLI execute the following command
|
||||||
```
|
```
|
||||||
metadata test -c /path/to/my/config.yaml
|
metadata test -c /path/to/my/config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Schedule Test Suite runs with Airflow
|
||||||
|
|
||||||
|
As with the Ingestion or Profiler workflow, you can as well execute a Test Suite directly from Python. We are
|
||||||
|
going to use Airflow as an example, but any orchestrator would achieve the same goal.
|
||||||
|
|
||||||
|
Let's prepare the DAG as usual, but importing a different Workflow class:
|
||||||
|
|
||||||
|
```python
|
||||||
|
import pathlib
|
||||||
|
import yaml
|
||||||
|
from datetime import timedelta
|
||||||
|
from airflow import DAG
|
||||||
|
|
||||||
|
try:
|
||||||
|
from airflow.operators.python import PythonOperator
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
from airflow.operators.python_operator import PythonOperator
|
||||||
|
|
||||||
|
from metadata.config.common import load_config_file
|
||||||
|
from metadata.test_suite.api.workflow import TestSuiteWorkflow
|
||||||
|
from airflow.utils.dates import days_ago
|
||||||
|
|
||||||
|
default_args = {
|
||||||
|
"owner": "user_name",
|
||||||
|
"email": ["username@org.com"],
|
||||||
|
"email_on_failure": False,
|
||||||
|
"retries": 3,
|
||||||
|
"retry_delay": timedelta(minutes=5),
|
||||||
|
"execution_timeout": timedelta(minutes=60)
|
||||||
|
}
|
||||||
|
|
||||||
|
config = """
|
||||||
|
<your YAML configuration>
|
||||||
|
"""
|
||||||
|
|
||||||
|
def metadata_ingestion_workflow():
|
||||||
|
workflow_config = yaml.safe_load(config)
|
||||||
|
workflow = TestSuiteWorkflow.create(workflow_config)
|
||||||
|
workflow.execute()
|
||||||
|
workflow.raise_from_status()
|
||||||
|
workflow.print_status()
|
||||||
|
workflow.stop()
|
||||||
|
|
||||||
|
with DAG(
|
||||||
|
"test_suite_workflow",
|
||||||
|
default_args=default_args,
|
||||||
|
description="An example DAG which runs a OpenMetadata ingestion workflow",
|
||||||
|
start_date=days_ago(1),
|
||||||
|
is_paused_upon_creation=False,
|
||||||
|
schedule_interval='*/5 * * * *',
|
||||||
|
catchup=False,
|
||||||
|
) as dag:
|
||||||
|
ingest_task = PythonOperator(
|
||||||
|
task_id="test_using_recipe",
|
||||||
|
python_callable=metadata_ingestion_workflow,
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
Note how we are using the `TestSuiteWorkflow` class to load and execute the tests based on the YAML
|
||||||
|
configurations specified above.
|
||||||
|
|
||||||
## How to Visualize Test Results
|
## How to Visualize Test Results
|
||||||
### From the Test Suite View
|
### From the Test Suite View
|
||||||
From the home page click on the Test Suite menu in the left pannel.
|
From the home page click on the Test Suite menu in the left pannel.
|
||||||
@ -213,7 +275,7 @@ While OpenMetadata provides out of the box tests, you may want to write your tes
|
|||||||
### Creating a `TestDefinition`
|
### Creating a `TestDefinition`
|
||||||
First, you'll need to create a Test Definition for your test. You can use the following endpoint `/api/v1/testDefinition` using a POST protocol to create your Test Definition. You will need to pass the following data in the body your request at minimum.
|
First, you'll need to create a Test Definition for your test. You can use the following endpoint `/api/v1/testDefinition` using a POST protocol to create your Test Definition. You will need to pass the following data in the body your request at minimum.
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"description": "<you test definition description>",
|
"description": "<you test definition description>",
|
||||||
"entityType": "<TABLE or COLUMN>",
|
"entityType": "<TABLE or COLUMN>",
|
||||||
@ -232,7 +294,7 @@ First, you'll need to create a Test Definition for your test. You can use the fo
|
|||||||
|
|
||||||
Here is a complete CURL request
|
Here is a complete CURL request
|
||||||
|
|
||||||
```
|
```bash
|
||||||
curl --request POST 'http://localhost:8585/api/v1/testDefinition' \
|
curl --request POST 'http://localhost:8585/api/v1/testDefinition' \
|
||||||
--header 'Content-Type: application/json' \
|
--header 'Content-Type: application/json' \
|
||||||
--data-raw '{
|
--data-raw '{
|
||||||
@ -251,7 +313,7 @@ Make sure to keep the `UUID` from the response as you will need it to create the
|
|||||||
### Creating a `TestSuite`
|
### Creating a `TestSuite`
|
||||||
You'll also need to create a Test Suite for your Test Case -- note that you can also use an existing one if you want to. You can use the following endpoint `/api/v1/testSuite` using a POST protocol to create your Test Definition. You will need to pass the following data in the body your request at minimum.
|
You'll also need to create a Test Suite for your Test Case -- note that you can also use an existing one if you want to. You can use the following endpoint `/api/v1/testSuite` using a POST protocol to create your Test Definition. You will need to pass the following data in the body your request at minimum.
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"name": "<test_suite_name>",
|
"name": "<test_suite_name>",
|
||||||
"description": "<test suite description>"
|
"description": "<test suite description>"
|
||||||
@ -260,7 +322,7 @@ You'll also need to create a Test Suite for your Test Case -- note that you can
|
|||||||
|
|
||||||
Here is a complete CURL request
|
Here is a complete CURL request
|
||||||
|
|
||||||
```
|
```bash
|
||||||
curl --request POST 'http://localhost:8585/api/v1/testSuite' \
|
curl --request POST 'http://localhost:8585/api/v1/testSuite' \
|
||||||
--header 'Content-Type: application/json' \
|
--header 'Content-Type: application/json' \
|
||||||
--data-raw '{
|
--data-raw '{
|
||||||
@ -275,7 +337,7 @@ Make sure to keep the `UUID` from the response as you will need it to create the
|
|||||||
### Creating a `TestCase`
|
### Creating a `TestCase`
|
||||||
Once you have your Test Definition created you can create a Test Case -- which is a specification of your Test Definition. You can use the following endpoint `/api/v1/testCase` using a POST protocol to create your Test Case. You will need to pass the following data in the body your request at minimum.
|
Once you have your Test Definition created you can create a Test Case -- which is a specification of your Test Definition. You can use the following endpoint `/api/v1/testCase` using a POST protocol to create your Test Case. You will need to pass the following data in the body your request at minimum.
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"entityLink": "<#E::table::fqn> or <#E::table::fqn::columns::column name>",
|
"entityLink": "<#E::table::fqn> or <#E::table::fqn::columns::column name>",
|
||||||
"name": "<test_case_name>",
|
"name": "<test_case_name>",
|
||||||
@ -293,7 +355,7 @@ Once you have your Test Definition created you can create a Test Case -- which i
|
|||||||
|
|
||||||
Here is a complete CURL request
|
Here is a complete CURL request
|
||||||
|
|
||||||
```
|
```bash
|
||||||
curl --request POST 'http://localhost:8585/api/v1/testCase' \
|
curl --request POST 'http://localhost:8585/api/v1/testCase' \
|
||||||
--header 'Content-Type: application/json' \
|
--header 'Content-Type: application/json' \
|
||||||
--data-raw '{
|
--data-raw '{
|
||||||
@ -322,7 +384,7 @@ Make sure to keep the `UUID` from the response as you will need it to create the
|
|||||||
### Writing `TestCaseResults`
|
### Writing `TestCaseResults`
|
||||||
Once you have your Test Case created you can write your results to it. You can use the following endpoint `/api/v1/testCase/{test FQN}/testCaseResult` using a PUT protocol to add Test Case Results. You will need to pass the following data in the body your request at minimum.
|
Once you have your Test Case created you can write your results to it. You can use the following endpoint `/api/v1/testCase/{test FQN}/testCaseResult` using a PUT protocol to add Test Case Results. You will need to pass the following data in the body your request at minimum.
|
||||||
|
|
||||||
```
|
```json
|
||||||
{
|
{
|
||||||
"result": "<result message>",
|
"result": "<result message>",
|
||||||
"testCaseStatus": "<Success or Failed or Aborted>",
|
"testCaseStatus": "<Success or Failed or Aborted>",
|
||||||
@ -337,7 +399,7 @@ Once you have your Test Case created you can write your results to it. You can u
|
|||||||
|
|
||||||
Here is a complete CURL request
|
Here is a complete CURL request
|
||||||
|
|
||||||
```
|
```bash
|
||||||
curl --location --request PUT 'http://localhost:8585/api/v1/testCase/local_redshift.dev.dbt_jaffle.customers.custom_test_Case/testCaseResult' \
|
curl --location --request PUT 'http://localhost:8585/api/v1/testCase/local_redshift.dev.dbt_jaffle.customers.custom_test_Case/testCaseResult' \
|
||||||
--header 'Content-Type: application/json' \
|
--header 'Content-Type: application/json' \
|
||||||
--data-raw '{
|
--data-raw '{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user