首页 > 编程知识 正文

jenkins通知发送到微信,jenkins 企业微信

时间:2023-05-03 19:20:28 阅读:267880 作者:4596

如果只是想实现将jenkins的构建结果发送到企业微信进行通知,最简便的方式是安装Qy Wechat Notification Plugin插件,网上教程很多就不重复写了,可参考:https://www.cnblogs.com/jianxuanbing/archive/2019/09/04/11459972.html

实现的效果如下:

以下是实现可配置的企业微信通知

1.建企业微信群,添加群机器人,获取机器人的webhook地址

2.jenkins中创建项目,配置如下:

general下This project is parameterized,添加两个string parameter

分别为企业微信机器人的webhook和项目异常时需通知的责任人

用户默认值填对应企业微信群中的用户名,才可保证发通知时能够@到对应的人,多个用户名之间用英文逗号隔开

填写构建执行命令

构建命令说明如下:

#执行测试用例 pybot.bat 用例路径#将控制台输出导出到log.txt文件,控制台不再打印日志 >log.txt #如果前面一条指令执行失败才执行||后面的指令 ||#如果前面一条指令执行成功才执行&&后面的指令 &&#执行python脚本,发送企业微信通知,传入webhook地址,jenkins项目名称,发送通知@责任人 python ../wechatNotice.py %url% %JOB_NAME% %principal%pybot.bat 目录名称/***.robot >log.txt || python ../wechatNotice.py %url% %JOB_NAME% %principal%

以上设置好,即可保存该项目

3.本次使用的是robot框架,测试用例运行完成后控制台输出的日志导出到log.txt文件如下

根据导出的日志获取运行失败的测试用例标题

#GetCaseTitle.py#通过控制台输出的日志查找是否有运行失败的用例,如有则获取失败用例的标题class GetCaseTitle: def __init__(self): self.file = "log.txt" #使用jenkins运行测试用例时,会将控制台输出的日志保存到log.txt文件 def get_fail_case_title(self): fail_case_line = [] file = open(self.file, 'r', encoding='gbk') for line in file: # 查找失败的用例行 if "FAIL" in line: line = str(line).replace(" ", "") fail_case_line.append(line) file.close() if len(fail_case_line)>0: #如果标记为失败的行数大于0 fail_case_line = fail_case_line[:-1] # 去掉最后1行的总运行结果行 fail_case_title = [] for title in fail_case_line: # 分别获取失败case的标题 title = title.split('|')[0] if title not in fail_case_line[-1]: # 判断当前是否是最后一个用例标题,是则后面不再添加|符号 fail_case_title.append(title + ' | ') else: fail_case_title.append(title) fail_case_title = ''.join(fail_case_title) return fail_case_title else: return 0if __name__ == "__main__": GetCaseTitle().get_fail_case_title()

如存在运行失败的测试用例,则发送企业微信通知

#wechatNotice.py#实现企业微信通知import requestsimport jsonimport urllib3# import timeimport sysfrom GetCaseTitle import GetCaseTitleurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)class InformRobot: def __init__(self,url): #webhook地址 self.url = url self.sess = requests.session() def markdown_robot(self, report_url, principal, failcase): data = { "msgtype": "markdown", # 消息类型,此时固定为markdown "markdown": { "content": "提醒!线上UI测试计划运行失败 n" + f"测试报告链接:[{report_url}]({report_url}) n" + f"负责人:@{principal} n" f"失败用例名称:{failcase}" } } re_post = self.sess.post(self.url, data=json.dumps(data), verify=False) print(re_post.content, data)if __name__ == "__main__": failcase = GetCaseTitle().get_fail_case_title() #从GetCaseTitle.py获取执行失败的用例 if failcase: #如存在运行失败的用例则发送企业微信通知 url=sys.argv[1] projectname = sys.argv[2] principal = sys.argv[3] # execute_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) report_url = "http://172.18.1.1:8080/job/" + projectname + "/ws/log.html" InformRobot(url).markdown_robot(report_url, principal, failcase) else: print("测试通过")

发送通知的效果如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。