테스트 API를 사용하여 변경 요청에 테스트 결과 추가
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 변경 속도 테스트 유형으로 사용할 수 있고 해당 오케스트레이션 도구와 매핑되어 있는지 확인해야 합니다.
- 다음으로 이동 .
클래식 UI 탐색을 사용할 수도 있습니다 .
- 테스트 유형 테이블에서 테스트 유형을 사용할 수 있는지 확인합니다.
- 사용자 지정 테스트 유형의 경우 새로 만들기를 선택하고 테스트 유형을 목록에 추가합니다.
- 테스트 유형 필드에 테스트 유형의 이름을 입력합니다.
- 테스트 범주 목록에서 테스트 유형의 범주를 선택합니다.
- 저장을 선택합니다.
- 다음으로 이동 .
클래식 UI 탐색을 사용할 수도 있습니다 .
- 테스트 유형이 오케스트레이션 도구에 매핑되어 있는지 확인합니다.
- 매핑을 사용할 수 없는 경우 새로 만들기를 선택하고 매핑을 생성합니다.
- 테스트 유형 목록에서 매핑할 테스트 유형을 선택합니다.
- 도구 통합 목록에서 오케스트레이션 도구를 선택합니다.
- 저장을 선택합니다.
Azure DevOps
파이프라인의 경우 Azure DevOps 여기에 제공된 형식을 사용하여 다양한 테스트 유형에 대한 변경 요청에 테스트 결과를 추가합니다.
/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"
}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"
}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'
릴리스 파이프라인
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
다른 기능 및 단위 테스트를 위한 파이프라인 구성
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
파이프라인의 경우 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}"
}
}
}
}
}
}다른 기능 및 단위 테스트를 위한 파이프라인 구성
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}"
}
}
}
}
}
}테스트 API의 제한 사항
- 대기 중인 논리는 처리되지 않습니다.
- 재실행 시나리오를 처리할 수 없습니다.