Adicionar resultados de testes a solicitações de mudança usando a API de teste

  • Versão de lançamento: Xanadu
  • Atualizado 1 de ago. de 2024
  • 5 min. de leitura
  • 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.

    1. Navegar até Espaço de mudança de DevOps > Administração > Integrações > Tipos de teste.

      Você também pode usar a navegação de IU clássica DevOps > Integrações > Tipos de Teste.

    2. Verifique se o tipo de teste está disponível na tabela Tipos de teste.

      Tabela de tipos de teste.

    3. Para tipos de teste personalizados, selecione Novo e adicione o tipo de teste à lista.
      1. No campo Tipo de teste, insira um nome para o tipo de teste.
      2. Na lista Categoria de teste, selecione a categoria do seu tipo de teste.
      3. Selecione Salvar.
    4. Navegar até Espaço de mudança de DevOps > Administração > Integrações > Mapeamentos de tipo de teste.

      Você também pode usar a navegação de IU clássica DevOps > Integrações > Mapeamentos de tipo de teste.

    5. Verifique se o tipo de teste está mapeado para sua ferramenta de orquestração.

      Tabela de mapeamentos de tipo de teste.

    6. Se o mapeamento não estiver disponível, selecione Novo e crie o mapeamento.
      1. Na lista Tipo de teste, selecione o tipo de teste que você deseja mapear.
      2. Na lista Integração de ferramentas, selecione sua ferramenta de orquestração.
      3. 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.

    Formato para sufixo de URL e parâmetros:
    /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.

    Nota:
    Para a conexão genérica, use o seguinte:
    • nome de usuário: devops.integration.user
    • senha:<devops.integration.user password>

    Configuração de pipeline para testes de desempenho

    Parâmetros de amostra para o corpo:
    {
      "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"
    }

    Exemplo de configuração de pipeline do Azure DevOps para testes de desempenho.

    Resumo do teste de desempenho em sua instância do Now:

    Resumo do teste de desempenho.

    Resumo de teste anexado à sua solicitação de mudança do DevOps:

    Resumo do teste de solicitação de mudança.

    Configuração de pipeline para outros testes funcionais e de unidade

    Parâmetros de amostra para o corpo:
    {
      "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"
    }

    Exemplo de configuração de pipeline do Azure DevOps para outros testes funcionais.

    Resumo de teste anexado à sua solicitação de mudança do DevOps:

    Resumo do teste de solicitação de mudança.

    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 yml do Azure DevOps.

    Pipeline de versão

    YML do pipeline de versão do Azure DevOps.

    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
    

    Exemplo de configuração de pipeline do GitHub para testes de desempenho.

    Configuração de pipeline para outros testes funcionais e de unidade

    Amostra de 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://<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
    

    Exemplo de configuração de pipeline do GitHub para outros testes funcionais.

    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

    Amostra de pipeline:
    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}"
                        }
                    }
                }
            }
        }
    }

    Exemplo de configuração de pipeline do Jenkins para testes de desempenho.

    Configuração de pipeline para outros testes funcionais e de unidade

    Amostra de pipeline:
    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}"
                        }
                    }
                }
            }
        }
    }

    Exemplo de configuração de pipeline do Jenkins para outros testes funcionais.

    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.