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

相关推荐
Bert.Cai15 分钟前
Linux let命令详解
linux·运维·服务器
枕星而眠18 分钟前
Linux 线程:原理、属性、实战与面试避坑
linux·运维·c语言·面试
晚风予卿云月23 分钟前
【Linux】环境变量概念、作用、配置与修改详解
linux·运维·服务器·环境变量
~黄夫人~42 分钟前
零基础速通|Windows&Linux 常用命令行对照表大全
linux·运维·windows·笔记·备忘录·整理表格
benjiangliu1 小时前
LINUX系统-17-EXT系列文件系统(二)
linux·运维·服务器
杨云龙UP1 小时前
Linux 根分区被日志吃满?一次 58G Broker 日志清理实战_2026-05-20
linux·运维·服务器·数据库·hdfs·apache
络合白泽1 小时前
Debian 13 + NVIDIA Optimus 笔记本:从零配置 Wayland Explicit Sync 完整指南
运维·debian
毋语天1 小时前
FastAPI 进阶实战:请求体、文件上传、响应模型与数据校验
python·fastapi·api开发·数据校验·pydantic
珠海西格电力1 小时前
零碳园区的碳排放指标计算的实操步骤
大数据·运维·人工智能·物联网·能源
叶半欲缺1 小时前
Linux通过lvm扩容根目录
linux·运维·服务器