--- title: Add test results to change requests using test API description: Add test results to DevOps change requests using the test capability of the DevOps - POST /devops/tool/\{capability\} API. The API is available for all test types for various tools connected to DevOps Change Velocity. locale: en-US canonical_url: https://www.servicenow.com/docs/r/australia/it-service-management/devops-change-velocity/test-api-tools.html release: australia product: DevOps Change Velocity classification: devops-change-velocity topic_type: reference last_updated: "2026-03-12" reading_time_minutes: 6 breadcrumb: [DevOps test tool integration, User created, Integrate, DevOps Change Velocity, IT Service Management] --- # Add test results to change requests using test API Add test results to DevOps change requests using the test capability of the DevOps - POST /devops/tool/\{capability\} API. The API is available for all test types for various tools connected to DevOps Change Velocity. For more information about the API, see [DevOps - POST /devops/tool/\{capability\}](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/api-reference/devops-api.md). To use the API in Azure DevOps, GitHub, and Jenkins, you must use the format mentioned in the respective sections below. **Prerequisites** Role required: sn\_devops.admin Make sure that the test type you want to use in the API is available as a test type in DevOps Change Velocity and mapped to the respective orchestration tool. 1. Navigate to **DevOps Change Workspace** > **Administration** > **Integrations** > **Test types**. You can also use the classic UI navigation **DevOps** > **Integrations** > **Test Types**. 2. Verify if the test type is available in the Test types table. \[Omitted image "test-api-12.png"\] Alt text: Test types table. 3. For custom test types, select **New** and add the test type to the list. 1. In the **Test type** field, enter a name for your test type. 2. From the **Test category** list, select the category of your test type. 3. Select **Save**. 4. Navigate to **DevOps Change Workspace** > **Administration** > **Integrations** > **Test type mappings**. You can also use the classic UI navigation **DevOps** > **Integrations** > **Test Type Mappings**. 5. Verify if the test type is mapped to your orchestration tool. \[Omitted image "test-api-13.png"\] Alt text: Test type mappings table. 6. If the mapping is not available, then select **New** and create the mapping. 1. From the **Test type** list, select the test type that you want to map. 2. From the **Tool integration** list, select your orchestration tool. 3. Select **Save**. ## Azure DevOps For Azure DevOps pipelines, use the format given here to add test results to change requests for various test types. Format for URL suffix and parameters: ``` /api/sn_devops/v1/devops/tool/test?toolId=&testType= ``` - The parameter **toolId** must be a valid Tool Id from a connected and configured tool in DevOps Change Velocity. - The parameter **testType** should have a test type mapping in DevOps Change Velocity. Within the **Body**, you must pass the parameters based on the test type. **Note:** For the generic connection, use the following: - username: devops.integration.user - password: <devops.integration.user password> **Pipeline configuration for performance tests** Sample parameters for the body: ``` { "name": "Perf. tests DEMO5", "duration": 0, "maximumVirtualUsers": 10, "throughput": "5/min", "maximumTime": 10000, "minimumTime": 5000, "averageTime": 7000, "ninetyPercent": 8000, "standardDeviation": 2, "startTime": "2023-12-14T23:31:31z", "finishTime": "2023-12-14T23:40:32z", "buildNumber": $(Build.BuildNumber), "stageName": "Test API Job", "pipelineName": "TEST-CI-PIPELINE" } ``` \[Omitted image "test-api-05.png"\] Alt text: Sample Azure DevOps pipeline configuration for performance tests. **Performance test summary in your Now instance**: \[Omitted image "test-api-06.png"\] Alt text: Performance test summary. **Test summary attached to your DevOps change request**: \[Omitted image "test-api-07.png"\] Alt text: Change request test summary. **Pipeline configuration for other functional and unit tests** Sample parameters for the body: ``` { "name":" Smoke Test summary", "duration":0.0, "passedTests":1, "failedTests":1, "skippedTests":1, "blockedTests":1, "totalTests":4, "startTime": "2023-12-14T23:31:31z", "finishTime": "2023-12-15T23:31:31z", "buildNumber": $(Build. BuildNumber), "stageName": "Test API Job", "pipelineName": "TEST-CI-PIPELINE" } ``` \[Omitted image "test-api-03.png"\] Alt text: Sample Azure DevOps pipeline configuration for other functional tests. **Test summary attached to your DevOps change request**: \[Omitted image "test-api-04.png"\] Alt text: Change request test summary. ## Azure DevOps YAML pipeline Sample pipeline: ``` stages: - stage: BashScript jobs: - job: 'bash' steps: - script: echo Hello, world! displayName: 'BashScript' - stage: TestAPI dependsOn: BashScript jobs: - job: 'RESTTestAPI' # dependsOn: BashScript pool: server steps: - task: InvokeRESTAPI@1 displayName: 'Invoke REST API: POST' inputs: connectionType: 'connectedServiceName' serviceConnection: 'v01 - generic connection' method: 'POST' body: | { "name": "Performance test summary kl2", "duration": 0, "maximumVirtualUsers": 10, "throughput": "5/min", "maximumTime": 10000, "minimumTime": 5000, "averageTime": 7000, "ninetyPercent": 8000, "standardDeviation": 2, "startTime": "2023-12-14T23:31:31z", "finishTime": "2023-12-14T23:40:32z", "buildNumber": $(Build.BuildId), "stageName": "TestAPI/RestTestAPI", "pipelineName": "TESTYMLPipeline" } urlSuffix: '/api/sn_devops/v1/devops/tool/test?toolId=&testType=' waitForCompletion: 'false' ``` \[Omitted image "test-api-08.png"\] Alt text: Azure DevOps yml pipeline. **Release pipeline** \[Omitted image "test-api-09.png"\] Alt text: Azure DevOps release pipeline yml. ## GitHub For GitHub pipelines, use the format given here to add test results to change requests for various test types. **Pipeline configuration for performance tests** Sample pipeline: ``` name: Test API Call Perf on: workflow_dispatch: jobs: post_api_call_perf: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v2 - name: post_api_call_perf run: | apiUrl="https://.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=&testType=" requestBody='{"toolId": "", "buildNumber": '${{ github.run_number }}' , "workflow": "Test API Call Perf", "repository": "", "stageName":"post_api_call_perf","pipelineName":"Test API Call Perf", "testType": "Load", "buildNumber": '${{ github.run_number }}', "buildId": '${{ github.run_id }}' , "attemptNumber" : '${{ github.run_attempt }}', "name": "GitHub Test Summary - Performance 1.0","duration": 0.0,"maximumVirtualUsers": 10,"throughput": "5/min","maximumTime": 1000,"minimumTime": 5000,"averageTime": 7000,"startTime": "2023-12-14T23:31:31z","finishTime": "2023-12-14T23:31:31z","ninetyPercent": 8000, "standardDeviation": 2.0 }' auth="devops.integration.user: in base64 encoded" authHeader="Basic $auth" response=$(curl -X POST -H "Content-Type: application/json" -H "Authorization: $authHeader" -d "$requestBody" $apiUrl) exitCode=$? if [ $exitCode -eq 0 ]; then echo "API call successful!" echo "Response: $response" else echo "API call failed!" echo "Response: $response" exit 1 fi ``` \[Omitted image "test-api-11.png"\] Alt text: Sample GitHub pipeline configuration for performance tests. **Pipeline configuration for other functional and unit tests** Sample pipeline: ``` name: Test API Call on: workflow_dispatch: jobs: post_api_call: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v2 - name: post_api_call run: | apiUrl="https://.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=&testType=" requestBody='{"toolId": "", "buildNumber": '${{ github.run_number }}' , "workflow": "Test API Call", "repository": "", "stageName":"post_api_call","pipelineName":"TestAPICall", "testType": "Smoke", "buildNumber": '${{ github.run_number }}', "buildId": '${{ github.run_id }}' , "attemptNumber" : '${{ github.run_attempt }}', "testSummaries": [{"name": "GitHub Test Summary - smoke","passedTests": 1,"failedTests": 1,"skippedTests": 1,"ignoredTests": 0,"blockedTests": 1,"totalTests": 4,"startTime": "2023-12-14T23:31:31z","endTime": "2023-12-14T23:31:31z","duration": 0.0,"testType": "Smoke", "suites": []}] }' auth="devops.integration.user: in base64 encoded" authHeader="Basic $auth" response=$(curl -X POST -H "Content-Type: application/json" -H "Authorization: $authHeader" -d "$requestBody" $apiUrl) exitCode=$? if [ $exitCode -eq 0 ]; then echo "API call successful!" echo "Response: $response" else echo "API call failed!" echo "Response: $response" exit 1 fi ``` \[Omitted image "test-api-10.png"\] Alt text: Sample GitHub pipeline configuration for other functional tests. ## Jenkins For Jenkins pipelines, use the format given here to add test results to change requests for various test types. **Pipeline configuration for performance tests** Sample pipeline: ``` pipeline { agent any stages { stage('POST API Call') { steps { script { def apiUrl = 'https://.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=&testType=' def requestBody = [ name: "Performance Load tests jenkins", duration: 0.0, maximumVirtualUsers: 10, throughput: "6/min", maximumTime: 1000, minimumTime: 300, averageTime: 700, ninetyPercent: 600, standardDeviation: 2.0, startTime: "2023-12-14T23:31:31z", finishTime: "2023-12-14T23:40:32z", buildNumber: env.BUILD_NUMBER, stageName: "POST API Call", pipelineName: "KLPerformanceTestPipeline" ] def auth = "" // devops.integration.user: in base64 encoded. def authHeader = "Basic " + auth def response = httpRequest( contentType: 'APPLICATION_JSON', httpMode: 'POST', requestBody: groovy.json.JsonOutput.toJson(requestBody), url: apiUrl, customHeaders: [[name: 'Authorization', value: authHeader]] ) if (response.status == 200 || response.status == 201) { echo "API call successful!" echo "Response: ${response.content}" } else { error "API call failed with status ${response.status}" } } } } } } ``` \[Omitted image "test-api-01.png"\] Alt text: Sample Jenkins pipeline configuration for performance tests. **Pipeline configuration for other functional and unit tests** Sample pipeline: ``` pipeline { agent any stages { stage('POST API Call') { steps { script { def apiUrl = 'https://.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=&testType=' def requestBody = [ name: "Smoke tests", duration: 0.0, passedTests: 1, failedTests: 1, skippedTests: 1, blockedTests: 1, totalTests: 4, startTime: "2023-12-14T23:31:31z", finishTime: "2023-12-15T23:31:31z", buildNumber: env.BUILD_NUMBER, stageName: "POST API Call", pipelineName: "TestPipelineKL" ] def auth = "" // devops.integration.user: in base64 encoded. def authHeader = "Basic " + auth def response = httpRequest( contentType: 'APPLICATION_JSON', httpMode: 'POST', requestBody: groovy.json.JsonOutput.toJson(requestBody), url: apiUrl, customHeaders: [[name: 'Authorization', value: authHeader]] ) if (response.status == 200 || response.status == 201) { echo "API call successful!" echo "Response: ${response.content}" } else { error "API call failed with status ${response.status}" } } } } } } ``` \[Omitted image "test-api-02.png"\] Alt text: Sample Jenkins pipeline configuration for other functional tests. ## Limitations of the test API - Waiting logic will not be taken care of. - Re-run scenarios cannot be handled. **Parent Topic:**[DevOps test tool integration](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/it-service-management/devops-change-velocity/dev-ops-test-tool-integration.md)