Ajouter des résultats des tests aux demandes de changement à l’aide de l’API de test
Ajoutez des résultats des tests aux DevOps demandes de changement à l’aide de l’aptitude de test de l’API DevOps : POST /devops/tool/{capability}. L’API est disponible pour tous les types de test pour divers outils connectés à Vélocité de changement DevOps.
Pour en savoir plus sur l’API, reportez-vous à la section DevOps - POST /devops/tool/{capability}. Pour utiliser l’API dans Azure DevOps, GitHub et Jenkins, vous devez utiliser le format mentionné dans les sections respectives ci-dessous.
Prérequis
Rôle requis : sn_devops.admin
Vous devez vous assurer que le type de test que vous souhaitez utiliser dans l’API est disponible en tant que type de test et Vélocité de changement DevOps qu’il est mappé avec l’outil d’orchestration respectif.
- Accédez à la .
Vous pouvez également utiliser la navigation classique de l’interface utilisateur .
- Vérifiez si le type de test est disponible dans la table Types de tests.
- Pour les types de test personnalisés, sélectionnez Nouveau et ajoutez le type de test à la liste.
- Dans le champ Type de test , entrez un nom pour votre type de test.
- Dans la liste Catégorie de test , sélectionnez la catégorie de votre type de test.
- Sélectionnez Enregistrer.
- Accédez à la .
Vous pouvez également utiliser la navigation classique de l’interface utilisateur .
- Vérifiez si le type de test est mappé à votre outil d’orchestration.
- Si le mappage n’est pas disponible, sélectionnez Nouveau et créez le mappage.
- Dans la liste Type de test , sélectionnez le type de test que vous souhaitez mapper.
- Dans la liste Intégration d’outils , sélectionnez votre outil d’orchestration.
- Sélectionnez Enregistrer.
Azure DevOps
Pour Azure DevOps les pipelines, utilisez le format indiqué ici pour ajouter des résultats des tests aux demandes de changement pour différents types de tests.
/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>- Le paramètre toolId doit être un ID d’outil valide provenant d’un outil connecté et configuré dans Vélocité de changement DevOps.
- Le paramètre testType doit avoir un mappage de type de test dans Vélocité de changement DevOps.
Dans le Body, vous devez transmettre les paramètres en fonction du type de test.
- Nom d’utilisateur : devops.integration.user
- Mot de passe : <devops.integration.user password>
Configuration du pipeline pour les tests de performances
{
"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"
}Résumé du test de performances dans votre instance Now :
Résumé du test joint à votre demande de changement DevOps :
Configuration du pipeline pour les autres tests fonctionnels et unitaires
{
"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"
}Résumé du test joint à votre demande de changement DevOps :
Azure DevOps Pipeline YAML
Exemple de 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'
Pipeline de mise en production
GitHub
Pour GitHub les pipelines, utilisez le format indiqué ici pour ajouter des résultats des tests aux demandes de changement pour différents types de tests.
Configuration du pipeline pour les tests de performances
Exemple de 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
Configuration du pipeline pour les autres tests fonctionnels et unitaires
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
Pour Jenkins les pipelines, utilisez le format indiqué ici pour ajouter des résultats des tests aux demandes de changement pour différents types de tests.
Configuration du pipeline pour les tests de performances
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}"
}
}
}
}
}
}Configuration du pipeline pour les autres tests fonctionnels et unitaires
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}"
}
}
}
}
}
}Limites de l’API de test
- La logique d’attente ne sera pas prise en charge.
- Les scénarios réexécutés ne peuvent pas être gérés.