Fügen Sie mithilfe der Test-API Testergebnisse zu Change-Anforderungen hinzu
Fügen Sie Testergebnisse zu hinzu DevOps Change-Anforderungen mit der Testfunktion der DevOps-API – POST /devops/Tool/{Capability}. Die API ist für alle Testtypen für verschiedene mit verbundene Tools verfügbar DevOps Change-Geschwindigkeit.
Weitere Informationen zur API finden Sie unter DevOps - POST /devops/tool/{capability}. Zur Verwendung der API in Azure DevOps, GitHub und Jenkins müssen Sie das in den entsprechenden Abschnitten unten erwähnte Format verwenden.
Voraussetzungen
Erforderliche Rolle: sn_devops.admin
Sie müssen sicherstellen, dass der Testtyp, den Sie in der API verwenden möchten, als Testtyp in verfügbar ist DevOps Change-Geschwindigkeit Und dass es dem jeweiligen Orchestration-Tool zugeordnet ist.
- Navigieren zu an.
Sie können auch die klassische UI-Navigation verwenden an.
- Überprüfen Sie, ob der Testtyp in der Tabelle „Testtypen“ verfügbar ist.
- Wählen Sie für anwenderdefinierte Testtypen aus Neu Und fügen Sie der Liste den Testtyp hinzu.
- In Testtyp Geben Sie einen Namen für Ihren Testtyp ein.
- Von Testkategorie Wählen Sie die Kategorie Ihres Testtyps aus.
- Wählen Sie Speichern.
- Navigieren zu an.
Sie können auch die klassische UI-Navigation verwenden an.
- Überprüfen Sie, ob der Testtyp Ihrem Orchestration-Tool zugeordnet ist.
- Wenn die Zuordnung nicht verfügbar ist, wählen Sie aus Neu Und erstellen Sie die Zuordnung.
- Von Testtyp Wählen Sie den Testtyp aus, den Sie zuordnen möchten.
- Von Toolintegration Wählen Sie Ihr Orchestration-Tool aus.
- Wählen Sie Speichern.
Azure DevOps
Für Azure DevOps Pipelines verwenden Sie das hier angegebene Format, um Testergebnisse zu Change-Anforderungen für verschiedene Testtypen hinzuzufügen.
/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>- Der Parameter toolIdMuss eine gültige Tool-ID aus einem verbundenen und konfigurierten Tool in sein DevOps Change-Geschwindigkeit.
- Der Parameter testTypeMuss eine Testtypzuordnung in haben DevOps Change-Geschwindigkeit.
Innerhalb von Body, Sie müssen die Parameter basierend auf dem Testtyp übergeben.
- Anwendername: devops.integration.user
- Passwort: <devops.integration.user password>
Pipeline-Konfiguration für Leistungstests
{
"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"
}Leistungstestzusammenfassung in Ihrer Now-Instanz :
Testzusammenfassung, die an Ihre DevOps-Change-Anforderung angehängt ist :
Pipeline-Konfiguration für andere Funktions- und Einheitentests
{
"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"
}Testzusammenfassung, die an Ihre DevOps-Change-Anforderung angehängt ist :
Azure DevOps YAML-Pipeline
Beispiel-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=<devops_ToolID>&testType=<test_type>'
waitForCompletion: 'false'
Release-Pipeline
GitHub
Für GitHub Pipelines verwenden Sie das hier angegebene Format, um Testergebnisse zu Change-Anforderungen für verschiedene Testtypen hinzuzufügen.
Pipeline-Konfiguration für Leistungstests
Beispiel-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://<your_instance>.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolId>&testType=<performance_test_type>"
requestBody='{"toolId": "<devops_ToolId>", "buildNumber": '${{ github.run_number }}' , "workflow": "Test API Call Perf", "repository": "<your_GitHub_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:<password> 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
Pipeline-Konfiguration für andere Funktions- und Einheitentests
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://<your_instance>.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>"
requestBody='{"toolId": "<devops_ToolID>", "buildNumber": '${{ github.run_number }}' , "workflow": "Test API Call", "repository": "<your_GitHub_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:<password> 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
Jenkins
Für Jenkins Pipelines verwenden Sie das hier angegebene Format, um Testergebnisse zu Change-Anforderungen für verschiedene Testtypen hinzuzufügen.
Pipeline-Konfiguration für Leistungstests
pipeline {
agent any
stages {
stage('POST API Call') {
steps {
script {
def apiUrl = 'https://<your_instance>.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<performance_test_type>'
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 = "<password>" // devops.integration.user:<password> 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}"
}
}
}
}
}
}Pipeline-Konfiguration für andere Funktions- und Einheitentests
pipeline {
agent any
stages {
stage('POST API Call') {
steps {
script {
def apiUrl = 'https://<your_instance>.service-now.com/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>'
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 = "<password>" // devops.integration.user:<password> 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}"
}
}
}
}
}
}Einschränkungen der Test-API
- Wartelogik wird nicht berücksichtigt.
- Szenarien der erneuten Ausführung können nicht verarbeitet werden.