Test Center API

Akamai Test Center API lets progammatically manage your test definitions and test cases, start test runs, and retrieve test result data.

Learn more:


Overview

Akamai Test Center (ATC) is a comparative testing tool designed to test the behavior of configuration changes by comparing the behaviors they cause with the current behavior of your site. This testing is designed to be performed prior to activating configuration changes, to ensure the configuration changes do not cause unexpected behavior. The goal is ATC is to increase user confidence in their configuration changes and help facilitate a higher quality of configuration changes.

Who should use this API

Use this API as part of an automated system to test and compare the behavior of your production websites before activating your changed configurations. You can also use this API to:

  • manage test definitions; create, edit, and remove test definitions and test cases

  • manage and view test results; approve or flag the differences highlighted in the test results

  • view user activity within your organization

Getting started

To configure this API for the first time:

  • Review Get Started with APIs for details on how to set up client tokens to access any Akamai API. These tokens appear as custom hostnames that look like this: https://akzz-XXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXX.luna.akamaiapis.net.

  • To enable this API, choose the API service named Test Center, and set the access level to READ-WRITE.

Rate and resource limiting

Akamai Test Center imposes the following rate limits:

  • 60 requests can be made per minute. The limit resets at the start of the next minute.

  • 10 test runs can be run per day, per hostname. The limit resets after one calendar day. If a test run has multiple hostnames, but any one of the hostnames meets the rate limit, the whole test run fails.

Akamai Test Center limits resources in following ways:

  • Maximum of 5 test definitions per test run.

  • Maximum of 5 test definitions per hostname.

  • Maximum of 15 test cases per test definition.

If you exceed a limit, one of the following errors is shown:

  • test.definitions.per.test.run.max.limit.exceeded

  • test.definitions.per.hostname.max.limit.exceeded

  • test.cases.per.test.definition.max.limit.exceeded

Resources

This section provides details on the API’s various operations.

API summary

Download the RAML descriptors for this API.

Operation Method Endpoint
Activities  
List activities POST /test-management/v1/activities
Test Definitions  
List test definitions GET /test-management/v1/test-definitions
Create a new test definition POST /test-management/v1/test-definitions
Get a test definition GET /test-management/v1/test-definitions/{testDefinitionId}
Modify a test definition PUT /test-management/v1/test-definitions/{testDefinitionId}
Remove a test definition POST /test-management/v1/test-definitions/{testDefinitionId}/remove
Clone a test definition POST /test-management/v1/test-definitions/{testDefinitionId}/clone
List test cases GET /test-management/v1/test-definitions/{testDefinitionId}/test-cases
Create a test case POST /test-management/v1/test-definitions/{testDefinitionId}/test-cases
Get a test case GET /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}
Update a test case PUT /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}
Remove a test case POST /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}/remove
Clone a test case POST /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}/clone
Test Runs  
Submit a test run POST /test-management/v1/test-runs
Get test run GET /test-management/v1/test-runs/{testRunId}
Test Definition Executions  
List executions GET /test-management/v1/test-definition-executions{?testDefinitionIds,latestPerTestDefinition}
Get an execution GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}
Get context GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/context
List differences GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences
Update differences PUT /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences
Create notes for a set of diffs POST /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/notes
Get a difference GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/{differenceId}
Get the raw request and response GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/{differenceId}/raw-request-response
Scheduled Jobs  
Send emails POST /test-management/v1/scheduled-jobs/notification
Update test run status POST /test-management/v1/scheduled-jobs/update-run-status
Update incomplete jobs POST /test-management/v1/scheduled-jobs/update-incomplete-jobs
Purge older test run data DELETE /test-management/v1/scheduled-jobs/purge
Common Resources  
List user configurations GET /test-management/v1/user-config
Map properties to hostnames GET /test-management/v1/property-hostnames

List activities

Get the list of activities for the given set of filters.

POST /test-management/v1/activities

Content-Type: application/json

Request Body:

{
    "filters": [
        {
            "field": "activityResource",
            "value": "test-definition",
            "ids": [
                "738",
                "495",
                "740"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-case",
            "ids": [
                "1855",
                "1866"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-run",
            "ids": [
                "133"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-difference",
            "ids": [
                "e52a1b76-d33d-11e7-9296-cec278b6b50a"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-difference-note",
            "ids": [
                "fe59f1e6-0022-4119-b05b-71e33c2a0ee2"
            ]
        }
    ]
}

Status 200 application/json

Response Body:

[
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-definition",
        "activityAction": "create",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-definition",
        "activityAction": "edit",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test (edited)"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-definition",
        "activityAction": "run",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-definition",
        "activityAction": "clone",
        "activityAdditionalInfo": {
            "source-test-definition-id": 738,
            "source-test-definition-name": "Weather Test",
            "target-test-definition-id": 3753,
            "target-test-definition-name": "Copy of Weather Test"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-definition",
        "activityAction": "delete",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test (edited)"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-case",
        "activityAction": "create",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test",
            "source-test-case-id": null,
            "source-test-case-name": null,
            "target-test-case-id": 1855,
            "target-test-case-name": "Base Page"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-case",
        "activityAction": "edit",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test",
            "source-test-case-id": null,
            "source-test-case-name": null,
            "target-test-case-id": 1855,
            "target-test-case-name": "Base Page (edited)"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-case",
        "activityAction": "delete",
        "activityAdditionalInfo": {
            "source-test-definition-id": null,
            "source-test-definition-name": null,
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test",
            "source-test-case-id": null,
            "source-test-case-name": null,
            "target-test-case-id": 1855,
            "target-test-case-name": "Base Page"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-case",
        "activityAction": "clone",
        "activityAdditionalInfo": {
            "source-test-definition-id": 738,
            "source-test-definition-name": "Weather Test",
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test",
            "source-test-case-id": 1855,
            "source-test-case-name": "Base Page",
            "target-test-case-id": 4621,
            "target-test-case-name": "Copy of Base Page"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-run",
        "activityAction": "start",
        "activityAdditionalInfo": {
            "target-test-definition-id": 738,
            "target-test-definition-name": "Weather Test",
            "test-definition-execution-id": 148,
            "note": "A sample note"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-difference",
        "activityAction": "accept",
        "activityAdditionalInfo": {
            "test-definition-execution-id": 148,
            "test-difference-id": "e52a1b76-d33d-11e7-9296-cec278b6b50a"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-difference",
        "activityAction": "unaccept",
        "activityAdditionalInfo": {
            "test-definition-execution-id": 148,
            "test-difference-id": "eece8d88-d33d-11e7-9296-cec278b6b50a"
        }
    },
    {
        "createdDate": "2017-08-17T01:25:26+0000",
        "createdBy": "atctestuser",
        "activityResource": "test-difference-note",
        "activityAction": "create",
        "activityAdditionalInfo": {
            "test-definition-execution-id": 148,
            "test-difference-id": "eece8d88-d33d-11e7-9296-cec278b6b50a",
            "note": "Confirming the diff is expected."
        }
    }
]

List test definitions

Get all active test definitions available for the organization that the logged-in account belongs to. The response is an array of TestDefinition objects, each keyed by testDefinitionId.

GET /test-management/v1/test-definitions

Status 200 application/json

Response Body:

[
    {
        "testDefinitionId": 738,
        "hostname": "www.example-weather.com",
        "ipVersions": [
            "ipv6"
        ],
        "testDefinitionName": "Weather Test",
        "testDefinitionDescription": "Testing weather prefetch configurations",
        "createdBy": "atctestuser",
        "modifiedBy": "atctestuser",
        "createdDate": "2018-03-16T10:46:21+0000",
        "modifiedDate": "2018-03-16T10:46:22+0000"
    },
    {
        "testDefinitionId": 495,
        "hostname": "www.example-weather-config-1.com",
        "ipVersions": [
            "ipv4"
        ],
        "testDefinitionName": "Weather Test Config 1",
        "createdBy": "atctestuser",
        "modifiedBy": "atctestuser",
        "createdDate": "2018-03-11T17:45:27+0000",
        "modifiedDate": "2018-03-22T10:56:45+0000"
    },
    {
        "testDefinitionId": 740,
        "hostname": "www.example-weather-config-2.com",
        "ipVersions": [
            "ipv4",
            "ipv6"
        ],
        "testDefinitionName": "Weather Test Config 2",
        "testDefinitionDescription": "Testing weather prefetch configurations (config 2)",
        "createdBy": "atctestuser",
        "modifiedBy": "atctestuser",
        "createdDate": "2018-03-16T10:46:21+0000",
        "modifiedDate": "2018-03-16T10:46:22+0000"
    }
]

Create a new test definition

Provide the hostname that your configuration change will affect. The hostname must be configured for Akamai delivery in Property Manager and must not use Instant Config, Slot Matching, or Zone Apex Mapping. You cannot test a hostname as it behaves on ChinaCDN. Once you specify a hostname, you cannot change it.

POST /test-management/v1/test-definitions

Content-Type: application/json

Request Body:

{
    "hostname": "www.example-weather.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Weather Test",
    "testDefinitionDescription": "Testing weather prefetch configurations"
}

Status 201 application/json

Response Body:

{
    "testDefinitionId": 738,
    "hostname": "www.example-weather.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Weather Test",
    "testDefinitionDescription": "Testing weather prefetch configurations",
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:21+0000",
    "modifiedDate": "2018-03-16T10:46:22+0000",
    "status": "active"
}
  1. Create a TestDefinition object.

  2. Make a POST request to /test-management/v1/test-definitions.

Get a test definition

Get a specific test definition’s details, including its status. The response for this operation does not include information about the test cases that belong to this test definition. To see that information, run the List test cases operation.

GET /test-management/v1/test-definitions/{testDefinitionId}

Sample: /test-management/v1/test-definitions/738

Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.

Status 200 application/json

Response Body:

{
    "testDefinitionId": 738,
    "hostname": "www.example-weather.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Weather Test",
    "testDefinitionDescription": "Testing weather prefetch configurations",
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:21+0000",
    "modifiedDate": "2018-03-16T10:46:22+0000",
    "status": "active"
}
  1. Run the List test definitions operation and retrieve the testdefinitionId.

  2. Make a GET request to /test-management/v1/test-definitions/{testDefinitionId}.

  3. The response is a TestDefinition object.

Modify a test definition

Modify a specific test definition with the exception of its hostname.

PUT /test-management/v1/test-definitions/{testDefinitionId}

Sample: /test-management/v1/test-definitions/738

Content-Type: application/json

Request Body:

{
    "testDefinitionId": 738,
    "hostname": "www.example-weather.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Weather Test (edited)",
    "testDefinitionDescription": "Testing weather prefetch configurations (edited)"
}
Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.

Status 200 application/json

Response Body:

{
    "testDefinitionId": 738,
    "hostname": "www.example-weather.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Weather Test (edited)",
    "testDefinitionDescription": "Testing weather prefetch configurations (edited)",
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:21+0000",
    "modifiedDate": "2018-04-10T06:45:58+0000"
}
  1. Run the List test definitions operation and retrieve the testDefinitionId.

  2. Modify the TestDefinition object.

  3. Make a PUT request to /test-management/v1/test-definitions/{testDefinitionId}.

  4. The response reflects the modified TestDefinition object.

Remove a test definition

Remove a test definition identified by testDefinitionId. When you remove a test definition and make a GET request for its ID, its status is inactive. The removed test definition remains in the system for 30 days from the date of the removal. There is no way to revive a removed test definition.

POST /test-management/v1/test-definitions/{testDefinitionId}/remove

Sample: /test-management/v1/test-definitions/738/remove

Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.

Status 204

Clone a test definition

The testDefinitionId that you enter in the URL parameter is that of the test definition you want to clone. The other information specifies the configuration for the cloned test definition. Cloning the test definition also clones the corresponding test cases.

POST /test-management/v1/test-definitions/{testDefinitionId}/clone

Sample: /test-management/v1/test-definitions/738/clone

Content-Type: application/json

Request Body:

{
    "testDefinitionId": 738,
    "hostname": "www.example-weather-config-1.com",
    "testDefinitionName": "Copy of Weather Test",
    "testDefinitionDescription": "Creating a copy of Weather Test",
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:21+0000",
    "modifiedDate": "2018-04-10T06:45:58+0000"
}
Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.

Status 201 application/json

Response Body:

{
    "testDefinitionId": 3753,
    "hostname": "www.example-weather-config-1.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Copy of Weather Test",
    "testDefinitionDescription": "Creating a copy of Weather Test",
    "createdBy": "atctestuser",
    "createdDate": "2018-04-10T06:47:16+0000"
}
  1. Run the List test definitions operation and retrieve the testDefinitionId.

  2. Optionally, specify any properties that you want to override that belong to the testDefinitionId you are cloning.

  3. POST the object to /test-management/v1/test-definitions/{testDefinitionId}/clone.

  4. The response reflects the modified TestDefinition object.

List test cases

List all test cases that belong to a specific test definition.

GET /test-management/v1/test-definitions/{testDefinitionId}/test-cases

Sample: /test-management/v1/test-definitions/738/test-cases

Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.

Status 200 application/json

Response Body:

[
    {
        "testCaseId": 1855,
        "testDefinitionId": 738,
        "url": "https://www.example-weather.com/",
        "testCaseName": "Base Page",
        "testCaseDescription": "Base Page Test",
        "runOrder": 1,
        "requestHeaders": [
            {
                "headerName": "Max-Forwards",
                "headerAction": "add",
                "headerValues": "10"
            }
        ],
        "comparisonSettings": {
            "responseCode": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "responseHeaders": {
                "isEnabled": true,
                "includeEmbeddedObjects": true,
                "compareOnly": [],
                "compareAllExcept": [
                    "Age",
                    "Date",
                    "Expires",
                    "Server",
                    "Via",
                    "Set-Cookie",
                    "Cache-Control"
                ]
            },
            "cpcode": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "cachingOption": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "cacheKey": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "metadataVariables": {
                "isEnabled": true,
                "includeEmbeddedObjects": true,
                "compareOnly": [],
                "compareAllExcept": [
                    "RUM_IS_IPV6",
                    "RUA_OUT_IS_APPLIED",
                    "RUM_XHR_TEST",
                    "RUM_CLIENT_TO_MAPPING_PCT",
                    "RANDOM_SAMPLE",
                    "RUM_IMPL_PM_GROUPID",
                    "RUM_IMPL_PM_GROUPNAME",
                    "RUM_IMPL_PM_PRODUCT",
                    "RUM_DEBUG"
                ]
            },
            "originServer": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            }
        },
        "createdBy": "atctestuser",
        "modifiedBy": "atctestuser",
        "createdDate": "2018-03-16T10:46:23+0000",
        "modifiedDate": "2018-03-16T10:46:28+0000"
    },
    {
        "testCaseId": 1866,
        "testDefinitionId": 738,
        "url": "https://www.example-weather.com/accounts",
        "testCaseName": "Accounts page",
        "testCaseDescription": "Accounts page test",
        "runOrder": 2,
        "requestHeaders": [],
        "comparisonSettings": {
            "responseCode": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "cpcode": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "cachingOption": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "cacheKey": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "metadataVariables": {
                "isEnabled": true,
                "includeEmbeddedObjects": true,
                "compareOnly": [],
                "compareAllExcept": [
                    "RUM_IS_IPV6",
                    "RUA_OUT_IS_APPLIED",
                    "RUM_XHR_TEST",
                    "RUM_CLIENT_TO_MAPPING_PCT",
                    "RANDOM_SAMPLE"
                ]
            },
            "originServer": {
                "isEnabled": true,
                "includeEmbeddedObjects": true
            },
            "responseHeaders": {
                "isEnabled": true,
                "includeEmbeddedObjects": true,
                "compareOnly": [],
                "compareAllExcept": [
                    "Age",
                    "Date",
                    "Expires",
                    "Server",
                    "Via",
                    "Set-Cookie",
                    "Cache-Control"
                ]
            }
        },
        "createdBy": "atctestuser",
        "modifiedBy": "atctestuser",
        "createdDate": "2018-03-16T10:46:24+0000",
        "modifiedDate": "2018-03-16T10:46:30+0000"
    }
]
  1. Run the List test definitions operation and retrieve the testdefinitionId.

  2. Make a GET request to /test-management/v1/test-definitions/{testDefinitionId}/test-cases.

  3. The response is an array of TestCase objects.

Create a test case

Add a test case to a test definition. The hostname of the URL you provide for the test case must be the same as the hostname for the test definition that the test case belongs to. Do not use this to test authenticated content.

POST /test-management/v1/test-definitions/{testDefinitionId}/test-cases

Sample: /test-management/v1/test-definitions/738/test-cases

Content-Type: application/json

Request Body:

{
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Base Page",
    "testCaseDescription": "Base Page Test",
    "requestHeaders": [
        {
            "headerName": "Max-Forwards",
            "headerAction": "add",
            "headerValues": "10"
        }
    ],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server",
                "Via",
                "Set-Cookie",
                "Cache-Control"
            ]
        },
        "cpcode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE",
                "RUM_IMPL_PM_GROUPID",
                "RUM_IMPL_PM_GROUPNAME",
                "RUM_IMPL_PM_PRODUCT",
                "RUM_DEBUG"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    }
}
Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.

Status 201 application/json

Response Body:

{
    "testCaseId": 1855,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Base Page",
    "testCaseDescription": "Base Page Test",
    "requestHeaders": [
        {
            "headerName": "Max-Forwards",
            "headerAction": "add",
            "headerValues": "10"
        }
    ],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server",
                "Via",
                "Set-Cookie",
                "Cache-Control"
            ]
        },
        "cpcode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE",
                "RUM_IMPL_PM_GROUPID",
                "RUM_IMPL_PM_GROUPNAME",
                "RUM_IMPL_PM_PRODUCT",
                "RUM_DEBUG"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    },
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:23+0000",
    "modifiedDate": "2018-03-16T10:46:28+0000",
    "runOrder": 1,
    "status": "active"
}
  1. Run the List test definitions operation and retrieve the testDefinitionId.

  2. Format a TestCase object.

  3. POST the object to /test-management/v1/test-definitions/{testDefinitionId}/test-cases.

  4. The response is a TestCase object.

Get a test case

Get a specific test case’s details including its request headers and comparison settings.

GET /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}

Sample: /test-management/v1/test-definitions/738/test-cases/1855

Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.
testCaseId Integer 1855 Unique identifier for test case.

Status 200 application/json

Response Body:

{
    "testCaseId": 1855,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Base Page",
    "testCaseDescription": "Base Page Test",
    "requestHeaders": [
        {
            "headerName": "Max-Forwards",
            "headerAction": "add",
            "headerValues": "10"
        }
    ],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server",
                "Via",
                "Set-Cookie",
                "Cache-Control"
            ]
        },
        "cpcode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE",
                "RUM_IMPL_PM_GROUPID",
                "RUM_IMPL_PM_GROUPNAME",
                "RUM_IMPL_PM_PRODUCT",
                "RUM_DEBUG"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    },
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:23+0000",
    "modifiedDate": "2018-03-16T10:46:28+0000",
    "runOrder": 1,
    "status": "active"
}
  1. Run the List test definitions operation and retrieve the testdefinitionId.

  2. Run the List test cases operation and retrieve the testCaseId.

  3. Make a GET request to /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}.

  4. The response is a TestCase object.

Update a test case

Modify a specific test case. You cannot modify the testCaseId or the testDefinitionId.

PUT /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}

Sample: /test-management/v1/test-definitions/738/test-cases/1855

Content-Type: application/json

Request Body:

{
    "testCaseId": 1855,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Base Page (edited)",
    "testCaseDescription": "Base Page Test (edited)",
    "requestHeaders": [],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server"
            ]
        },
        "cpcode": {
            "isEnabled": false,
            "includeEmbeddedObjects": false
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": false,
            "includeEmbeddedObjects": false
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE",
                "RUM_IMPL_PM_GROUPID",
                "RUM_IMPL_PM_GROUPNAME",
                "RUM_IMPL_PM_PRODUCT",
                "RUM_DEBUG"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    }
}
Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.
testCaseId Integer 1855 Unique identifier for test case.

Status 200 application/json

Response Body:

{
    "testCaseId": 1855,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Base Page (edited)",
    "testCaseDescription": "Base Page Test (edited)",
    "requestHeaders": [],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server"
            ]
        },
        "cpcode": {
            "isEnabled": false,
            "includeEmbeddedObjects": false
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": false,
            "includeEmbeddedObjects": false
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE",
                "RUM_IMPL_PM_GROUPID",
                "RUM_IMPL_PM_GROUPNAME",
                "RUM_IMPL_PM_PRODUCT",
                "RUM_DEBUG"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    },
    "createdBy": "atctestuser",
    "modifiedBy": "aanuj",
    "createdDate": "2018-03-16T10:46:23+0000",
    "modifiedDate": "2018-04-10T06:32:31+0000",
    "runOrder": 1
}
  1. Run the List test definitions operation and retrieve the testDefinitionId.

  2. Run the List test cases operation and retrieve the testCaseId.

  3. Format a TestCase object.

  4. Make a PUT request to /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}.

  5. The response is a TestCase object.

Remove a test case

Remove a test case identified by testCaseId from its test definition. When you remove a test case and make a GET request for it, its status is inactive. The removed test case remains in the system for 30 days from the date of the removal. After that, you receive a 404 error if you try to retrieve it.

POST /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}/remove

Sample: /test-management/v1/test-definitions/738/test-cases/1855/remove

Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.
testCaseId Integer 1855 Unique identifier for test case.

Status 204

Clone a test case

The testCaseId that you enter in the URL parameter is that of the test case you want to clone. The other information specifies the configuration for the cloned test case.

POST /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}/clone

Sample: /test-management/v1/test-definitions/738/test-cases/1855/clone

Content-Type: application/json

Request Body:

{
    "testCaseId": 1855,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Copy of Base Page",
    "testCaseDescription": "Copy of Base Page Test",
    "requestHeaders": [],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server",
                "Via",
                "Set-Cookie",
                "Cache-Control"
            ]
        },
        "cpcode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    }
}
Parameter Type Sample Description
URL parameters
testDefinitionId Integer 738 Unique identifier for test definition.
testCaseId Integer 1855 Unique identifier for test case.

Status 201 application/json

Response Body:

{
    "testCaseId": 4621,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Copy of Base Page",
    "testCaseDescription": "Copy of Base Page Test",
    "requestHeaders": [],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cpcode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server",
                "Via",
                "Set-Cookie",
                "Cache-Control"
            ]
        }
    },
    "createdBy": "atctestuser",
    "createdDate": "2018-04-10T06:35:29+0000"
}
  1. Run the List test definitions operation and retrieve the testDefinitionId.

  2. Run the List test cases operation and get the testCaseId of the test case you want to clone.

  3. Optionally, specify any properties that you want to override that belong to the testCaseId you are cloning.

  4. POST the object to /test-management/v1/test-definitions/{testDefinitionId}/test-cases/{testCaseId}/clone.

  5. The response reflects the modified TestCase object.

Submit a test run

Start a test run containing one or more test definitions and their corresponding test cases.

POST /test-management/v1/test-runs

Content-Type: application/json

Request Body:

{
    "testDefinitionExecutions": [
        {
            "testDefinitionId": 738,
            "targetHostname": "www.example-weather-production.com",
            "targetEnvironment": "production",
            "ipVersions": [
                "ipv6"
            ],
            "testCaseIds": [
                1855
            ],
            "note": "A sample note"
        },
        {
            "testDefinitionId": 740,
            "targetHostname": "www.example-weather-config-1-production.com",
            "targetEnvironment": "staging",
            "ipVersions": [
                "ipv4",
                "ipv6"
            ],
            "testCaseIds": [
                1991,
                1992
            ],
            "note": "Another sample note"
        }
    ]
}

Status 202 application/json

Response Body:

{
    "testRunId": 133,
    "status": "failed",
    "submittedBy": "atctestuser",
    "submittedDate": "2018-08-18T11:37:26+0000",
    "testDefinitionExecutions": [
        {
            "testDefinitionExecutionId": 148,
            "testDefinitionId": 738,
            "testRunId": 133,
            "targetHostname": "www.example-weather-production.com",
            "targetEnvironment": "production",
            "submittedBy": "atctestuser",
            "submittedDate": "2018-08-18T11:37:26+0000",
            "status": "completed",
            "diffCount": {
                "total": 2,
                "outstanding": 2
            },
            "ipVersions": [
                "ipv6"
            ],
            "completedDate": "2018-08-18T12:37:26+0000",
            "testCaseIds": [
                1855
            ],
            "note": "A sample note"
        },
        {
            "testDefinitionExecutionId": 149,
            "testDefinitionId": 740,
            "testRunId": 133,
            "targetHostname": "www.example-weather-config-1-production.com",
            "targetEnvironment": "staging",
            "submittedBy": "atctestuser",
            "submittedDate": "2018-08-18T11:37:26+0000",
            "status": "failed",
            "errors": [
                {
                    "type": "ip.version.not.supported",
                    "title": "IP version not supported",
                    "ipVersion": "ipv6"
                }
            ],
            "ipVersions": [
                "ipv4",
                "ipv6"
            ],
            "completedDate": "2018-08-18T12:37:26+0000",
            "testCaseIds": [
                1991,
                1992
            ],
            "note": "Another sample note"
        }
    ]
}
  1. Format a TestRun object.

  2. POST the object to /test-management/v1/test-runs.

Get test run

Get the Test Run identified by testRunId.

GET /test-management/v1/test-runs/{testRunId}

Sample: /test-management/v1/test-runs/133

Parameter Type Sample Description
URL parameters
testRunId Integer 133 Numeric identifier for a test run.

Status 200 application/json

Response Body:

{
    "testRunId": 133,
    "status": "failed",
    "submittedBy": "atctestuser",
    "submittedDate": "2018-08-18T11:37:26+0000",
    "testDefinitionExecutions": [
        {
            "testDefinitionExecutionId": 148,
            "testDefinitionId": 738,
            "testRunId": 133,
            "targetHostname": "www.example-weather-production.com",
            "targetEnvironment": "production",
            "submittedBy": "atctestuser",
            "submittedDate": "2018-08-18T11:37:26+0000",
            "status": "completed",
            "diffCount": {
                "total": 2,
                "outstanding": 2
            },
            "ipVersions": [
                "ipv6"
            ],
            "completedDate": "2018-08-18T12:37:26+0000",
            "testCaseIds": [
                1855
            ],
            "note": "A sample note"
        },
        {
            "testDefinitionExecutionId": 149,
            "testDefinitionId": 740,
            "testRunId": 133,
            "targetHostname": "www.example-weather-config-1-production.com",
            "targetEnvironment": "staging",
            "submittedBy": "atctestuser",
            "submittedDate": "2018-08-18T11:37:26+0000",
            "status": "failed",
            "errors": [
                {
                    "type": "ip.version.not.supported",
                    "title": "IP version not supported",
                    "ipVersion": "ipv6"
                }
            ],
            "ipVersions": [
                "ipv4",
                "ipv6"
            ],
            "completedDate": "2018-08-18T12:37:26+0000",
            "testCaseIds": [
                1991,
                1992
            ],
            "note": "Another sample note"
        }
    ]
}

List executions

Get list of test definition executions. One test definition execution is created for each test definition included in a completed test run.

GET /test-management/v1/test-definition-executions{?testDefinitionIds,latestPerTestDefinition}

Sample: /test-management/v1/test-definition-executions?testDefinitionIds=738%2C740&latestPerTestDefinition=true

Parameter Type Sample Description
Optional query parameters
latestPerTestDefinition Boolean true When enabled, the response includes only the latest test definition execution for each passed valid test definition ID.
testDefinitionIds String 738,740 Comma-separated list of test definition IDs.

Status 200 application/json

Response Body:

[
    {
        "testDefinitionExecutionId": 148,
        "testDefinitionId": 738,
        "testRunId": 133,
        "targetHostname": "www.example-weather-production.com",
        "targetEnvironment": "production",
        "submittedBy": "atctestuser",
        "submittedDate": "2018-08-18T11:37:26+0000",
        "status": "completed",
        "diffCount": {
            "total": 2,
            "outstanding": 2
        },
        "ipVersions": [
            "ipv6"
        ],
        "completedDate": "2018-08-18T12:37:26+0000",
        "testCaseIds": [
            1855
        ],
        "note": "A sample note"
    },
    {
        "testDefinitionExecutionId": 149,
        "testDefinitionId": 740,
        "testRunId": 133,
        "targetHostname": "www.example-weather-config-1-production.com",
        "targetEnvironment": "staging",
        "submittedBy": "atctestuser",
        "submittedDate": "2018-03-20T11:37:26+0000",
        "status": "failed",
        "errors": [
            {
                "type": "ip.version.not.supported",
                "title": "IP version not supported",
                "ipVersion": "ipv6"
            }
        ],
        "ipVersions": [
            "ipv4",
            "ipv6"
        ],
        "completedDate": "2018-03-20T11:43:26+0000",
        "testCaseIds": [
            1991,
            1992
        ],
        "note": "Another sample note"
    }
]
  1. If you want to view only the latest execution for each definition, enable the latestPerTestDefinition query parameter.

  2. If you want to filter down the results to a smaller set of definitions, run the List test definitions operation, gather the set of testDefinitionId values you want, and use a comma to join them together as the testDefinitionIds query parameter.

  3. Make a GET request to /test-management/v1/test-definition-executions{?testDefinitionIds,latestPerTestDefinition}.

  4. The response is an array of Execution objects.

Get an execution

Get a specific test definition execution. The response includes the test case IDs of the test cases that belong to the test definitions that were included in the test run. Target hostname, target environment, IP versions, and notes are included in this object, for a test run. When the status is completed there is a diffCount object. When the status is failed there is an errors array. If the test run is in progress when you request to get an execution, the API returns a 404 error.

GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}

Sample: /test-management/v1/test-definition-executions/148

Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.

Status 200 application/json

Response Body:

{
    "testDefinitionExecutionId": 148,
    "testDefinitionId": 738,
    "testRunId": 133,
    "targetHostname": "www.example-weather-production.com",
    "targetEnvironment": "production",
    "submittedBy": "atctestuser",
    "submittedDate": "2018-08-18T11:37:26+0000",
    "status": "completed",
    "diffCount": {
        "total": 2,
        "outstanding": 2
    },
    "ipVersions": [
        "ipv6"
    ],
    "completedDate": "2018-08-18T12:37:26+0000",
    "testCaseIds": [
        1855
    ],
    "note": "A sample note"
}
  1. Run the List executions operation and store the testDefinitionExecutionId.

  2. Make a GET request to /test-management/v1/test-definition-executions/{testDefinitionExecutionId}.

  3. The response is an Execution object.

Get context

A snapshot of the test definition and test cases of when the test definition execution was run. If any note fails you are notified in the “failures” field of the response.

GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/context

Sample: /test-management/v1/test-definition-executions/148/context

Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.

Status 200 application/json

Response Body:

{
    "testDefinition": {
        "testDefinitionId": 738,
        "hostname": "www.example-weather.com",
        "testDefinitionName": "Weather Test",
        "testDefinitionDescription": "Testing weather prefetch configurations",
        "ipVersions": [
            "ipv6"
        ],
        "createdBy": "atctestuser",
        "createdDate": "2018-03-16T10:46:21+0000",
        "modifiedBy": "atctestuser",
        "modifiedDate": "2018-03-16T10:46:22+0000",
        "testCases": [
            {
                "testCaseId": 1855,
                "testDefinitionId": 738,
                "url": "https://www.example-weather.com/",
                "testCaseName": "Base Page",
                "testCaseDescription": "Base Page Test",
                "runOrder": 1,
                "requestHeaders": [
                    {
                        "headerName": "Accept-Additions",
                        "headerAction": "add",
                        "headerValues": ""
                    }
                ],
                "comparisonSettings": {
                    "responseCode": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "responseHeaders": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true,
                        "compareOnly": [],
                        "compareAllExcept": [
                            "Age",
                            "Date",
                            "Expires",
                            "Server",
                            "Via",
                            "Set-Cookie",
                            "Cache-Control"
                        ]
                    },
                    "cpcode": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "cachingOption": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "cacheKey": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "metadataVariables": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true,
                        "compareOnly": [],
                        "compareAllExcept": [
                            "RUM_IS_IPV6",
                            "RUA_OUT_IS_APPLIED",
                            "RUM_XHR_TEST",
                            "RUM_CLIENT_TO_MAPPING_PCT",
                            "RANDOM_SAMPLE",
                            "RUM_IMPL_PM_GROUPID",
                            "RUM_IMPL_PM_GROUPNAME",
                            "RUM_IMPL_PM_PRODUCT",
                            "RUM_DEBUG"
                        ]
                    },
                    "originServer": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    }
                },
                "createdBy": "atctestuser",
                "modifiedBy": "atctestuser",
                "createdDate": "2018-03-16T10:46:23+0000",
                "modifiedDate": "2018-03-16T10:46:28+0000"
            },
            {
                "testCaseId": 1866,
                "testDefinitionId": 738,
                "url": "https://www.example-weather.com/accounts",
                "testCaseName": "Accounts page",
                "testCaseDescription": "Accounts page test",
                "runOrder": 2,
                "requestHeaders": [],
                "comparisonSettings": {
                    "responseCode": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "cpcode": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "cachingOption": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "cacheKey": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "metadataVariables": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true,
                        "compareOnly": [],
                        "compareAllExcept": [
                            "RUM_IS_IPV6",
                            "RUA_OUT_IS_APPLIED",
                            "RUM_XHR_TEST",
                            "RUM_CLIENT_TO_MAPPING_PCT",
                            "RANDOM_SAMPLE"
                        ]
                    },
                    "originServer": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true
                    },
                    "responseHeaders": {
                        "isEnabled": true,
                        "includeEmbeddedObjects": true,
                        "compareOnly": [],
                        "compareAllExcept": [
                            "Age",
                            "Date",
                            "Expires",
                            "Server",
                            "Via",
                            "Set-Cookie",
                            "Cache-Control"
                        ]
                    }
                },
                "createdBy": "atctestuser",
                "modifiedBy": "atctestuser",
                "createdDate": "2018-03-16T10:46:24+0000",
                "modifiedDate": "2018-03-16T10:46:30+0000"
            }
        ]
    }
}

List differences

Get the list of differences found for a specific test definition execution.

GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences

Sample: /test-management/v1/test-definition-executions/148/differences

Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.

Status 200 application/json

Response Body:

[
    {
        "differenceId": "e52a1b76-d33d-11e7-9296-cec278b6b50a",
        "testCaseId": 1855,
        "sourceUrl": "https://www.example-weather.com/",
        "targetUrl": "https://www.example-weather-production.com/",
        "ipVersion": "ipv6",
        "geoLocation": "us",
        "browser": {
            "name": "chrome",
            "version": "62"
        },
        "comparisonAttribute": "responseHeaders",
        "parameterNames": [
            "Content-Encoding"
        ],
        "sourceValue": "gzip",
        "targetValue": "deflate",
        "isAccepted": false
    },
    {
        "differenceId": "eece8d88-d33d-11e7-9296-cec278b6b50a",
        "testCaseId": 1855,
        "sourceUrl": "https://www.example-weather.com/regions/12345",
        "targetUrl": "https://www.example-weather-production.com/regions/12345",
        "ipVersion": "ipv6",
        "geoLocation": "us",
        "browser": {
            "name": "chrome",
            "version": "62"
        },
        "comparisonAttribute": "responseCode",
        "parameterNames": [],
        "sourceValue": "200",
        "targetValue": "400",
        "isAccepted": false
    }
]
  1. Run the Get an execution operation and store the testDefinitionExecutionId.

  2. Make a GET request to /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences.

  3. The response is an array of Difference objects.

Update differences

Update the status of differences, marking the resolved differences as OK to be ignored. This returns the list of all differences, including both accepted and unaccepted diffs. You can update a set of differences ar once. If any of the updates fail, you are notified in the “failures” field of the response.

PUT /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences

Sample: /test-management/v1/test-definition-executions/148/differences

Content-Type: application/json

Request Body:

[
    {
        "differenceId": "e52a1b76-d33d-11e7-9296-cec278b6b50a",
        "isAccepted": true
    },
    {
        "differenceId": "fe59f1e6-0022-4119-b05b-71e33c2a0ee2",
        "isAccepted": true
    }
]
Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.

Status 200 application/json

Response Body:

{
    "successes": [
        {
            "differenceId": "e52a1b76-d33d-11e7-9296-cec278b6b50a"
        }
    ],
    "failures": [
        {
            "type": "validation.error",
            "title": "Validation Error",
            "status": 200,
            "errors": [
                {
                    "type": "invalid.value",
                    "title": "Invalid Value",
                    "errorField": "differenceId",
                    "differenceId": "fe59f1e6-0022-4119-b05b-71e33c2a0ee2"
                }
            ]
        }
    ]
}
  1. Run the Get an execution operation.

  2. Format a Difference object.

  3. Make a PUT request to /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences.

  4. The response is a Difference object.

Create notes for a set of diffs

Create notes for a set of diffs in bulk, under testDefinitionExecutionId. The only way to access created diffs is through the activity stream.

POST /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/notes

Sample: /test-management/v1/test-definition-executions/148/differences/notes

Content-Type: application/json

Request Body:

[
    {
        "differenceId": "e52a1b76-d33d-11e7-9296-cec278b6b50a",
        "note": "Unexpected change due to incorrect content encoding config"
    },
    {
        "differenceId": "eece8d88-d33d-11e7-9296-cec278b6b50a",
        "note": "Expected change."
    }
]
Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.

Status 200

  1. Run the Get an execution operation and store the testDefinitionExecutionId.

  2. Format a Execution object.

  3. Make a POST request to /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/notes.

Get a difference

Get the details of the test definition execution difference.

GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/{differenceId}

Sample: /test-management/v1/test-definition-executions/148/differences/e52a1b76-d33d–11e7-9296-cec278b6b50a

Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.
differenceId String e52a1b76-d33d-11e7-9296-cec278b6b50a Alphanumeric identifier for the difference.

Status 200 application/json

Response Body:

{
    "differenceId": "e52a1b76-d33d-11e7-9296-cec278b6b50a",
    "testCaseId": 1855,
    "sourceUrl": "https://www.example-weather.com/",
    "targetUrl": "https://www.example-weather-production.com/",
    "ipVersion": "ipv6",
    "geoLocation": "us",
    "browser": {
        "name": "chrome",
        "version": "62"
    },
    "comparisonAttribute": "responseHeaders",
    "parameterNames": [
        "Content-Encoding"
    ],
    "sourceValue": "gzip",
    "targetValue": "deflate",
    "isAccepted": false
}
  1. Run the Get an execution operation and pick a testDefinitionExecutionId value.

  2. Run the List differences operation and retrieve the differenceId.

  3. Make a GET request to /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/{differenceId}.

  4. The response is a Difference object.

Get the raw request and response

Get the raw request and response, the requests and responses from both compared environments from which a diff was generated.

GET /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/{differenceId}/raw-request-response

Sample: /test-management/v1/test-definition-executions/148/differences/e52a1b76-d33d–11e7-9296-cec278b6b50a/raw-request-response

Parameter Type Sample Description
URL parameters
testDefinitionExecutionId Integer 148 Numeric identifier for test definition execution.
differenceId String e52a1b76-d33d-11e7-9296-cec278b6b50a Alphanumeric identifier for the difference.

Status 200 application/json

Response Body:

{
    "sourceEnvironment": {
        "request": {
            "method": "GET",
            "url": "https://www.example-weather.com/",
            "httpVersion": "HTTP/1.1",
            "cookies": [],
            "headers": [
                {
                    "name": "Host",
                    "value": "www.example-weather"
                },
                {
                    "name": "Proxy-Connection",
                    "value": "keep-alive"
                },
                {
                    "name": "User-Agent",
                    "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
                },
                {
                    "name": "Accept",
                    "value": "*/*"
                },
                {
                    "name": "Referer",
                    "value": "https://www.example-weather.com/"
                },
                {
                    "name": "Accept-Encoding",
                    "value": "gzip, deflate"
                },
                {
                    "name": "Accept-Language",
                    "value": "en-US,en;q=0.9"
                },
                {
                    "name": "Cookie",
                    "value": "frontend=291i77k6avpip216ct88tkciv7"
                },
                {
                    "name": "Content-Length",
                    "value": "0"
                },
                {
                    "name": "HeaderName1523525534255",
                    "value": "HeaderValue11523525534255,HeaderValue21523525534255"
                }
            ],
            "queryString": [],
            "headersSize": 610,
            "bodySize": 0,
            "comment": ""
        },
        "response": {
            "status": 200,
            "statusText": "OK",
            "httpVersion": "HTTP/1.1",
            "cookies": [],
            "headers": [
                {
                    "name": "Server",
                    "value": "Apache/2.4.7 (Ubuntu)"
                },
                {
                    "name": "Last-Modified",
                    "value": "Wed, 14 May 2014 16:03:36 GMT"
                },
                {
                    "name": "ETag",
                    "value": "\\63d-4f95e52aaa600-gzip\\"
                },
                {
                    "name": "Accept-Ranges",
                    "value": "bytes"
                },
                {
                    "name": "Content-Encoding",
                    "value": "gzip"
                },
                {
                    "name": "Content-Length",
                    "value": "737"
                },
                {
                    "name": "Content-Type",
                    "value": "application/javascript"
                },
                {
                    "name": "Cache-Control",
                    "value": "max-age=86400"
                },
                {
                    "name": "Expires",
                    "value": "Sat, 14 Apr 2018 11:02:43 GMT"
                },
                {
                    "name": "Date",
                    "value": "Fri, 13 Apr 2018 11:02:43 GMT"
                },
                {
                    "name": "Connection",
                    "value": "keep-alive"
                },
                {
                    "name": "Vary",
                    "value": "Accept-Encoding"
                }
            ],
            "content": {
                "size": 0,
                "mimeType": "application/javascript",
                "comment": "",
                "text": "",
                "compression": 0
            },
            "redirectURL": "",
            "headersSize": 1350,
            "bodySize": 737,
            "comment": ""
        }
    },
    "targetEnvironment": {
        "request": {
            "method": "GET",
            "url": "https://www.example-weather-production.com/",
            "httpVersion": "HTTP/1.1",
            "cookies": [],
            "headers": [
                {
                    "name": "Host",
                    "value": "www.example-weather-production.com"
                },
                {
                    "name": "Proxy-Connection",
                    "value": "keep-alive"
                },
                {
                    "name": "User-Agent",
                    "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
                },
                {
                    "name": "Accept",
                    "value": "*/*"
                },
                {
                    "name": "Referer",
                    "value": "https://www.example-weather-production.com/"
                },
                {
                    "name": "Accept-Encoding",
                    "value": "gzip, deflate"
                },
                {
                    "name": "Accept-Language",
                    "value": "en-US,en;q=0.9"
                },
                {
                    "name": "Cookie",
                    "value": "frontend=60klgq7g1jc4u42gmjt21c7tp1"
                },
                {
                    "name": "Content-Length",
                    "value": "0"
                },
                {
                    "name": "Content-Encoding",
                    "value": "deflate"
                },
                {
                    "name": "HeaderName1523525534255",
                    "value": "HeaderValue11523525534255,HeaderValue21523525534255"
                }
            ],
            "queryString": [],
            "headersSize": 625,
            "bodySize": 0,
            "comment": ""
        },
        "response": {
            "status": 200,
            "statusText": "OK",
            "httpVersion": "HTTP/1.1",
            "cookies": [],
            "headers": [
                {
                    "name": "Server",
                    "value": "Apache/2.4.7 (Ubuntu)"
                },
                {
                    "name": "Last-Modified",
                    "value": "Wed, 14 May 2014 16:03:36 GMT"
                },
                {
                    "name": "ETag",
                    "value": "\\63d-4f95e52aaa600-gzip\\"
                },
                {
                    "name": "Content-Type",
                    "value": "application/javascript"
                },
                {
                    "name": "X-Akamai-Staging",
                    "value": "EdgeSuite"
                },
                {
                    "name": "X-Akamai-Staging",
                    "value": "EdgeSuite"
                },
                {
                    "name": "X-Akamai-Staging",
                    "value": "EdgeSuite"
                },
                {
                    "name": "X-Akamai-Staging",
                    "value": "EdgeSuite"
                },
                {
                    "name": "Vary",
                    "value": "Accept-Encoding"
                },
                {
                    "name": "Cache-Control",
                    "value": "max-age=82116"
                },
                {
                    "name": "Expires",
                    "value": "Sat, 14 Apr 2018 09:52:07 GMT"
                },
                {
                    "name": "Date",
                    "value": "Fri, 13 Apr 2018 11:03:31 GMT"
                },
                {
                    "name": "Content-Length",
                    "value": "1597"
                },
                {
                    "name": "Connection",
                    "value": "keep-alive"
                },
                {
                    "name": "X-Akamai-Staging",
                    "value": "EdgeSuite"
                }
            ],
            "content": {
                "size": 0,
                "mimeType": "application/javascript",
                "comment": "",
                "text": "",
                "compression": 0
            },
            "redirectURL": "",
            "headersSize": 1560,
            "bodySize": 1597,
            "comment": ""
        }
    }
}
  1. Run the List executions operation and store the testDefinitionExecutionId.

  2. Run the List differences operation and retrieve the differenceId.

  3. Make a GET request to /test-management/v1/test-definition-executions/{testDefinitionExecutionId}/differences/{differenceId}/raw-request-response.

  4. The response is a Headers.responseHeaders[] object.

Send emails

Send pending test result emails.

POST /test-management/v1/scheduled-jobs/notification

Status 200 application/json

Response Body:

{
    "status": "Finished sending emails. Total count[42]"
}
  1. Make a POST request to /test-management/v1/scheduled-jobs/notification.

Update test run status

Update status of test runs in progress. This returns a list of IDs of jobs that were updated.

POST /test-management/v1/scheduled-jobs/update-run-status

Status 200 application/json

Response Body:

[
    744,
    533,
    3335,
    7436
]
  1. Make a POST request to /test-management/v1/scheduled-jobs/update-run-status.

Update incomplete jobs

Update incomplete jobs’ status.

POST /test-management/v1/scheduled-jobs/update-incomplete-jobs

Status 202

  1. Make a POST request to /test-management/v1/scheduled-jobs/update-incomplete-jobs.

Purge older test run data

Purge older test run data.

DELETE /test-management/v1/scheduled-jobs/purge

Status 202

  1. Make a DELETE request to /test-management/v1/scheduled-jobs/purge.

List user configurations

Get the list of resources and permissions for the logged in account.

GET /test-management/v1/user-config

Status 200 application/json

Response Body:

[
    {
        "resource": "TEST_DEFINITION",
        "permissions": [
            "READ",
            "CREATE",
            "UPDATE",
            "DELETE"
        ]
    },
    {
        "resource": "TEST_RUN",
        "permissions": [
            "READ",
            "RUN"
        ]
    },
    {
        "resource": "TEST_RESULT",
        "permissions": [
            "READ",
            "UPDATE"
        ]
    }
]
  1. Make a GET request to /test-management/v1/user-config.

  2. The response is an array of Configuration objects.

Map properties to hostnames

Fetch all of the properties that your account has access to.

GET /test-management/v1/property-hostnames

Status 200 application/json

Response Body:

[
    {
        "propertyName": "mwidomski-gss",
        "groupId": 18385,
        "version": 4,
        "hostnames": [
            "www.happy-learning.com"
        ]
    },
    {
        "propertyName": "rpadmana.gsshappylearning.com",
        "groupId": 18315,
        "version": 8,
        "hostnames": [
            "failover.rpadmana.gsshappylearning.com",
            "rpadmana.gsshappylearning.com"
        ]
    }
]

Data

This section provides details for each type of data object the API exchanges.

Download the JSON schemas for this API.

The data schema tables below list membership requirements as follows:

Member is required in requests, or always present in responses, even if its value is empty or null.
Member is optional, and may be omitted in some cases.

Activities

The logged event of a user-performed action, for example, the creation of a test definition or test case, the removal of either, adding a note to a diff, etc.

Download schema: post-activities-request.json

Sample POST request:

{
    "filters": [
        {
            "field": "activityResource",
            "value": "test-definition",
            "ids": [
                "738",
                "495",
                "740"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-case",
            "ids": [
                "1855",
                "1866"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-run",
            "ids": [
                "133"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-difference",
            "ids": [
                "e52a1b76-d33d-11e7-9296-cec278b6b50a"
            ]
        },
        {
            "field": "activityResource",
            "value": "test-difference-note",
            "ids": [
                "fe59f1e6-0022-4119-b05b-71e33c2a0ee2"
            ]
        }
    ]
}

Activities members

Member Type Required Description
filters Activities.filters[] An array of specified filters.
Activities.filters[]: An array of specified filters.
field Enumeration The field on which the filter should be applied. The value must be activityResource.
ids Array While filtering the activities, a logical OR is applied to IDs within the filter. If no IDs are sent, all the activities for the particular field and value are not sent.
value Enumeration The value of the selected field on which the filter should be applied. The value can be test-case, test-definition, test-difference, test-difference-note, and test-run.

TestDefinition

The basic unit of testing in Akamai Test Center. A test definition is associated with a hostname and configured with at least one test case for testing that hostname. Status is active by default but once a test definition is removed it becomes inactive and can no longer be made active.

Download schema: get-test-definition-response.json

Sample GET response:

{
    "testDefinitionId": 738,
    "hostname": "www.example-weather.com",
    "ipVersions": [
        "ipv6"
    ],
    "testDefinitionName": "Weather Test",
    "testDefinitionDescription": "Testing weather prefetch configurations",
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:21+0000",
    "modifiedDate": "2018-03-16T10:46:22+0000",
    "status": "active"
}

TestDefinition members

Member Type Required Description
createdBy String The user who created the test definition.
createdDate String ISO–8601 date string for the time when the test definition was created.
hostname String Hostname to be tested.
ipVersions Array Can be ipv4, ipv6, or both.
modifiedBy String The user who last modified the test definition.
modifiedDate String ISO–8601 date string for the time when the test definition was last modified.
status Enumeration This field denotes whether the test definition is active or has been removed. Can be inactive or active.
testDefinitionDescription String A description about the test definition. 4000-character limit.
testDefinitionId Integer Unique identifier for the test definition.
testDefinitionName String A short title for the test definition. 100-character limit.

TestCase

An object containing data for a single test case, such as which web pages or objects the test definition compares, which response headers are included, and which comparisons are made. Embedded objects here refers to the entities that get loaded after the intial HTML request that is made.

Download schema: get-test-case-response.json

Sample GET response:

{
    "testCaseId": 1855,
    "testDefinitionId": 738,
    "url": "https://www.example-weather.com/",
    "testCaseName": "Base Page",
    "testCaseDescription": "Base Page Test",
    "requestHeaders": [
        {
            "headerName": "Max-Forwards",
            "headerAction": "add",
            "headerValues": "10"
        }
    ],
    "comparisonSettings": {
        "responseCode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "responseHeaders": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "Age",
                "Date",
                "Expires",
                "Server",
                "Via",
                "Set-Cookie",
                "Cache-Control"
            ]
        },
        "cpcode": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cachingOption": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "cacheKey": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        },
        "metadataVariables": {
            "isEnabled": true,
            "includeEmbeddedObjects": true,
            "compareOnly": [],
            "compareAllExcept": [
                "RUM_IS_IPV6",
                "RUA_OUT_IS_APPLIED",
                "RUM_XHR_TEST",
                "RUM_CLIENT_TO_MAPPING_PCT",
                "RANDOM_SAMPLE",
                "RUM_IMPL_PM_GROUPID",
                "RUM_IMPL_PM_GROUPNAME",
                "RUM_IMPL_PM_PRODUCT",
                "RUM_DEBUG"
            ]
        },
        "originServer": {
            "isEnabled": true,
            "includeEmbeddedObjects": true
        }
    },
    "createdBy": "atctestuser",
    "modifiedBy": "atctestuser",
    "createdDate": "2018-03-16T10:46:23+0000",
    "modifiedDate": "2018-03-16T10:46:28+0000",
    "runOrder": 1,
    "status": "active"
}

TestCase members

Member Type Required Description
comparisonSettings TestCase.comparisonSettings Attributes which are used for comparison between different environments.
createdBy String The user who created the test case.
createdDate String ISO–8601 date string for the time when the test definition was created.
modifiedBy String The user who last modified the test case.
modifiedDate String ISO–8601 date string for the time when the test definition was last modified.
requestHeaders TestCase.requestHeaders[] Encapsulates the request headers in the test case.
runOrder Integer An integer representing the order in which the test case will be run as part of its parent test definition.
status Enumeration This field denotes whether the test case is active or has been removed. Can be inactive or active.
testCaseDescription String Description about the test case. 4000-character limit.
testCaseId Integer A unique Identifier for test case resource.
testCaseName String A short title for the test case. 100-character limit.
testDefinitionId Integer A unique Identifier for test definition resource.
url String URL of the page to be tested.
TestCase.comparisonSettings: Attributes which are used for comparison between different environments.
cacheKey TestCase.comparisonSettings.cacheKey The string used by the Akamai Edge Server to identify the requested object in the cache.
cachingOption TestCase.comparisonSettings.cachingOption The caching option allows you to specify how long you want to cache everything in your configuration.
cpcode TestCase.comparisonSettings.cpcode The CP code with which the content from the Akamai Edge Server is being delivered.
metadataVariables TestCase.comparisonSettings.metadataVariables The metadata variables used in the processing of the request.
originServer TestCase.comparisonSettings.originServer The hostname of the origin server.
responseCode TestCase.comparisonSettings.responseCode The numerical part of the HTTP Status Code.
responseHeaders TestCase.comparisonSettings.responseHeaders The response headers of the corresponding HTTP responses.
TestCase.comparisonSettings.cacheKey: The string used by the Akamai Edge Server to identify the requested object in the cache.
includeEmbeddedObjects Boolean If true, the embedded objects for the cache key are included in the comparison made by the test run. If false, they are not.
isEnabled Boolean If true, the cache key is compared by the test run. If false, the cache key is not compared by the test run.
TestCase.comparisonSettings.cachingOption: The caching option allows you to specify how long you want to cache everything in your configuration.
includeEmbeddedObjects Boolean If true, the embedded objects for the caching option are included in the comparison made by the test run. If false, they are not.
isEnabled Boolean If true, the caching option is compared by the test run. If false, the caching option is not compared by the test run.
TestCase.comparisonSettings.cpcode: The CP code with which the content from the Akamai Edge Server is being delivered.
includeEmbeddedObjects Boolean If true, the embedded objects for the CP code are included in the comparison made by the test run. If false, they are not.
isEnabled Boolean If true, the CP code is compared by the test run. If false, the CP code is not compared by the test run.
TestCase.comparisonSettings.metadataVariables: The metadata variables used in the processing of the request.
compareAllExcept Array The list of all metadata variables to be ignored, or not compared, by the test run.
compareOnly Array The list of metadata variables to be included, or compared, by the test run.
includeEmbeddedObjects Boolean If true, the embedded objects for the metadata variables are included in the comparison made by the test run. If false, they are not.
isEnabled Boolean If true, the metadata variables are compared by the test run. If false they are not.
TestCase.comparisonSettings.originServer: The hostname of the origin server.
includeEmbeddedObjects Boolean If true, the embedded objects for the origin server are compared by the test run. If false, they are not.
isEnabled Boolean If true, the origin server is compared by the test run. If false it is not.
TestCase.comparisonSettings.responseCode: The numerical part of the HTTP Status Code.
includeEmbeddedObjects Boolean If true, the embedded objects for the response code are compared by the test run. If false, they are not.
isEnabled Boolean If true, the response code is compared by the test run. If false, it is not.
TestCase.comparisonSettings.responseHeaders: The response headers of the corresponding HTTP responses.
compareAllExcept Array The list of all response headers to be ignored, or not compared, by the test run.
compareOnly Array The list of response headers to be included, or compared, by the test run.
includeEmbeddedObjects Boolean If true, the embedded objects of the response headers are compared by the test run. If false, they are not.
isEnabled Boolean If true, the response headers are compared by the test run. If false, they are not.
TestCase.requestHeaders[]: Encapsulates the request headers in the test case.
headerAction Enumeration add to the list of request headers, modify existing request headers, or filter request headers belonging to this test case.
headerName String The name of the request header.
headerValues String The value of the request header.

TestRun

A test run object signifies that a test run has been started. A test run can have multiple executions.

Download schema: create-test-run-request.json

Sample POST request:

{
    "testDefinitionExecutions": [
        {
            "testDefinitionId": 738,
            "targetHostname": "www.example-weather-production.com",
            "targetEnvironment": "production",
            "ipVersions": [
                "ipv6"
            ],
            "testCaseIds": [
                1855
            ],
            "note": "A sample note"
        },
        {
            "testDefinitionId": 740,
            "targetHostname": "www.example-weather-config-1-production.com",
            "targetEnvironment": "staging",
            "ipVersions": [
                "ipv4",
                "ipv6"
            ],
            "testCaseIds": [
                1991,
                1992
            ],
            "note": "Another sample note"
        }
    ]
}

TestRun members

Member Type Required Description
testDefinitionExecutions TestRun.testDefinitionExecutions[] A test definition execution object.
TestRun.testDefinitionExecutions[]: A test definition execution object.
ipVersions Array IP version can be ipv4, ipv6, or both.
note String A user-defined note about the current test definition under the current test run.
targetEnvironment Enumeration The target environment for the test. Can be either production or staging. The source environment for the test, against which the differences are going to be computed, is always going to be production.
targetHostname String Hostname for the target environment against which the test definition would be run.
testCaseIds Array List of test case IDs that need to be executed in the run. This is a subset of the test cases that belong to the test definition.
testDefinitionId Integer Identifier of the test definition.

Execution

The test definition execution is a component of a test run. A test run can have multiple executions, one for each test definition included in the test run. A test definition execution contains the subset of test cases, IP versions, target hostname, and target environment of the test definition it belongs to.

Download schema: get-test-definition-execution-response.json

Sample GET response:

{
    "testDefinitionExecutionId": 148,
    "testDefinitionId": 738,
    "testRunId": 133,
    "targetHostname": "www.example-weather-production.com",
    "targetEnvironment": "production",
    "submittedBy": "atctestuser",
    "submittedDate": "2018-08-18T11:37:26+0000",
    "status": "completed",
    "diffCount": {
        "total": 2,
        "outstanding": 2
    },
    "ipVersions": [
        "ipv6"
    ],
    "completedDate": "2018-08-18T12:37:26+0000",
    "testCaseIds": [
        1855
    ],
    "note": "A sample note"
}

Execution members

Member Type Required Description
completedDate String ISO–8601 date string for the time at which the test definition execution was completed.
diffCount Execution.diffCount When the status of the test definition execution is ‘completed’, this object will appear in the payload. It gives the total and outstanding number of differences.
errors Execution.errors[] The HTTP problem detail object that signifies the type of error that has occurred.
ipVersions Array The ip version options are ipv4 and ipv6.
note String A note about the test definition execution.
status Enumeration Status of the test definition execution. in_progress is currently running, completed has finished running, failed has stopped running due to an error. deactivated means that there were more than 5 runs for that test definition, after the this test definition execution was created.
submittedBy String The username of the user who initiated the test definition execution.
submittedDate String The ISO–8601 date string for the time at which the test definition execution was initiated.
targetEnvironment Enumeration The target environment for the test. Can be either production or staging.
targetHostname String Hostname for the target environment.
testCaseIds Array Identifier of the test case.
testDefinitionExecutionId Integer Identifier of the test definition execution.
testDefinitionId Integer Identifier of the test definition.
testRunId Integer Identifier of the test run.
Execution.diffCount: When the status of the test definition execution is ‘completed’, this object will appear in the payload. It gives the total and outstanding number of differences.
outstanding Integer This number represents the number of unaccepted diffs.
total Integer This number represents the total number of diffs that was generated.
Execution.errors[]: The HTTP problem detail object that signifies the type of error that has occurred.
ipVersion String The IP version for which the test definition execution has failed.
testCaseId Integer Unique identifier of the test case for which the test definition execution has failed. If the testCaseId field is not present, it means that the complete job has failed. A subet of the test cases belonging to the test definition can be added.
title String A brief explanation of what the error means.
type String A dot-notation string to explain what kind of an error occurred.

Difference

Differences found between the source URL and target URL, under a specific IP version, within a specific geolocation and on a specific browser, as configured in the test cases of the test definition that was run.

Download schema: get-difference-response.json

Sample GET response:

{
    "differenceId": "e52a1b76-d33d-11e7-9296-cec278b6b50a",
    "testCaseId": 1855,
    "sourceUrl": "https://www.example-weather.com/",
    "targetUrl": "https://www.example-weather-production.com/",
    "ipVersion": "ipv6",
    "geoLocation": "us",
    "browser": {
        "name": "chrome",
        "version": "62"
    },
    "comparisonAttribute": "responseHeaders",
    "parameterNames": [
        "Content-Encoding"
    ],
    "sourceValue": "gzip",
    "targetValue": "deflate",
    "isAccepted": false
}

Difference members

Member Type Required Description
browser Difference.browser An object containing browser info.
comparisonAttribute Enumeration The comparison setting which the difference object addresses. Can be any comparison setting: cacheKey, cachingOption, cpcode, metadataVariables, originServer, responseCode, responseHeaders.
differenceId String Unique identifier for the difference.
geoLocation String Identifier of the geolocation.
ipVersion Enumeration The IP version used for this execution. Can be either ipv4 or ipv6.
isAccepted Boolean A boolean value indicating whether the difference has been resolved by the user.
parameterNames Array A string that represents the parsed response header value.
sourceUrl String URL of the object in source environment.
sourceValue String Value of the comparison attribute for the parameter names in source environment.
targetUrl String URL of the object in target environment.
targetValue String Value of the comparison attribute for the parameter names in target environment.
testCaseId Integer Identifier of the test case the difference belongs to.
Difference.browser: An object containing browser info.
name Enumeration Name of the browser. Must be chrome.
version String Version of the browser.

Configuration

List of resources and corresponding permissions for the logged in user.

Download schema: get-user-config-response.json

Sample GET response:

[
    {
        "resource": "TEST_DEFINITION",
        "permissions": [
            "READ",
            "CREATE",
            "UPDATE",
            "DELETE"
        ]
    },
    {
        "resource": "TEST_RUN",
        "permissions": [
            "READ",
            "RUN"
        ]
    },
    {
        "resource": "TEST_RESULT",
        "permissions": [
            "READ",
            "UPDATE"
        ]
    }
]

Configuration members

Member Type Required Description
permissions Array Permissions granted for the corresponding resource.
resource Enumeration Configurable resources include TEST_DEFINITION, TEST_RUN, and TEST_RESULT.

Property

Property resource from Property Manager

Download schema: get-property-response.json

Sample GET response:

{
    "propertyId": "prp_175780",
    "propertyName": "example.com",
    "latestVersion": 2,
    "stagingVersion": 1,
    "productionVersion": null,
    "assetId": "aid_101",
    "note": "Notes about example.com",
    "contractId": "ctr_1-1TJZH5",
    "accountId": "act_1-1TJZFB",
    "groupId": "grp_15225"
}

Property members

Member Type Required Description
accountId String The unique identifier for the account.
assetId String The unique identifier for the asset.
contractId String The unique identifier for the contract.
groupId String The unique identifier for the group.
latestVersion Integer The latest version number.
note String Provides descriptive text for each property.
productionVersion Integer The version of the property deployed on the production environment
propertyId String The unique identifier for the property
propertyName String The display name for the property
stagingVersion Integer The version of the property deployed on the staging environment

HostnameMap

List of properties containing the hostnames

Download schema: post-property-hostnames-response.json

Sample POST response:

[
    {
        "propertyName": "mwidomski-gss",
        "groupId": 18385,
        "version": 4,
        "hostnames": [
            "www.happy-learning.com"
        ]
    },
    {
        "propertyName": "rpadmana.gsshappylearning.com",
        "groupId": 18315,
        "version": 8,
        "hostnames": [
            "failover.rpadmana.gsshappylearning.com",
            "rpadmana.gsshappylearning.com"
        ]
    }
]

HostnameMap members

Member Type Required Description
groupId Integer Version of the property
hostnames Array Hostnames corresponding to the property
propertyName String Name of the property
version Integer Version of the property

Exclusions

Default value lists for comparison settings during test case creation and updation

Download schema: get-comparison-settings-default-values-response.json

Sample GET response:

{
    "responseHeaders": {
        "compareOnly": [],
        "compareAllExcept": [
            "Age",
            "Date",
            "Expires",
            "Server",
            "Via",
            "Set-Cookie",
            "Cache-Control"
        ]
    },
    "metadataVariables": {
        "compareOnly": [
            "PMUSER_*",
            "AKA_PM_*"
        ],
        "compareAllExcept": []
    }
}

Exclusions members

Member Type Required Description
metadataVariables Exclusions.metadataVariables Inclusion/Exclusion list of default values for metadata variables.
responseHeaders Exclusions.responseHeaders Inclusion/Exclusion list of default values for response headers.
Exclusions.metadataVariables: Inclusion/Exclusion list of default values for metadata variables.
compareAllExcept Array Exclusion list of default values for metadata variables.
compareOnly Array Inclusion list of default values for metadata variables.
Exclusions.responseHeaders: Inclusion/Exclusion list of default values for response headers.
compareAllExcept Array Exclusion list of default values for response headers.
compareOnly Array Inclusion list of default values for response headers.

Headers

HTTP request and response headers.

Download schema: get-http-headers-response.json

Sample GET response:

{
    "requestHeaders": [
        {
            "headerName": "A-IM",
            "possibleValues": [
                "vcdiff, gdiff",
                "vcdiff, gdiff;q=0.3",
                "vcdiff, diffe, gzip"
            ]
        },
        {
            "headerName": "Accept",
            "possibleValues": [
                "audio/*",
                "text/html",
                "text/plain",
                "image/jpeg"
            ]
        },
        {
            "headerName": "Accept-Additions",
            "possibleValues": []
        },
        {
            "headerName": "Accept-Charset",
            "possibleValues": [
                "iso-8859-5",
                "unicode-1-1"
            ]
        },
        {
            "headerName": "Accept-Datetime",
            "possibleValues": []
        },
        {
            "headerName": "Accept-Encoding",
            "possibleValues": [
                "compress",
                "gzip",
                "identity",
                "deflate"
            ]
        },
        {
            "headerName": "Accept-Features",
            "possibleValues": []
        },
        {
            "headerName": "Accept-Language",
            "possibleValues": [
                "en-US",
                "da",
                "en-gb",
                "en"
            ]
        }
    ],
    "responseHeaders": [
        {
            "headerName": "Access-Control",
            "possibleValues": []
        },
        {
            "headerName": "Access-Control-Allow-Credentials",
            "possibleValues": []
        }
    ]
}

Headers members

Member Type Required Description
requestHeaders Headers.requestHeaders[] List of standard HTTP request headers.
responseHeaders Headers.responseHeaders[] List of standard HTTP response headers.
Headers.requestHeaders[]: List of standard HTTP request headers.
headerName String The name of the request header.
possibleValues Array The value of the request header.
Headers.responseHeaders[]: List of standard HTTP response headers.
headerName String The name of the response header.
possibleValues Array The value of the response header.

Errors

This section provides details on the data object that reflects the API’s common response to error cases, and lists the API’s range of response status codes for both error and success cases. Some APIs may return additional data in the form of extension fields.

Error responses

This API responds with JSON objects that adhere to the HTTP Problem Details standard.

{
    "type": "authorization.error",
    "title": "Authorization Error",
    "status": 403,
    "errors": [
        {
            "type": "read.permission.missing",
            "title": "Read Permission Missing",
        }
    ]
}

HTTP status codes

This section lists the full range of response codes the API may generate.

The top level error object contains type, title, status, and optionally errors. The second-level error objects contain type, title, and optionally errors.

Code Description
200 The operation was successful.
201 Resource successfully created.
202 Resource successfully accepted.
204 Successfully processed request.
400 Bad Request.
401 Authentication failure.
403 Access is forbidden.
404 Resource not found.
423 Requested resource is locked.
429 Too many requests. See Rate limiting for more information.
500 Internal server error.

Last modified: 8/23/2018