一些同学的公司在做接口自动化测试时,难免会要求进行持续集成以及需要将可视化报告发送到诸如钉钉工作群等地方,于是便编写下列相关教程。
jenkins上进行持续集成以及接入钉钉
前提条件
准备好自动化脚本
持续集成
源代码管理模块
安装插件:Git plugin
获取凭证:http拉取链接对应:登录账号密码,id置空,描述任意
指定分支:格式为*/xxx 比如*/dev
触发器模块
定时触发:
jenkins项目中构建触发器->Build periodically
采用五颗*占位符的方式书写。
分别为:分钟,小时,一个月中第几天,第几月,一周中第几天
常用格式:
H/30 * * * * 每30分钟构建一次
H H/2 * * * 每2个小时构建一次
0 8 * * * 每天早上8点构建一次
0,8,12,22 * * * 每天8点,12点,22点构建各一次
推送触发:
当指定远端仓库存在推送或合并行为时,触发jenkins构建
- 生成对应git仓库的凭证api token
- gitlab举例:个人头像->Settings->
Access Token→Personal Access Tokens->编写名称,有效期以及勾选权限:api->生成,复制token - 安装插件
GitLab Plugin - 配置
token:Manage Jenkins→System→GitLab然后按照要求填写gitlab仓库地址以及获取的token便可创建一个链接凭证 - 在项目中选中对应链接凭证,便可将该项目和凭证对应的远程仓库关联起来,从而捕获远程仓库的提交合并等行为。
- 然后就是设置捕获哪些分支的情况作为触发器。
后置处理器插件
插件Post build task
- 安装插件
Post build task - 这个插件是为了提取构建结束后,生成的
allure报告信息 - 通过jenkins中的allure报告插件,生成的数据中存在一个prometheusData.txt的文件,该文件记录着测试用例的通过情况,则可以通过在代码里编写一个读取该文件的方法,然后在构建结束后进行调用。
path = os.path.abspath(os.path.dirname((__file__)))
try:
with open(path + r'/allure-results/html/export/prometheusData.txt', 'r') as f:
for lines in f: # 通常这里应该是 'line' 而不是 'lines',因为每次迭代都是一行
parts = lines.strip('\n').split(' ') # 去除换行符并按空格分割
if len(parts) >= 2: # 确保至少有两个元素
launch_name = parts[0]
num = parts[1]
d.update({launch_name: num}) # 更新或添加键值对到字典
print(d) # 在文件读取完成后打印字典
except FileNotFoundError:
print("文件未找到或无法打开")
except IOError as e:
print(f"打开文件时发生I/O错误: {e}")
print(d)
retries_run = d.get('launch_retries_run') # 运行总数
print('运行总数:{}'.format(retries_run))
status_passed = d.get('launch_status_passed') # 通过数量
print('通过数量:{}'.format(status_passed))
status_failed = d.get('launch_status_failed') # 不通过数量
print('没通过数量:{}'.format(status_failed))
status_broken = d.get('launch_status_broken') # 中断数量
接入钉钉api
插件安装:Ding Talk
使用方法
jenkins配置钉钉助手Manage jenkins->钉钉图标(我的jenkins版本是2.4,图标在页面底部)- 新增机器人,这里定义机器人的名字然后是最关键的
webhook这个是一个凭证来链接对应的钉钉群聊里的小机器人。 - 安全设置(这个是钉钉app在创建群机器人时的设置):
- ip设置:钉钉群里的机器人只接收指定ip发送请求
- 关键字:只接收信息中包含关键字的请求。
- 项目中便会出现钉钉机器人选项,选择
jenkins配置好的机器人,便可发送基本信息,不过此处并不用这种方式来向钉钉群聊发送消息,而是通过代码调用钉钉机器人开放的接口。 - 代码中使用第三方库:
dingtalkchatbot来完成对钉钉机器人发送请求,并且通过关键字的方式通过安全检验。 - 在
jenkins自动化脚本运行完毕后,通过post build task来触发该后置脚本的运行,便可获取并发送刚刚生成的测试报告的信息到钉钉群里。
from dingtalkchatbot.chatbot import DingtalkChatbot
# jenkins登录地址
jenkins_url = "http://xxxx:8282/"
# 获取jenkins对象
server = jenkins.Jenkins(jenkins_url, username='xxxx', password='xxxx') # Jenkins登录名 ,密码
# job名称
job_name = "job/xxxxx/" # Jenkins运行任务名称
# job的url地址
job_url = jenkins_url + job_name
# 获取最后一次构建
job_last_build_url = server.get_info(job_name)['lastBuild']['url']
# 报告地址
report_url = job_last_build_url + 'allure' # 'allure'为我的Jenkins全局工具配置中allure别名
def send_dingtalk(self):
d = {}
path = os.path.abspath(os.path.dirname((__file__)))
try:
with open(path + r'/allure-results/html/export/prometheusData.txt', 'r') as f:
for lines in f: # 通常这里应该是 'line' 而不是 'lines',因为每次迭代都是一行
parts = lines.strip('\n').split(' ') # 去除换行符并按空格分割
if len(parts) >= 2: # 确保至少有两个元素
launch_name = parts[0]
num = parts[1]
d.update({launch_name: num}) # 更新或添加键值对到字典
print(d) # 在文件读取完成后打印字典
except FileNotFoundError:
print("文件未找到或无法打开")
except IOError as e:
print(f"打开文件时发生I/O错误: {e}")
print(d)
retries_run = d.get('launch_retries_run') # 运行总数
print('运行总数:{}'.format(retries_run))
status_passed = d.get('launch_status_passed') # 通过数量
print('通过数量:{}'.format(status_passed))
status_failed = d.get('launch_status_failed') # 不通过数量
print('没通过数量:{}'.format(status_failed))
status_broken = d.get('launch_status_broken') # 中断数量
con = {
"content": "Pytest_Allure_Demo自动化脚本执行完成。\n"
"测试概述:\n"
"运行总数: " + retries_run + "\n"
"通过数量: " + status_passed + "\n"
"失败数量: " + status_failed + "\n"
"中断数量: " + status_broken + "\n"
"构建地址:" + job_url + "\n"
"报告地址:" + report_url
}
# 获取路径,目的是找到report.html文件的路径
path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))) # 获取当前路径
html_path = os.path.join(path, "allure-results/html/index.html") # 获取html格式报告文件的路径
tile = time.strftime("%Y-%m-%d %H:%M:%S")
# WebHook地址,你钉钉上创建自定义机器人时生成的值
webhook = 'xxxx'
# 初始化机器人小丁
xiaoding = DingtalkChatbot(webhook)
ding = DingTalk()
jd = json.dumps(con)
# xixi = ding.read_report(html_path)
xiaoding.send_text(
# Qa-审核后台自动化是机器人的关键字,必须要保持一致
msg='Qa-冼喆\n\n' + con["content"] + "\n\n项目url:**/" + "\n\n执行时间:" + tile
)
推荐学习
【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战
【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)
【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)
【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)
【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)
【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试
【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff
【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享
【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装
【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?
【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!
【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我
【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化
【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试
【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !
【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置