jenkins集成jmeter
2022年2月20日
jenkins集成jmeter
参考文档
https://www.cnblogs.com/jxial/p/15169803.htmlhttps://blog.csdn.net/qq_35520506/article/details/108726816https://blog.csdn.net/kmlyc/article/details/80686213
jenkins使用插件
Publish HTML reports html报告
groove 执行groove脚本
post build tasks 构建后条件判断执行
jmeter配置
线程数和持续时间参数化配置
使用jmeter自带的P函数来获取命令行中的参数
${__P(变量名,)}
jmeter -Jthread=线程数 -Jtime=持续时间 -n -t jmeter脚本位置 -l 结果脚本位置 -e -o html报告路径
jenkins配置
参数化配置
勾选This project is parameterized
设置线程数和持续时间参数化
效果如下
设置jmeter启动命令
jmeter -Jthread=$thread -Jtime=$time -n -t jmeter脚本 -l jmeter结果脚本 -e -o html报告路径
解决报告样式无法展示问题
添加Groovy Script构建
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
增加报告展示
添加构建后操作
Publish HTML reports
填入报告生成路径
HTML directory to archive 填入命令报告生成的路径
填入报告html名称
Index page[s] 填入 index.html
高级选项
Keep past HTML reports 保留过去的HTML报告
Always link to last build 始终链接到上次构建
增加钉钉提醒
添加构建后操作
build task
可以设置日志内有某个或者多个关键词满足时才触发该构建
这里勾选Run script only if all previous steps were successful(仅当所有先前的步骤都成功时才运行脚本)
获取构建信息
import jenkins
jenkins_url = "jenkins地址"
# 登录jenkins
server = jenkins.Jenkins(jenkins_url, username='账号', password='密码')
# 获取最新构建的构建编号
job_last_number = server.get_info("job/构建任务名称")['lastBuild']['number']
# 获取构建新信息
build_info = server.get_build_info("构建任务名称", job_last_number)
build_info_actions = build_info['actions'][0]['parameters']
# 取线程数量和持续时间
thread_number = build_info_actions[0]['value']
duration = build_info_actions[1]['value']
#拼接jmeter报告地址
report_url = f"http://jenkins地址/job/构建任务名称/{str(job_last_number)}/Jmeter_20HTML_20Report/"
data = {
"msgtype": "markdown",
"markdown": {
"title": "jmeter接口测试",
""
"text": """### **jmeter接口测试**\n\n""" +
f"""jmeter脚本执行结果: {build_info['result']}\n\n""" +
f"""执行线程数量: {thread_number}\n\n""" +
f"""执行时间(s): {duration}\n\n""" +
f"""[构建地址](构建任务地址) [报告地址]({report_url})\n\n""" +
"账号:xxx 密码:xxx \n\n" +
f"""jenkins只读账号仅供查看测试报告"""
},
}
钉钉发送消息到群
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
timestamp = str(round(time.time() * 1000))
secret = 'this is secret'
secret_enc = secret.encode('utf-8')
string_to_sign = f'{timestamp}\n{secret}'
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(
secret_enc,
string_to_sign_enc,
digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
token = 'xxx'
url = f'https://oapi.dingtalk.com/robot/send?access_token={token}×tamp={timestamp}&sign={sign}'
headers = {
"Content-Type": "application/json"
}
res = requests.post(url=url, headers=headers, json=data)
print(res.text)