要将ITP集成到Jenkins Pipeline中,实现开发发版时自动触发自动化测试

1. 准备工作

Jenkins插件安装

需要安装以下插件

  • HTTP Request Plugin (用于调用ITP API)

  • Pipeline Plugin (Jenkins Pipeline支持)

  • Git Plugin (代码拉取)

  • Workspace Cleanup Plugin (清理工作空间)

2. ITP API接口准备

根据提供的接口文档,需要使用以下关键API:

用户认证接口

1. 登录获取token

POST /users/authorizations/

{

"username": "your_username",

"password": "your_password"

}

返回token用于后续API调用

测试任务执行接口

2. 运行测试任务

POST ​/testtask​/api​/testTask​/tasks​/run​/

{

"env": 1, # 测试环境ID

"task": 1 # 测试任务ID

}

3. Jenkins Pipeline配置

Jenkinsfile示例

pipeline {

agent any

environment {

ITP_USERNAME = credentials('ITP_USERNAME')

ITP_PASSWORD = credentials('ITP_PASSWORD')

ITP_BASE_URL = 'http://your-itp-server:8898'

ITP_ENV_ID = '1' // 测试环境ID

ITP_TASK_ID = '1' // 测试任务ID

}

stages {

stage('Build') {

steps {

// 构建步骤

echo 'Building application...'

}

}

stage('Deploy') {

steps {

// 部署步骤

echo 'Deploying application...'

}

}

stage('Trigger ITP Automation Test') {

steps {

script {

// 1. 获取ITP认证token

def authToken = getITPAuthToken()

// 2. 触发自动化测试

def testResult = triggerITPAutomationTest(authToken)

// 3. 等待测试完成并获取结果

def report = getTestReport(testResult.report_id, authToken)

// 4. 根据测试结果决定流水线状态

if (report.state != "success") {

error "自动化测试失败,请检查测试报告"

}

}

}

}

}

post {

always {

// 清理工作

cleanWs()

}

}

}

def getITPAuthToken() {

def response = httpRequest(

url: "${ITP_BASE_URL}/api/users/login/",

httpMode: 'POST',

requestBody: """{

"username": "${ITP_USERNAME}",

"password": "${ITP_PASSWORD}"

}""",

contentType: 'APPLICATION_JSON'

)

def json = readJSON text: response.content

return json.token

}

def triggerITPAutomationTest(token) {

def response = httpRequest(

url: "${ITP_BASE_URL}/api/testTask/tasks/run/",

httpMode: 'POST',

requestBody: """{

"env": ${ITP_ENV_ID},

"task": ${ITP_TASK_ID}

}""",

contentType: 'APPLICATION_JSON',

customHeaders: [[name: 'Authorization', value: "Bearer ${token}"]]

)

return readJSON text: response.content

}

def getTestReport(reportId, token) {

def response = httpRequest(

url: "{ITP_BASE_URL}/api/testTask/report/{reportId}/",

httpMode: 'GET',

customHeaders: [[name: 'Authorization', value: "Bearer ${token}"]]

)

return readJSON text: response.content

}

4. 高级集成方案

轮询测试状态

def waitForTestCompletion(recordId, token, timeout=300) {

def startTime = new Date().getTime()

def status = "running"

while (status == "running" || status == "pending") {

def currentTime = new Date().getTime()

if ((currentTime - startTime) > (timeout * 1000)) {

error "测试执行超时"

}

def response = httpRequest(

url: "{ITP_BASE_URL}/api/testTask/records/{recordId}/",

httpMode: 'GET',

customHeaders: [[name: 'Authorization', value: "Bearer ${token}"]]

)

def record = readJSON text: response.content

status = record.status

if (status == "running" || status == "pending") {

sleep 10 // 等待10秒后再次检查

}

}

return status

}

发送测试报告到通知渠道

def sendTestReportToDingTalk(report, webhookUrl) {

def message = """

ITP自动化测试报告:

  • 测试任务: ${report.task_name}

  • 执行状态: ${report.state}

  • 通过率: ${report.pass_rate}%

  • 总用例数: ${report.all}

  • 成功用例: ${report.success}

  • 失败用例: ${report.fail}

"""

httpRequest(

url: webhookUrl,

httpMode: 'POST',

requestBody: """{

"msgtype": "text",

"text": {

"content": "${message}"

}

}""",

contentType: 'APPLICATION_JSON'

)

}

5. 配置建议

Jenkins Credentials配置

在Jenkins中配置以下Credentials:

  1. ITP_USERNAME - ITP平台用户名

  2. ITP_PASSWORD - ITP平台密码

  3. DINGTALK_WEBHOOK - 钉钉机器人webhook(可选)

环境变量配置

在Jenkins Pipeline中配置环境变量:

ITP_BASE_URL = 'http://your-itp-server:8898'

ITP_ENV_ID = '1' # 根据实际情况调整

ITP_TASK_ID = '1' # 根据实际情况调整

6. 错误处理和重试机制

def withRetry(Closure operation, int maxRetries=3) {

def lastException = null

for (int i = 0; i <= maxRetries; i++) {

try {

return operation()

} catch (Exception e) {

lastException = e

if (i < maxRetries) {

echo "操作失败,{i+1}/{maxRetries}次重试: ${e.getMessage()}"

sleep 5

}

}

}

throw lastException

}

通过以上配置,当开发发版时,Jenkins Pipeline会自动触发ITP平台的自动化测试任务,并根据测试结果决定流水线的成功或失败状态。

相关推荐
程序员三藏2 小时前
Postman接口测试详解
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
L.EscaRC2 小时前
Lua语言知识与应用解析
java·python·lua
清空mega2 小时前
从零开始搭建 flask 博客实验(5)
后端·python·flask
SKYDROID云卓小助手3 小时前
无人设备遥控器之数字图传技术
运维·服务器·单片机·嵌入式硬件·fpga开发
起予者汝也3 小时前
Python基础入门
开发语言·python
snakecy3 小时前
cuda10 cudnn7.5--旧版本
python·学习
努力努力再努力wz3 小时前
【Linux进阶系列】:线程(上)
java·linux·运维·服务器·数据结构·c++·redis
Owen__z3 小时前
GEE统计特定区域特定时间上的Landsat/Sentinel的影像信息
python·sentinel·gee·geemap·landsat
川石课堂软件测试3 小时前
Python | 高阶函数基本应用及Decorator装饰器
android·开发语言·数据库·python·功能测试·mysql·单元测试