jenkins接入钉钉api接口自动化测试报告自动发送

news/2025/3/15 0:41:10/文章来源:https://www.cnblogs.com/hogwarts/p/18235492

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

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 TokenPersonal Access Tokens->编写名称,有效期以及勾选权限:api->生成,复制token
  • 安装插件GitLab Plugin
  • 配置token:Manage JenkinsSystemGitLab然后按照要求填写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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720996.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于最后部署项目到服务器

问题1: HTTP Status 500 – Internal Server Error(SpringBoot架构的Web项目部署到linux系统上访问出错):数据库的配置错误,服务器上是5.版本的MySQL,需要将配置改为5.的配置,数据库名称密码要一模一样 问题2: 记录报错_linux: su root 报错: su: Authentication fail…

内存优化:Boxing

dotMemory 如今,许多开发人员都熟悉性能分析的工作流程:在分析器下运行应用程序,测量方法的执行时间,识别占用时间较多的方法,并致力于优化它们。然而,这种情况并没有涵盖到一个重要的性能指标:应用程序多次GC所分配的时间。当然,你可以评估GC所需的总时间,但是它从哪…

FastAPI-3:快速入门

3 快速入门 第二章是python基础,故不做介绍。 FastAPI是一个现代、快速(高性能)的网络框架,用于使用基于标准Python 类型提示的Python 3.6+构建API。 FastAPI的创建者是Sebastin Ramrez。 FastAPI由Sebastin Ramrez于2018年发布。与大多数Python Web框架相比,它在很多方面…

超越预期:Containerd 如何成为 Kubernetes 的首选容器运行时

> 作者:尹珉,KubeSphere Ambassado,rKubeSphere Contributor,KubeSphere 社区用户委员会杭州站站长。 踏上 Containerd 技术之旅 容器技术已经成为现代软件开发和部署的核心工具。通过容器,开发者可以创建轻量级、便携的运行环境,从而简化应用程序的开发、测试和部署流…

OPCUA 使用KEPServerEX 跟UaExper 数据不同步

UaExper,KEPServerEX 在KEPServerEX的 quick Cline里面设置的值不会同步到UaExper 里面,在UaExper上能看到设置的设备跟标记,就是修改数据时两边不同步。把具体标记拉进来view后有个报错的信息Invalid Datatype: Expected OpcUaType_Double, Received OpcUaType_UInt32 具…

MatrixTransform之相关矩阵运算

最近在学习MatrixTransform,发现对之前学的矩阵乘法竟然忘的一干二净,下面就是这个基础知识的整理。 矩阵加法 通常的矩阵加法被定义在两个相同大小的矩阵。两个mn矩阵A和B的和,标记为A+B,一样是个mn矩阵,其内的各元素为其相对应元素相加后的值。例如:也可以做矩阵的减法…

2种方法解决需要clik点击数的题目——[HNCTF 2022 WEEK2]getflag 137分 MFC patch RE

题目 DIEIDA找到判断点击数的if,我们修改一下汇编指令让点击数<99999999就成立 这个程序没有要求我们输入,说明flag是程序打印的 IDA动调下一个断点修改 得到flag 还有一种更快的方法——Cheat Engine随便点击几次 在CE中修改点击次数 Get flag flagNSSCTF{MFC_pr0gr4mmi…

2道寻找回文子串的题目

题目题目1题目2题目1是将字符串分隔,使得分隔后得到的每个字符串都是回文子串 题目2是从字符串里面找到回文子串 两道题都可以利用递归来解决 //利用双指针判断是否是回文子串 bool isre(string& s) {int left = 0;int right - s.size()-1;while(left <= right){if(s[l…

BUG:驱动新屏幕,屏幕左右无法居中

1.BUG描述 RGB屏幕的显示左右无法居中 2.BUG原因 因为屏幕参考值的前肩距和后肩距(Hfp、Hbp)的type值远远超出了芯片的限制(32、128)。所以造成左右偏移无法调节。3.修复方法 最后将屏幕的SYNC模式,硬件重新接线改为DE模式。使得前间距和后间距不再有效。4.补充 4.1 参数的计算…

密码工程-小素数

任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,使用git管理过程,至少提交三次参考《密码工程》p107伪代码基于Eratosthenes算法实现 int SmallPrimeList(int n, int *plist, int *len), 其中plist返回素数列表,len返回列表长度(5’)写出测试代码,至…

文献收获_2024.06.06

Ahmed, Syed Rakin. 2024. Generating Clinically Translatable AI Models for Cancer Diagnostics. Doctoral dissertation, Harvard University Graduate School of Arts and Sciences. 来源:https://nrs.harvard.edu/URN-3:HUL.INSTREPOS:37378697FIGURE 4 Model Zoo这部分…

高德面试:为什么Map不能插入null?

在 Java 中,Map 是属于 java.util 包下的一个接口(interface),所以说“为什么 Map 不能插入 null?”这个问题本身问的不严谨。Map 部分类关系图如下:所以,这里面试官其实想问的是:为什么 ConcurrentHashMap 不能插入 null? 1.HashMap和ConcurrentHashMap的区别 HashMa…