ATF Code Coverage API
The ATF Code Coverage API provides endpoints to compute code coverage from Automated Test Framework (ATF) runs. Coverage can be retrieved by filtered line numbers, for specific script IDs, or for all scripts covered by a set of test suite/test runs.
ATF code coverage is a tool that enables you to determine what percentage of code in a deployment request is covered by ATF test suites.
By default, if ATF test suites cover less than 70% of the code in a deployment request, ReleaseOps transitions the deployment request to the Reconciling state and a test failure task is automatically created. You can adjust the ATF code coverage threshold in the deployment request assessment playbook. For more information, see Set Automated Test Framework (ATF) code coverage.
For information on ATF and Performance Analyzer, see Testing and debugging applications
ATF Code Coverage - POST /now/atf/code_coverage/all
Aggregates coverage across all scripts covered by the provided ATF runs. Supports combining test suite runs and individual test runs.
URL format
Versioned URL: /api/now/v1/atf/code_coverage/all
Default URL: /api/now/atf/code_coverage/all
Supported request parameters
| Name | Description |
|---|---|
| api_version | Optional. Version of the endpoint to access. For example, v1 or v2. Only specify this value to use an endpoint version other than the
latest.
Data type: String |
| Name | Description |
|---|---|
| None |
| Name | Description |
|---|---|
| test_suite_result_ids | Required unless test_result_ids are provided. List of test suite result sys_ids.Table: Test Suite Results [sys_atf_test_suite_result] Data type: Array of strings |
| test_result_ids | Required unless test_suite_ result_ids are provided. List of test result sys_ids to include (can be combined with suites). Table: Test Results [sys_atf_test_result] Data type: Array of strings |
| verbose | Flag that indicates level of detail to provide in the response for each custom test script. Valid values:
Default: false Data type: Boolean |
| sys_scopes | Filter results to specified application scopes (e.g., ["x_my_app", "global"]). Multiple scopes use OR logic, so any matching scope is included. No filtering occurs if any empty or NULL array is
provided.Data type: Array of strings |
Headers
The following request and response headers apply to this HTTP action only, or apply to this action in a distinct way. For a list of general headers used in the REST API, see Supported REST API headers.
| Header | Description |
|---|---|
| Accept | Data format of the response body. Supported types: application/json or application/xml.
Default: application/json |
| Header | Description |
|---|---|
| None |
Status codes
The following status codes apply to this HTTP action. For a list of possible status codes used in the REST API, see REST API HTTP response codes.
| Status code | Description |
|---|---|
| 200 | Successful. The request was successfully processed. |
| 400 | Bad Request. A bad request type or malformed request was detected. |
| 500 | Internal server error. An unexpected error occurred while processing the request. The response contains additional information about the error. |
Response body parameters (JSON)
| Name | Description |
|---|---|
| link | Link to the request record. Data type: String |
| details.<scriptId> | Lists the ATF aggregation coverage percent of each custom test script by script sys_id. Data type: Number |
| api_request_sys_id | The sys_id of the request. Table: ATF code coverage API requests [sys_atf_code_coverage_request] Data type: String |
| result | Success or error message. Error response formats:
Possible errors:
Data type: String |
| total | Overall code coverage percentage reflecting the combined ATF code coverage of the scripts listed in the details property. The value is zero if no custom scripts are associated with the tests
provided or no percentage of code coverage has been provided. Possible values: 0-100 Data type: Number |
| truncation_message | If request data was truncated during persistence, provides details about what scripts have truncated information. Example message:
Data type: String |
| was_truncated | Flag that indicates whether request data was truncated during persistence. To reduce truncation, you can change the default number of characters supported. For example, Valid values:
Data type: Boolean Default number of characters: 4000 |
cURL request
The following example shows how to retrieve all of the code coverage for a selected test result suite and test result.
curl "https://instance.service-now.com/api/now/atf/code_coverage/all" \
--request POST \
--header "Accept:application/json" \
--header "Content-Type:application/json" \
--data "{
\"test_suite_result_ids\": [\"5f81c7c4ff943210b88affffffffffc5\"],
\"test_result_ids\": [\"bb8daec1ff103210b88affffffffff1c\"],
\"verbose\": true,
\"sys_scopes\": [\"x_my_app\", \"global\"]
}" \
--user 'username':'password'
Output:
{
"result": "success",
"total": 73,
"details": {
"sys_script_include_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6": 85,
"sys_script_include_b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7": 92,
"sys_ui_script_c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8": 45,
"sys_script_d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9": 68,
"sys_script_include_e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0": 100
},
"api_request_sys_id": "f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1",
"link": "https://instance.service-now.com/sys_atf_code_coverage_request.do?sys_id=f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1"
}
ATF Code Coverage - POST /now/atf/code_coverage/by_script_id
Computes coverage for specific script records.
For a list of all scripts, use ALL endpoint.
URL format
Versioned URL: /api/now/v1/atf/code_coverage/by_script_id
Default URL: /api/now/atf/code_coverage/by_script_id
Supported request parameters
| Name | Description |
|---|---|
| api_version | Optional. Version of the endpoint to access. For example, v1 or v2. Only specify this value to use an endpoint version other than the
latest.
Data type: String |
| Name | Description |
|---|---|
| None |
| Name | Description |
|---|---|
| test_suite_result_ids | Required unless test_result_ids are provided. List of test suite result sys_ids.Table: Test Suite Results [sys_atf_test_suite_result] Data type: Array of strings |
| test_result_ids | Required unless test_suite_ result_ids are provided. List of test result sys_ids to include (can be combined with suites). Table: Test Results [sys_atf_test_result] Data type: Array of strings |
| script_array | Required. One or more valid script sys_ids to evaluate for code coverage. Must contain at least one valid (non-empty) script identifier. Null, empty, or whitespace-only entries are filtered out. Table: Metadata Tracing [sys_traced_metadata] Data type: Array |
| verbose | Flag that indicates level of detail to provide in the response for each custom test script. Valid values:
Default: false Data type: Boolean |
| sys_scopes | Filter results to specified application scopes (e.g., ["x_my_app", "global"]). Multiple scopes use OR logic, so any matching scope is included. No filtering occurs if any empty or NULL array is
provided.Data type: Array of strings |
Headers
The following request and response headers apply to this HTTP action only, or apply to this action in a distinct way. For a list of general headers used in the REST API, see Supported REST API headers.
| Header | Description |
|---|---|
| Accept | Data format of the response body. Supported types: application/json or application/xml.
Default: application/json |
| Header | Description |
|---|---|
| None |
Status codes
The following status codes apply to this HTTP action. For a list of possible status codes used in the REST API, see REST API HTTP response codes.
| Status code | Description |
|---|---|
| 200 | Successful. The request was successfully processed. |
| 400 | Bad Request. A bad request type or malformed request was detected. |
| 500 | Internal server error. An unexpected error occurred while processing the request. The response contains additional information about the error. |
Response body parameters (JSON)
| Name | Description |
|---|---|
| link | Link to the request record. Data type: String |
| details.<scriptId> | Lists the ATF aggregation coverage percent of each custom test script by script sys_id. Data type: Number |
| api_request_sys_id | The sys_id of the request. Table: ATF code coverage API requests [sys_atf_code_coverage_request] Data type: String |
| result | Success or error message. Error response formats:
Possible errors:
Data type: String |
| total | Overall code coverage percentage reflecting the combined ATF code coverage of the scripts listed in the details property. The value is zero if no custom scripts are associated with the tests
provided or no percentage of code coverage has been provided. Possible values: 0-100 Data type: Number |
| truncation_message | If request data was truncated during persistence, provides details about what scripts have truncated information. Example message:
Data type: String |
| was_truncated | Flag that indicates whether request data was truncated during persistence. To reduce truncation, you can change the default number of characters supported. For example, Valid values:
Data type: Boolean Default number of characters: 4000 |
Additional information
Large request payloads may be truncated when persisted if the request data exceeds database field limits.
- test_suite_results - JSON array of test suite result IDs.
- test_results - JSON array of test result IDs.
- metadata_info - JSON object containing filtered lines or a script array.
If the was_truncated property is true, details are provided in the truncation_message property of the response body. Additionally, the system logs the following message:
Field <table_name>.<field_name> truncated from <original_length> to <truncated_length> characters (max: <max_field_length>). Consider increasing column length to prevent data loss"
- If glide.db.truncate_utf8 is true, the information truncates at UTF-8 byte boundaries. This setting is safer for multi-byte characters.
- If glide.db.truncate_utf8 is false (default), the information truncates at character boundaries. The default boundary is 4000 characters.
cURL request
The following example shows how to retrieve the code coverage for a selected test result suite filtered by a specific test script. When verbose is false or omitted, the
details object is empty. Only the overall total percentage is returned.
curl "https://instance.service-now.com/api/now/atf/code_coverage/by_script_id" \
--request POST \
--header "Accept:application/json" \
--header "Content-Type:application/json" \
--data "{
\"test_suite_result_ids\": [\"5f81c7c4ff943210b88affffffffffc5\"],
\"script_array\": [
\"sys_script_include_db95cb370a0a0b2b00244880b5cacda7\",
\"sys_script_include_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6\"
]
}" \
--user 'username':'password'
Output:
{
"result": "success",
"total": 78,
"details": {},
"api_request_sys_id": "a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2",
"link": "https://instance.service-now.com/sys_atf_code_coverage_request.do?sys_id=a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2"
}
ATF Code Coverage - POST /now/atf/code_coverage/by_line_number
Computes code coverage using a set of filtered line numbers per metadata record.
URL format
Versioned URL: /api/now/v1/atf/code_coverage/by_line_number
Default URL: /api/now/atf/code_coverage/by_line_number
Supported request parameters
| Name | Description |
|---|---|
| api_version | Optional. Version of the endpoint to access. For example, v1 or v2. Only specify this value to use an endpoint version other than the
latest.
Data type: String |
| Name | Description |
|---|---|
| None |
| Name | Description |
|---|---|
| test_suite_result_ids | Required unless test_result_ids are provided. List of test suite result sys_ids.Table: Test Suite Results [sys_atf_test_suite_result] Data type: Array of strings |
| test_result_ids | Required unless test_suite_ result_ids are provided. List of test result sys_ids to include (can be combined with suites). Table: Test Results [sys_atf_test_result] Data type: Array of strings |
| filtered_lines | Required. Map of metadata sys_ids and corresponding code lines to designate for code coverage (e.g., { "<metadata_sys_id>": { "script": [...] } }).Data type: Object |
| filtered_lines.<sys_id> | Required, must not be empty. One or more script sys_ids to evaluate for code coverage. Must contain at least one valid (non-empty) script identifier. Null, empty, or whitespace-only entries are filtered out. Table: Metadata Tracing [sys_traced_metadata] Data type: Object |
| filtered_lines.<sys_id>.script | Required. List of line numbers and strings of ranges of lines numbers. All values provided must be positive integers greater than or equal to 1. Valid line number formats:
Example: Data type: Array |
| verbose | Flag that indicates level of detail to provide in the response for each custom test script. Valid values:
Default: false Data type: Boolean |
| sys_scopes | Filter results to specified application scopes (e.g., ["x_my_app", "global"]). Multiple scopes use OR logic, so any matching scope is included. No filtering occurs if any empty or NULL array is
provided.Data type: Array of strings |
Headers
The following request and response headers apply to this HTTP action only, or apply to this action in a distinct way. For a list of general headers used in the REST API, see Supported REST API headers.
| Header | Description |
|---|---|
| Accept | Data format of the response body. Supported types: application/json or application/xml.
Default: application/json |
| Header | Description |
|---|---|
| None |
Status codes
The following status codes apply to this HTTP action. For a list of possible status codes used in the REST API, see REST API HTTP response codes.
| Status code | Description |
|---|---|
| 200 | Successful. The request was successfully processed. |
| 400 | Bad Request. A bad request type or malformed request was detected. |
| 500 | Internal server error. An unexpected error occurred while processing the request. The response contains additional information about the error. |
Response body parameters (JSON)
| Name | Description |
|---|---|
| link | Link to the request record. Data type: String |
| details.<scriptId> | Lists the ATF aggregation coverage percent of each custom test script by script sys_id. Data type: Number |
| api_request_sys_id | The sys_id of the request. Table: ATF code coverage API requests [sys_atf_code_coverage_request] Data type: String |
| result | Success or error message. Error response formats:
Possible errors:
Data type: String |
| total | Overall code coverage percentage reflecting the combined ATF code coverage of the scripts listed in the details property. The value is zero if no custom scripts are associated with the tests
provided or no percentage of code coverage has been provided. Possible values: 0-100 Data type: Number |
| truncation_message | If request data was truncated during persistence, provides details about what scripts have truncated information. Example message:
Data type: String |
| was_truncated | Flag that indicates whether request data was truncated during persistence. To reduce truncation, you can change the default number of characters supported. For example, Valid values:
Data type: Boolean Default number of characters: 4000 |
Additional information
Large request payloads may be truncated when persisted if the request data exceeds database field limits.
- test_suite_results - JSON array of test suite result IDs.
- test_results - JSON array of test result IDs.
- metadata_info - JSON object containing filtered lines or a script array.
If the was_truncated property is true, details are provided in the truncation_message property of the response body. Additionally, the system logs the following message:
Field <table_name>.<field_name> truncated from <original_length> to <truncated_length> characters (max: <max_field_length>). Consider increasing column length to prevent data loss"
- If glide.db.truncate_utf8 is true, the information truncates at UTF-8 byte boundaries. This setting is safer for multi-byte characters.
- If glide.db.truncate_utf8 is false (default), the information truncates at character boundaries. The default boundary is 4000 characters.
cURL request
The following example shows how to retrieve all code coverage for a selected test result suite and test result.
curl "https://instance.service-now.com/api/now/atf/code_coverage/by_line_number" \
--request POST \
--header "Accept:application/json" \
--header "Content-Type:application/json" \
--data "{
\"test_suite_result_ids\": [\"5f81c7c4ff943210b88affffffffffc5\"],
\"test_result_ids\": [\"bb8daec1ff103210b88affffffffff1c\"],
\"filtered_lines\": {
\"sys_script_include_db95cb370a0a0b2b00244880b5cacda7\": {
\"script\": [1, \"3-6\", 7, \"10-12\"]
}
},
\"verbose\": true,
\"sys_scopes\": [\"x_my_app\", \"global\"]
}" \
--user 'username':'password'
Output:
{
"result": "success",z
"total": 64,
"details": {
"sys_script_include_db95cb370a0a0b2b00244880b5cacda7": 80,
"sys_ui_script_c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8": 50
},
"api_request_sys_id": "b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3",
"link": "https://instance.service-now.com/sys_atf_code_coverage_request.do?sys_id=b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3",
"was_truncated": false
}