Get Help

Oracle

Results into an Oracle table, or through a procedure in a package — the scripts and what is specific to Oracle.

When to use it

When results should be kept across runs and reported on — see Database outputs for what every database output does: one row per test as it finishes, columns matched by name, objects created when CAT may. This page has what is specific to Oracle: the scripts and the procedure form. The target is an Oracle@1 data source.

How to set it

Data sources:
- Name: AeroDWH
  Provider: Oracle@1
  Connection string: "%AERO_CONNECTION_STRING%"

Output:
- Database: AeroDWH
  Table: AERO.CAT_TEST_RESULT

or, calling a procedure for every result. On Oracle Procedure names the package; the procedure inside it must be called SAVE_TEST_RESULT — that name is fixed, the package name is yours:

Output:
- Database: AeroDWH
  Procedure: AERO.CAT_TEST_MGMT

The account needs INSERT on the table, or EXECUTE on the package. If the object does not exist and the account may create it, CAT creates it — the package together with a CAT_TEST_RESULT table in the package’s schema.

What it looks like

One row per test, the columns of your table — see the rows of the sample run on Database outputs.

Details

Table

Any subset of these columns works; custom columns must be nullable or have a default.

CREATE TABLE AERO.CAT_TEST_RESULT
(
    TEST_RESULT_ID NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY,
    EXECUTION_GUID CHAR(36) NOT NULL,
    PROJECT NVARCHAR2(200) NOT NULL,
    FULL_NAME NVARCHAR2(700) NOT NULL,
    TEST_RESULT VARCHAR2(30) NOT NULL,
    STARTED_ON TIMESTAMP NOT NULL,
    FINISHED_ON TIMESTAMP NOT NULL,
    RAW_MESSAGE NCLOB NULL,
    EXCEPTION NCLOB NULL,
    DESCRIPTION NVARCHAR2(2000) NULL,
    FIRST_DATA_SOURCE NVARCHAR2(200) NOT NULL,
    FIRST_QUERY NCLOB NOT NULL,
    SECOND_DATA_SOURCE NVARCHAR2(200) NULL,
    SECOND_QUERY NCLOB NULL,
    EXPECTATION VARCHAR2(50) NOT NULL,
    KEY NVARCHAR2(200) NULL,
    METADATA NVARCHAR2(300) NULL,
    TAGS NVARCHAR2(1000) NULL,
    SUITE NVARCHAR2(200) NULL,
    TEST_CASE NVARCHAR2(200) NULL,
    TEST_ORDER INT NULL,
    NAME NVARCHAR2(300) NULL,
    TIMEOUT INT NULL,
    MAXIMUM_ERRORS_LOGGED INT NULL,
    THREAD_NUMBER INT NOT NULL,
    MESSAGE NCLOB NULL,
    NUMBER_OF_ERRORS INT NULL,
    LOG_NUMBER_OF_ERRORS INT
);

Package

Parameters matched by name with the prefix C_, any subset — CAT reads the procedure’s parameters before the run and passes only those. The specification:

CREATE OR REPLACE PACKAGE CAT_TEST_MGMT AS
PROCEDURE SAVE_TEST_RESULT(
        C_EXECUTION_GUID CHAR,
        C_PROJECT NVARCHAR2,
        C_FULL_NAME NVARCHAR2,
        C_TEST_RESULT VARCHAR2,
        C_STARTED_ON TIMESTAMP,
        C_FINISHED_ON TIMESTAMP,
        C_RAW_MESSAGE NCLOB,
        C_EXCEPTION NCLOB,
        C_DESCRIPTION NVARCHAR2,
        C_FIRST_DATA_SOURCE NVARCHAR2,
        C_FIRST_QUERY NCLOB,
        C_SECOND_DATA_SOURCE NVARCHAR2,
        C_SECOND_QUERY NCLOB,
        C_EXPECTATION VARCHAR2,
        C_KEY NVARCHAR2,
        C_METADATA NVARCHAR2,
        C_TAGS NVARCHAR2,
        C_SUITE NVARCHAR2,
        C_TEST_CASE NVARCHAR2,
        C_TEST_ORDER INT,
        C_NAME NVARCHAR2,
        C_TIMEOUT INT,
        C_MAXIMUM_ERRORS_LOGGED INT,
        C_THREAD_NUMBER INT,
        C_MESSAGE NCLOB,
        C_NUMBER_OF_ERRORS INT,
        C_LOG_NUMBER_OF_ERRORS INT
);
END;

and the body:

CREATE OR REPLACE PACKAGE BODY CAT_TEST_MGMT AS
PROCEDURE SAVE_TEST_RESULT(
    C_EXECUTION_GUID CHAR,
    C_PROJECT NVARCHAR2,
    C_FULL_NAME NVARCHAR2,
    C_TEST_RESULT VARCHAR2,
    C_STARTED_ON TIMESTAMP,
    C_FINISHED_ON TIMESTAMP,
    C_RAW_MESSAGE NCLOB,
    C_EXCEPTION NCLOB,
    C_DESCRIPTION NVARCHAR2,
    C_FIRST_DATA_SOURCE NVARCHAR2,
    C_FIRST_QUERY NCLOB,
    C_SECOND_DATA_SOURCE NVARCHAR2,
    C_SECOND_QUERY NCLOB,
    C_EXPECTATION VARCHAR2,
    C_KEY NVARCHAR2,
    C_METADATA NVARCHAR2,
    C_TAGS NVARCHAR2,
    C_SUITE NVARCHAR2,
    C_TEST_CASE NVARCHAR2,
    C_TEST_ORDER INT,
    C_NAME NVARCHAR2,
    C_TIMEOUT INT,
    C_MAXIMUM_ERRORS_LOGGED INT,
    C_THREAD_NUMBER INT,
    C_MESSAGE NCLOB,
    C_NUMBER_OF_ERRORS INT,
    C_LOG_NUMBER_OF_ERRORS INT
) IS
BEGIN
        INSERT INTO CAT_TEST_RESULT
        (
            EXECUTION_GUID, PROJECT, FULL_NAME, TEST_RESULT, STARTED_ON, FINISHED_ON,
            RAW_MESSAGE, EXCEPTION, DESCRIPTION, FIRST_DATA_SOURCE, FIRST_QUERY,
            SECOND_DATA_SOURCE, SECOND_QUERY, EXPECTATION, KEY, METADATA, TAGS,
            SUITE, TEST_CASE, TEST_ORDER, NAME, TIMEOUT, MAXIMUM_ERRORS_LOGGED,
            THREAD_NUMBER, MESSAGE, NUMBER_OF_ERRORS, LOG_NUMBER_OF_ERRORS
        )
        VALUES(
            C_EXECUTION_GUID, C_PROJECT, C_FULL_NAME, C_TEST_RESULT, C_STARTED_ON, C_FINISHED_ON,
            C_RAW_MESSAGE, C_EXCEPTION, C_DESCRIPTION, C_FIRST_DATA_SOURCE, C_FIRST_QUERY,
            C_SECOND_DATA_SOURCE, C_SECOND_QUERY, C_EXPECTATION, C_KEY, C_METADATA, C_TAGS,
            C_SUITE, C_TEST_CASE, C_TEST_ORDER, C_NAME, C_TIMEOUT, C_MAXIMUM_ERRORS_LOGGED,
            C_THREAD_NUMBER, C_MESSAGE, C_NUMBER_OF_ERRORS, C_LOG_NUMBER_OF_ERRORS
        );
END SAVE_TEST_RESULT;
END;

Specifics

  • Each thread of the run holds its own connection; results are written as the tests finish.
  • EXECUTION_GUID is a CHAR(36) text of the GUID; STARTED_ON and FINISHED_ON are TIMESTAMP, UTC; long texts are NCLOB.
  • The output has not been exercised on Linux; the same ODP.NET Core driver is used, so it is expected to work.