如果只是想实现将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
0
-
-
if __name__ ==
"__main__":
-
GetCaseTitle().get_fail_case_title()
如存在运行失败的测试用例,则发送企业微信通知
-
#wechatNotice.py
-
#实现企业微信通知
-
-
import requests
-
import json
-
import urllib3
-
# import time
-
import sys
-
from GetCaseTitle
import GetCaseTitle
-
-
urllib3.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(
"测试通过")
发送通知的效果如下:
转载:https://blog.csdn.net/qq_15158911/article/details/117406273
查看评论