jenkins使用python脚本发送企业微信通知
如果只是想實(shí)現(xiàn)將jenkins的構(gòu)建結(jié)果發(fā)送到企業(yè)微信進(jìn)行通知,最簡(jiǎn)便的方式是安裝Qy Wechat Notification Plugin插件,網(wǎng)上教程很多就不重復(fù)寫(xiě)了,可參考:https://www.cnblogs.com/jianxuanbing/archive/2019/09/04/11459972.html
實(shí)現(xiàn)的效果如下:
以下是實(shí)現(xiàn)可配置的企業(yè)微信通知
1.建企業(yè)微信群,添加群機(jī)器人,獲取機(jī)器人的webhook地址
2.jenkins中創(chuàng)建項(xiàng)目,配置如下:
general下This project is parameterized,添加兩個(gè)string parameter
分別為企業(yè)微信機(jī)器人的webhook和項(xiàng)目異常時(shí)需通知的責(zé)任人
用戶(hù)默認(rèn)值填對(duì)應(yīng)企業(yè)微信群中的用戶(hù)名,才可保證發(fā)通知時(shí)能夠@到對(duì)應(yīng)的人,多個(gè)用戶(hù)名之間用英文逗號(hào)隔開(kāi)
填寫(xiě)構(gòu)建執(zhí)行命令
構(gòu)建命令說(shuō)明如下:
#執(zhí)行測(cè)試用例 pybot.bat 用例路徑 #將控制臺(tái)輸出導(dǎo)出到log.txt文件,控制臺(tái)不再打印日志 >log.txt #如果前面一條指令執(zhí)行失敗才執(zhí)行||后面的指令 || #如果前面一條指令執(zhí)行成功才執(zhí)行&&后面的指令 && #執(zhí)行python腳本,發(fā)送企業(yè)微信通知,傳入webhook地址,jenkins項(xiàng)目名稱(chēng),發(fā)送通知@責(zé)任人 python ../wechatNotice.py %url% %JOB_NAME% %principal%pybot.bat 目錄名稱(chēng)/***.robot >log.txt || python ../wechatNotice.py %url% %JOB_NAME% %principal%以上設(shè)置好,即可保存該項(xiàng)目
3.本次使用的是robot框架,測(cè)試用例運(yùn)行完成后控制臺(tái)輸出的日志導(dǎo)出到log.txt文件如下
根據(jù)導(dǎo)出的日志獲取運(yùn)行失敗的測(cè)試用例標(biāo)題
#GetCaseTitle.py #通過(guò)控制臺(tái)輸出的日志查找是否有運(yùn)行失敗的用例,如有則獲取失敗用例的標(biāo)題class GetCaseTitle:def __init__(self):self.file = "log.txt" #使用jenkins運(yùn)行測(cè)試用例時(shí),會(huì)將控制臺(tái)輸出的日志保存到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: #如果標(biāo)記為失敗的行數(shù)大于0fail_case_line = fail_case_line[:-1] # 去掉最后1行的總運(yùn)行結(jié)果行fail_case_title = []for title in fail_case_line: # 分別獲取失敗case的標(biāo)題title = title.split('|')[0]if title not in fail_case_line[-1]: # 判斷當(dāng)前是否是最后一個(gè)用例標(biāo)題,是則后面不再添加|符號(hào)fail_case_title.append(title + ' | ')else:fail_case_title.append(title)fail_case_title = ''.join(fail_case_title)return fail_case_titleelse:return 0if __name__ == "__main__":GetCaseTitle().get_fail_case_title()如存在運(yùn)行失敗的測(cè)試用例,則發(fā)送企業(yè)微信通知
#wechatNotice.py #實(shí)現(xiàn)企業(yè)微信通知import requests import json import urllib3 # import time import sys from GetCaseTitle import GetCaseTitleurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)class InformRobot:def __init__(self,url): #webhook地址self.url = urlself.sess = requests.session()def markdown_robot(self, report_url, principal, failcase):data = {"msgtype": "markdown", # 消息類(lèi)型,此時(shí)固定為markdown"markdown": {"content": "提醒!線(xiàn)上UI測(cè)試計(jì)劃運(yùn)行失敗 \n" +f"測(cè)試報(bào)告鏈接:[{report_url}]({report_url}) \n" +f"負(fù)責(zé)人:@{principal} \n"f"失敗用例名稱(chēng):{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獲取執(zhí)行失敗的用例if failcase: #如存在運(yùn)行失敗的用例則發(fā)送企業(yè)微信通知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("測(cè)試通過(guò)")發(fā)送通知的效果如下:
總結(jié)
以上是生活随笔為你收集整理的jenkins使用python脚本发送企业微信通知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【实习之路】在广州欢聚时代入职的第一天
- 下一篇: Python 实时盯盘并在股价突破时通过