Fügen Sie Change-Anforderungen mithilfe der Test-API Testergebnisse hinzu
Fügen Sie Change-Anforderungen von DevOps mithilfe der Testfunktionalität der API „DevOps – POST /devops/tool/{capability}“ Testergebnisse hinzu. Die API ist für alle Testtypen für verschiedene mit DevOps Change-Geschwindigkeitverbundene Tools verfügbar.
Weitere Informationen zur API finden Sie unter DevOps - POST /devops/tool/{capability}. Um die API in Azure DevOps, GitHub und Jenkins zu verwenden, 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 DevOps Change-Geschwindigkeit verfügbar ist und dem entsprechenden 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 bei anwenderdefinierten Testtypen Neu, und fügen Sie den Testtyp der Liste hinzu.
- Geben Sie im Feld Testtyp einen Namen für Ihren Testtyp ein.
- Wählen Sie in der Liste Testkategorie 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 Neu, und erstellen Sie die Zuordnung.
- Wählen Sie in der Liste Testtyp den Testtyp aus, den Sie zuordnen möchten.
- Wählen Sie in der Liste Toolintegration Ihr Orchestration-Tool aus.
- Wählen Sie Speichern.
Azure DevOps
Verwenden Sie für Azure DevOps Pipelines das hier angegebene Format, um Change-Anforderungen für verschiedene Testtypen Testergebnisse hinzuzufügen.
/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>- Der Parameter toolId muss eine gültige Tool-ID aus einem verbundenen und konfigurierten Tool in DevOps Change-Geschwindigkeitsein.
- Der Parameter testType muss eine Testtypzuordnung in DevOps Change-Geschwindigkeithaben.
In Bodymüssen Sie die Parameter basierend auf dem Testtyp übergeben.
- Anwendername: devops.integration.user
- Passwort:<devops.integration.user password>
Pipelinekonfiguration 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"
}Zusammenfassung des Leistungstests in Ihrer Now-Instanz:
Testzusammenfassung, die an Ihre DevOps-Change-Anforderung angehängt ist:
Pipelinekonfiguration für andere Funktionstests und Komponententests
{
"name":" Smoke Test summary",
"duration":0.0,
"passedTests":1,
"failed Tests":1,
"skipped Tests":1,
"blockedTests":1,
"total Tests":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
Beispielpipeline:
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
Verwenden Sie für GitHub Pipelines das hier angegebene Format, um Change-Anforderungen für verschiedene Testtypen Testergebnisse hinzuzufügen.
Pipelinekonfiguration für Leistungstests
Beispielpipeline:
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
Pipelinekonfiguration für andere Funktionstests und Komponententests
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
Verwenden Sie für Jenkins Pipelines das hier angegebene Format, um Change-Anforderungen für verschiedene Testtypen Testergebnisse hinzuzufügen.
Pipelinekonfiguration 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}"
}
}
}
}
}
}Pipelinekonfiguration für andere Funktionstests und Komponententests
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.
- Wiederholungsszenarien können nicht behandelt werden.