Fügen Sie Change-Anforderungen mithilfe der Test-API Testergebnisse hinzu

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 5 Minuten Lesedauer
  • 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.

    1. Navigieren zu DevOps – Change-Arbeitsbereich > Administration > Integrationen > Testtypen.

      Sie können auch die klassische UI-Navigation verwenden DevOps > Integrationen > Testtypen.

    2. Überprüfen Sie, ob der Testtyp in der Tabelle Testtypen verfügbar ist.

      Tabelle der Testtypen.

    3. Wählen Sie bei anwenderdefinierten Testtypen Neu, und fügen Sie den Testtyp der Liste hinzu.
      1. Geben Sie im Feld Testtyp einen Namen für Ihren Testtyp ein.
      2. Wählen Sie in der Liste Testkategorie die Kategorie Ihres Testtyps aus.
      3. Wählen Sie Speichern.
    4. Navigieren zu DevOps – Change-Arbeitsbereich > Administration > Integrationen > Testtyp-Zuordnungen.

      Sie können auch die klassische UI-Navigation verwenden DevOps > Integrationen > Testtyp-Zuordnungen.

    5. Überprüfen Sie, ob der Testtyp Ihrem Orchestration-Tool zugeordnet ist.

      Zuordnungstabelle für den Testtyp.

    6. Wenn die Zuordnung nicht verfügbar ist, wählen Sie Neu, und erstellen Sie die Zuordnung.
      1. Wählen Sie in der Liste Testtyp den Testtyp aus, den Sie zuordnen möchten.
      2. Wählen Sie in der Liste Toolintegration Ihr Orchestration-Tool aus.
      3. 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.

    Format für URL-Suffix und Parameter:
    /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.

    Hinweis:
    Verwenden Sie für die generische Verbindung Folgendes:
    • Anwendername: devops.integration.user
    • Passwort:<devops.integration.user password>

    Pipelinekonfiguration für Leistungstests

    Beispielparameter für den Textkörper:
    {
      "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"
    }

    Beispiel für eine Azure DevOps-Pipeline-Konfiguration für Leistungstests.

    Zusammenfassung des Leistungstests in Ihrer Now-Instanz:

    Zusammenfassung des Leistungstests.

    Testzusammenfassung, die an Ihre DevOps-Change-Anforderung angehängt ist:

    Zusammenfassung des Change-Anforderungstests.

    Pipelinekonfiguration für andere Funktionstests und Komponententests

    Beispielparameter für den Textkörper:
    {
      "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"
    }

    Beispiel für eine Azure DevOps-Pipeline-Konfiguration für andere Funktionstests.

    Testzusammenfassung, die an Ihre DevOps-Change-Anforderung angehängt ist:

    Zusammenfassung des Change-Anforderungstests.

    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'
    
              

    Azure DevOps-YML-Pipeline.

    Release-Pipeline

    Azure DevOps-Release-Pipeline-YML.

    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
    

    Beispiel für eine GitHub-Pipeline-Konfiguration für Leistungstests.

    Pipelinekonfiguration für andere Funktionstests und Komponententests

    Beispielpipeline:
    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
    

    Beispiel für die GitHub-Pipeline-Konfiguration für andere Funktionstests.

    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

    Beispielpipeline:
    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}"
                        }
                    }
                }
            }
        }
    }

    Beispiel für die Jenkins-Pipeline-Konfiguration für Leistungstests.

    Pipelinekonfiguration für andere Funktionstests und Komponententests

    Beispielpipeline:
    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}"
                        }
                    }
                }
            }
        }
    }

    Beispiel für die Jenkins-Pipeline-Konfiguration für andere Funktionstests.

    Einschränkungen der Test-API

    • Wartelogik wird nicht berücksichtigt.
    • Wiederholungsszenarien können nicht behandelt werden.