테스트 API를 사용하여 변경 요청에 테스트 결과 추가

  • 릴리스 버전: Yokohama
  • 업데이트 날짜 2025년 01월 30일
  • 읽기14분
  • DevOps - POST /devops/tool/{capability} API의 테스트 기능을 사용하여 변경 요청에 테스트 결과를 DevOps 추가합니다. API는 에 연결된 다양한 도구의 모든 테스트 유형에 사용할 수 있습니다 DevOps 변경 속도.

    API에 대한 자세한 내용은 다음 문서를 참조하십시오 DevOps - POST /devops/tool/{capability}. , GitHub 및 Jenkins에서 API Azure DevOps를 사용하려면 아래의 해당 섹션에 언급된 형식을 사용해야 합니다.

    필수 조건

    필요한 역할: sn_devops.admin

    API에서 사용하려는 테스트 유형을 에서 DevOps 변경 속도 테스트 유형으로 사용할 수 있고 해당 오케스트레이션 도구와 매핑되어 있는지 확인해야 합니다.

    1. 다음으로 이동 DevOps 변경 작업 공간 > 관리 > 통합 > 테스트 유형.

      클래식 UI 탐색을 사용할 수도 있습니다 DevOps > 통합 > 테스트 종류.

    2. 테스트 유형 테이블에서 테스트 유형을 사용할 수 있는지 확인합니다.

      테스트 유형 테이블.

    3. 사용자 지정 테스트 유형의 경우 새로 만들기를 선택하고 테스트 유형을 목록에 추가합니다.
      1. 테스트 유형 필드에 테스트 유형의 이름을 입력합니다.
      2. 테스트 범주 목록에서 테스트 유형의 범주를 선택합니다.
      3. 저장을 선택합니다.
    4. 다음으로 이동 DevOps 변경 작업 공간 > 관리 > 통합 > 테스트 유형 매핑.

      클래식 UI 탐색을 사용할 수도 있습니다 DevOps > 통합 > 테스트 유형 매핑.

    5. 테스트 유형이 오케스트레이션 도구에 매핑되어 있는지 확인합니다.

      테스트 유형 매핑 테이블입니다.

    6. 매핑을 사용할 수 없는 경우 새로 만들기를 선택하고 매핑을 생성합니다.
      1. 테스트 유형 목록에서 매핑할 테스트 유형을 선택합니다.
      2. 도구 통합 목록에서 오케스트레이션 도구를 선택합니다.
      3. 저장을 선택합니다.

    Azure DevOps

    파이프라인의 경우 Azure DevOps 여기에 제공된 형식을 사용하여 다양한 테스트 유형에 대한 변경 요청에 테스트 결과를 추가합니다.

    URL 서픽스 및 매개변수 형식:
    /api/sn_devops/v1/devops/tool/test?toolId=<devops_ToolID>&testType=<test_type>
    • 매개변수는 toolId 에서 연결되고 구성된 도구의 DevOps 변경 속도유효한 도구 ID여야 합니다.
    • 매개변수 testType 에는 에 테스트 유형 매핑이 DevOps 변경 속도있어야 합니다.

    Body내에서 테스트 유형에 따라 매개변수를 전달해야 합니다.

    주:
    일반 연결의 경우 다음을 사용합니다.
    • 사용자 이름: devops.integration.user
    • 암호: <devops.integration.user password>

    성능 테스트를 위한 파이프라인 구성

    본문에 대한 샘플 매개변수:
    {
      "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"
    }

    성능 테스트를 위한 샘플 Azure DevOps 파이프라인 구성입니다.

    Now 인스턴스의 성능 테스트 요약:

    성능 테스트 요약입니다.

    DevOps 변경 요청에 첨부된 테스트 요약:

    변경 요청 테스트 요약입니다.

    다른 기능 및 단위 테스트를 위한 파이프라인 구성

    본문에 대한 샘플 매개변수:
    {
      "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"
    }

    다른 기능 테스트를 위한 샘플 Azure DevOps 파이프라인 구성입니다.

    DevOps 변경 요청에 첨부된 테스트 요약:

    변경 요청 테스트 요약입니다.

    Azure DevOps YAML 파이프라인

    샘플 파이프라인:

    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 파이프라인.

    릴리스 파이프라인

    Azure DevOps 릴리스 파이프라인 yml입니다.

    GitHub

    파이프라인의 경우 GitHub 여기에 제공된 형식을 사용하여 다양한 테스트 유형에 대한 변경 요청에 테스트 결과를 추가합니다.

    성능 테스트를 위한 파이프라인 구성

    샘플 파이프라인:

    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
    

    성능 테스트를 위한 샘플 GitHub 파이프라인 구성입니다.

    다른 기능 및 단위 테스트를 위한 파이프라인 구성

    샘플 파이프라인:
    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
    

    다른 기능 테스트를 위한 샘플 GitHub 파이프라인 구성입니다.

    Jenkins

    파이프라인의 경우 Jenkins 여기에 제공된 형식을 사용하여 다양한 테스트 유형에 대한 변경 요청에 테스트 결과를 추가합니다.

    성능 테스트를 위한 파이프라인 구성

    샘플 파이프라인:
    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}"
                        }
                    }
                }
            }
        }
    }

    성능 테스트를 위한 샘플 Jenkins 파이프라인 구성입니다.

    다른 기능 및 단위 테스트를 위한 파이프라인 구성

    샘플 파이프라인:
    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}"
                        }
                    }
                }
            }
        }
    }

    다른 기능 테스트를 위한 샘플 Jenkins 파이프라인 구성입니다.

    테스트 API의 제한 사항

    • 대기 중인 논리는 처리되지 않습니다.
    • 재실행 시나리오를 처리할 수 없습니다.