网络编程
位置:首页>> 网络编程>> Python编程>> python使用jenkins发送企业微信通知的实现

python使用jenkins发送企业微信通知的实现

作者:朝天椒的夏天  发布时间:2022-06-06 19:40:16 

标签:python,企业微信,通知

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

一、前言

最近使用Jenkins进行自动化部署,但是部署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于接收方的接收设置,导致不能及时看到相关的发布内容。而由于公司使用的是企业微信,因此考虑Jenkins通知企业微信机器人的实现方式。

二、使用企业微信推送的优势

实时提醒项目参与人员项目信息的更新情况

便于查看

三、配置

3.1 企业微信的配置

3.1.1 进入企业微信群

进入某个群 -> 右击群标签,添加群机器人
注意:企业微信貌似没有像钉钉那样设置配置群机器人权限,因此任何人都能添加机器人。相对于钉钉有点落后

3.1.2 填写机器人信息

python使用jenkins发送企业微信通知的实现

python使用jenkins发送企业微信通知的实现

企业微信的机器人相较于钉钉机器人而言,太简单了。

3.1.3 复制Hook地址

python使用jenkins发送企业微信通知的实现

注意:此处的Webhook将用于Jenkins当中的参数配置。

3.2 Jenkins的配置

3.2.1 安装插件

  • 进入系统管理

  • 进入管理插件

  • 搜索插件(Qy Wechat Notification)

python使用jenkins发送企业微信通知的实现

安装插件后返回首页

3.2.2 配置Webhook

  • 进入 Jenkins Job

  • 进入 Job 配置

  • 前往构建后的操作 -> 选择企业微信通知

python使用jenkins发送企业微信通知的实现

设置Webhook

python使用jenkins发送企业微信通知的实现

3.3测试

  • 选择立即构建

  • 构建

  • 企业微信接收消息-推送结果

python使用jenkins发送企业微信通知的实现

实现的效果如下:

python使用jenkins发送企业微信通知的实现

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

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

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

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

python使用jenkins发送企业微信通知的实现

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

python使用jenkins发送企业微信通知的实现

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

python使用jenkins发送企业微信通知的实现

填写构建执行命令

python使用jenkins发送企业微信通知的实现

构建命令说明如下:


#执行测试用例 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文件如下

python使用jenkins发送企业微信通知的实现

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


#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("测试通过")

发送通知的效果如下:

python使用jenkins发送企业微信通知的实现

来源:https://blog.csdn.net/qq_15158911/article/details/117406273

0
投稿

猜你喜欢

  • 今天来认识一下两个我不太常用到的html标签:sub标记和sup标记。定义和用法:<sub> 标签可定义下标文本。<sup
  • 在程序的开发过程中,处理分页是大家接触比较频繁的事件,因为现在软件基本上都是与数据库进行挂钩的。但效率又是我们所追求的,如果是像原来那样把所
  • 1:为什么每个layout下都有个inlayout?我们将layout的宽/浮动等属性设置好之后,对于layout内的padding和mar
  • 分区表的概念 分区致力于解决支持极大表和索引的关键问题。它采用他们分解成较小和易于管理的称为分区的片(piece)的方法。一旦分区被定义,S
  • 对于JavaScript对象的操作基本上都会调用底层的对象内部方法,我们可以看出在ES6标准中定了14种内部方法.双 [[]] 代表内部方法
  • 一提起Google的产品,大多数人可能都会想到用一个词来形容,“简洁”。简单得来又实用,这就是Google的产品设计方针了。Jon Wile
  • 在日常的工作中,保护数据免受未授权用户的侵犯是系统管理员特别关心的问题。如果你目前用的是MySQL,就可以使用一些方便的功能来保护系统,来大
  • 简介Simon Willison来自英国,是一名经验丰富的开发人员。曾工作于Yahoo,是Web开发框架Django的创始人之一,也是Ope
  • Asp开发 联通CDMA以下是在开发wap中的随笔,其中一些对于“老鸟”来说,谈不上什么,希望对初学者有所帮助,大家有什么小技巧,欢迎顶上来
  • 正则表达式在 PHP 中的应用在 PHP 应用中,正则表达式主要用于:•正则匹配:根据正则表达式匹配相应的内容•正则替换:根据正则表达式匹配
  • 1. 检查HTML元素是否有拼写错误、是否忘记结束标记 即使是老手也经常会弄错div的嵌套关系。可以用dreamweaver的验证功能检查一
  • 前言随着行业的发展,编程能力逐渐成为软件测试从业人员的一项基本能力。因此在笔试和面试中常常会有一定量的编码题,主要考察以下几点。基本编码能力
  • 什么是索引拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为
  • Microsoft&reg; SQL Server&trade; 2000 由一系列产品组成,不仅能够满足最大的数据处理系统
  • 大多数做过网页设计的都知道“CSS框架”,而且肯定有很多设计师已经开始在作品中使用CSS框架。就像其他编程语言一样,CSS也可以把一些重复使
  • 本文实例讲述了PHP接口多继承及tarits实现多继承效果的方法。分享给大家供大家参考,具体如下:接口多继承在PHP的面向对象中,接口可以继
  • 如果你是个赛车手,并且按一下按钮就能够立即更换引擎而不需要把车开到车库里去换,那会是什么感觉呢?MySQL数据库为开发人员所做的就好像是按按
  • 引入:通常,钓鱼网站本质是本质搭建一个跟正常网站一模一样的页面,用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交,唯一不同
  • 从技术上来说,在ASP环境中,读入并管理XML文本的主要方法有三种: 创建MSXML对象,并且将XML文档载入DOM; 使用服务器端嵌入(S
  • 很久以前做的东西,发出来大家玩玩!<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
手机版 网络编程 asp之家 www.aspxhome.com