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

相关推荐
孟健6 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞8 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽10 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程14 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪15 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
碳基沙盒15 小时前
OpenClaw 多 Agent 配置实战指南
运维
databook15 小时前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田1 天前
使用 pkgutil 实现动态插件系统
python
前端付豪1 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽1 天前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img