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

相关推荐
青瓷程序设计33 分钟前
动物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
tobebetter952735 分钟前
How to manage python versions on windows
开发语言·windows·python
F_D_Z1 小时前
数据集相关类代码回顾理解 | sns.distplot\%matplotlib inline\sns.scatterplot
python·深度学习·matplotlib
xu_yule1 小时前
Linux_12(进程信号)内核态和用户态+处理信号+不可重入函数+volatile
linux·运维·服务器
虾..1 小时前
Linux 环境变量&&进程优先级
linux·运维·服务器
daidaidaiyu2 小时前
一文入门 LangGraph 开发
python·ai
卓码软件测评2 小时前
第三方软件测评机构:【Gatling与JMeter的架构对比:异步与非阻塞I/O模型如何实现更高并发】
测试工具·jmeter·架构·测试用例·负载均衡·压力测试
美团程序员3 小时前
一篇文章教你搞定:”xx 功能如何测试?“常见面试题型!
测试工具·面试·职场和发展·测试用例
不知更鸟3 小时前
前端报错:快速解决Django接口404问题
前端·python·django
4***72133 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django