Adicionar resultados de testes a solicitações de mudança usando a API de teste
Adicione resultados de testes a DevOps solicitações de mudança usando a capacidade de teste da API DevOps - POST /devops/tool/{capability}. A API está disponível para todos os tipos de teste de várias ferramentas conectadas a Velocidade de mudança para DevOps.
Para obter mais informações sobre a API, consulte DevOps - POST /devops/tool/{capability}. Para usar a API em Azure DevOps, GitHub e Jenkins, você deve usar o formato mencionado nas respectivas seções abaixo.
Pré-requisitos
Função necessária: sn_devops.admin
Certifique-se de que o tipo de teste que deseja usar na API esteja disponível como um tipo de teste em Velocidade de mudança para DevOps e que esteja mapeado com a respectiva ferramenta de orquestração.
- Navegar até .
Você também pode usar a navegação de IU clássica .
- Verifique se o tipo de teste está disponível na tabela Tipos de teste.
- Para tipos de teste personalizados, selecione Novo e adicione o tipo de teste à lista.
- No campo Tipo de teste, insira um nome para o tipo de teste.
- Na lista Categoria de teste, selecione a categoria do seu tipo de teste.
- Selecione Salvar.
- Navegar até .
Você também pode usar a navegação de IU clássica .
- Verifique se o tipo de teste está mapeado para sua ferramenta de orquestração.
- Se o mapeamento não estiver disponível, selecione Novo e crie o mapeamento.
- Na lista Tipo de teste, selecione o tipo de teste que você deseja mapear.
- Na lista Integração de ferramentas, selecione sua ferramenta de orquestração.
- Selecione Salvar.
Azure DevOps
Para Azure DevOps pipelines, use o formato fornecido aqui para adicionar resultados de testes a solicitações de mudança para vários tipos de teste.
/api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>- O parâmetro toolId deve ser um ID de ferramenta válido de uma ferramenta conectada e configurada em Velocidade de mudança para DevOps.
- O parâmetro testType deve ter um mapeamento de tipo de teste em Velocidade de mudança para DevOps.
Dentro do Body, você deve passar os parâmetros com base no tipo de teste.
- nome de usuário: devops.integration.user
- senha:<devops.integration.user password>
Configuração de pipeline para testes de desempenho
{
"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"
}Resumo do teste de desempenho em sua instância do Now:
Resumo de teste anexado à sua solicitação de mudança do DevOps:
Configuração de pipeline para outros testes funcionais e de unidade
{
"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"
}Resumo de teste anexado à sua solicitação de mudança do DevOps:
Azure DevOps Pipeline YAML
Amostra 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 versão
GitHub
Para GitHub pipelines, use o formato fornecido aqui para adicionar resultados de testes a solicitações de mudança para vários tipos de teste.
Configuração de pipeline para testes de desempenho
Amostra 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
Configuração de pipeline para outros testes funcionais e de unidade
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
Para Jenkins pipelines, use o formato fornecido aqui para adicionar resultados de testes a solicitações de mudança para vários tipos de teste.
Configuração de pipeline para testes de desempenho
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}"
}
}
}
}
}
}Configuração de pipeline para outros testes funcionais e de unidade
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}"
}
}
}
}
}
}Limitações da API de teste
- A lógica de espera não será atendida.
- Não é possível processar cenários de reexecução.