飞道的博客

jenkins使用python脚本发送企业微信通知

777人阅读  评论(0)

如果只是想实现将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和项目异常时需通知的责任人

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

填写构建执行命令

构建命令说明如下:


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

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

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

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


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

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


  
  1. #wechatNotice.py
  2. #实现企业微信通知
  3. import requests
  4. import json
  5. import urllib3
  6. # import time
  7. import sys
  8. from GetCaseTitle import GetCaseTitle
  9. urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
  10. class InformRobot:
  11. def __init__(self,url): #webhook地址
  12. self.url = url
  13. self.sess = requests.session()
  14. def markdown_robot(self, report_url, principal, failcase):
  15. data = {
  16. "msgtype": "markdown", # 消息类型,此时固定为markdown
  17. "markdown": {
  18. "content": "提醒!线上UI测试计划运行失败 \n" +
  19. f"测试报告链接:[{report_url}]({report_url}) \n" +
  20. f"负责人:@{principal} \n"
  21. f"失败用例名称:{failcase}"
  22. }
  23. }
  24. re_post = self.sess.post(self.url, data=json.dumps(data), verify= False)
  25. print(re_post.content, data)
  26. if __name__ == "__main__":
  27. failcase = GetCaseTitle().get_fail_case_title() #从GetCaseTitle.py获取执行失败的用例
  28. if failcase: #如存在运行失败的用例则发送企业微信通知
  29. url=sys.argv[ 1]
  30. projectname = sys.argv[ 2]
  31. principal = sys.argv[ 3]
  32. # execute_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
  33. report_url = "http://172.18.1.1:8080/job/" + projectname + "/ws/log.html"
  34. InformRobot(url).markdown_robot(report_url, principal, failcase)
  35. else:
  36. print( "测试通过")

发送通知的效果如下:


转载:https://blog.csdn.net/qq_15158911/article/details/117406273
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场