写点什么

jenkins 源代码管理 + 接入钉钉 api 发送接口自动化测试报告

  • 2024-06-06
    北京
  • 本文字数:3183 字

    阅读完需:约 10 分钟

更多软件测试学习资料戳

一些同学的公司在做接口自动化测试时,难免会要求进行持续集成以及需要将可视化报告发送到诸如钉钉工作群等地方,于是便编写下列相关教程。

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 )
复制代码



用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
jenkins源代码管理+接入钉钉api发送接口自动化测试报告_测试_测吧(北京)科技有限公司_InfoQ写作社区