要将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平台的自动化测试任务,并根据测试结果决定流水线的成功或失败状态。

相关推荐
贝锐5 小时前
从国产化信创设备到商用安卓终端,向日葵如何帮助企业实现统一运维管理?
linux·运维·远程控制
Julien20047 小时前
调查和解决 SELinux 问题
linux·运维·服务器·网络·学习方法
lupai7 小时前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
天远Date Lab8 小时前
零信任架构实战:基于天远双人婚姻评估查询构建自动化房产按揭联合审查网关
运维·人工智能·架构·自动化
荷蒲8 小时前
【小白量化Qbuddy】用AI设计miniQMT指标公式计算量化平台
人工智能·python·机器人
阿童木写作8 小时前
跨境电商图片翻译工具,批量翻译视频字幕一键抠图
人工智能·python·音视频
2601_962074689 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
小张同学a.9 小时前
Docker 容器实战 1—— docker 基础与镜像构建
linux·运维·docker·容器
大模型丫丫9 小时前
Hermes Agent:轻量级智能体框架实战指南
大数据·运维·服务器
weixin_4407305010 小时前
selenium实战记录-从登陆-首页-进入应用页面测试用例
selenium·测试工具·测试用例