python使用企业微信机器人发送测试报告

时间:2024-03-17 22:48:52

 



 

 

自从企业微信添加了群机器人功能,我们现在使用机器人发送测试报告,最开始使用的是文本类型,但是感觉没有markdown的显示好看,索性就更换成了markdown类型的

官网上介绍的还可以发送图片和图文等类型,但是还没实操过,所以不多介绍,只介绍文本(text)和markdown类型

 

鼠标点击此处进入企业微信帮助文档页面

 

消息类型及数据格式 》文本类型

{
    "msgtype": "text",
    "text": {
        "content": "广州今日天气:29度,大部分多云,降雨概率:60%",
        "mentioned_list":["wangqing","@all"],
        "mentioned_mobile_list":["13800001111","@all"]
    }
}

 

消息类型及数据格式 》markdown类型

{
    "msgtype": "markdown",
    "markdown": {
        "content": "实时新增用户反馈<font color=\"warning\">132例</font>,请相关同事注意。\n
         >类型:<font color=\"comment\">用户反馈</font> \n
         >普通用户反馈:<font color=\"comment\">117例</font> \n
         >VIP用户反馈:<font color=\"comment\">15例</font>"
    }
}

 

目前支持的markdown语法是如下的子集:

  1、标题 (支持1至6级标题,注意#与文字中间要有空格)

# 标题一
## 标题二
### 标题三
#### 标题四
##### 标题五
###### 标题六

  2、加粗

**bold**

  3、链接

[这是一个链接](http://work.weixin.qq.com/api/doc)

  4、引用

> 引用文字

  5、字体颜色(只支持3中内置颜色)

<font color="info">绿色</font>
<font color="comment">灰色</font>
<font color="warning">橙红色</font>

 

接下来我们使用python代码先实现markdown类型

 1 import apiProject as ap
 2 
 3 
 4 class WeChat:
 5 
 6     def __init__(self):
 7         self.conf = ap.HandleConf()
 8         self.read = ap.HandleFiles()
 9         ap.urllib3.disable_warnings()
10 
11     @staticmethod
12     def message(project, end, total, passing, succeed, failing, skip, error, address):
13         """
14         需要发送到企业微信的文案信息
15         :param project:         项目名称
16         :param end:             指定端[web、app、h5]
17         :param total:           总计
18         :param passing:         通过率
19         :param succeed:         通过数
20         :param failing:         失败数
21         :param skip:            跳过数
22         :param error:           错误数
23         :param address:         链接地址->放一个链接信息
24         :return:                返回data信息
25         """
26         data = {
27             "msgtype": "markdown",  # 消息类型,此时固定为markdown
28             "markdown": {
29                 "content": "# **提醒!自动化测试反馈**\n#### **请相关同事注意,及时跟进!**\n"
30                            "> 项目名称:<font color=\"info\">%s</font> \n"
31                            "> 项目指定端:<font color=\"info\">%s</font> \n"
32                            "> 测试用例总数:<font color=\"info\">%s条</font>;测试用例通过率:<font color=\"info\">%s</font>\n"
33                            "> **--------------------运行详情--------------------**\n"
34                            "> **成功数:**<font color=\"info\">%s</font>\n**失败数:**<font color=\"warning\">%s</font>\n"
35                            "> **跳过数:**<font color=\"info\">%s</font>\n**错误数:**<font color=\"comment\">%s</font>\n"
36                            "> ##### **报告链接:** [jenkins报告,请点击后进入查看](%s)" % (
37                            project, end, total, passing, succeed, failing, skip, error, address)
38                 # 加粗:**需要加粗的字**
39                 # 引用:> 需要引用的文字
40                 # 字体颜色(只支持3种内置颜色)
41                 # 标题 (支持1至6级标题,注意#与文字中间要有空格)
42                 # 绿色:info、灰色:comment、橙红:warning
43             }
44         }
45         return data
46 
47     def send_message(self, project, end, total, passing, succeed, failing, skip, error, address=\'\', is_curl=False):
48         """
49         发送文案信息
50         :param project:         项目名称
51         :param end:             指定端[web、app、h5]
52         :param total:           总计
53         :param passing:         通过率
54         :param succeed:         通过数
55         :param failing:         失败数
56         :param skip:            跳过数
57         :param error:           错误数
58         :param address:         链接地址->放一个链接信息
59         :param is_curl:         判断是测试还是线上
60         :return:
61         """
62         jenkins_address = self.jenkins_data()
63         data = self.message(project, end, total, passing, succeed, failing, skip, error, address=jenkins_address)
64         # 获取企业微信群机器人的url, 使用的python第三方库requests库发送的请求
65         if is_curl:
66             url = self.conf.get_value(\'WeChat\', \'pro_curl\')
67             res = ap.requests.post(url=url, json=data, verify=False)
68         else:
69             url = self.conf.get_value(\'WeChat\', \'test_curl\')
70             res = ap.requests.post(url=url, json=data, verify=False)
71         return res.text
72 
73     def jenkins_data(self):
74         
75         # 登录jenkins,从jenkins获取报告信息
76         account = self.read.read_yaml(\'jenkins_data\', \'pro\')
77         server = ap.jenkins.Jenkins(account[\'jenkins_url\'], username=account[\'user_name\'], password=account[\'password\'])
78         jenkins_data = tuple(i[\'url\'] for i in server.get_views())
79         for i in jenkins_data:
80             u = ap.urlparse(i)
81             v_scheme, v_netloc, v_path = u.scheme, u.netloc, u.path
82             if \'9first_api_all\' in v_path:
83                 return i
84             else:
85                 return v_scheme + \'://\' + v_netloc + \'/\'

运行成功后,就会自动往指定企业微信群发送一个消息内容​

 

 然后我们再来使用python代码实现文本类型( text ),就是把发送的格式修改成文本类型,所以我也就只改了这个静态方法

 1     @staticmethod
 2     def message(project, end, total, passing, succeed, failing, skip, error, address):
 3         """
 4         需要发送到企业微信的文案信息
 5         :param project:         项目名称
 6         :param end:             指定端[web、app、h5]
 7         :param total:           总计
 8         :param passing:         通过率
 9         :param succeed:         通过数
10         :param failing:         失败数
11         :param skip:            跳过数
12         :param error:           错误数
13         :param address:         链接地址->放一个链接信息
14         :return:                返回data信息
15         """
16         data = {
17             "msgtype": "text",  # 消息类型,此时固定为text
18             "text": {
19                 "content": "提醒!自动化测试反馈\n请相关同事注意,及时跟进!\n"
20                            "项目名称:%s\n"
21                            "项目指定端:%s\n"
22                            "测试用例总数:%s条;测试用例通过率:%s\n"
23                            "--------------------运行详情--------------------\n"
24                            "成功数:%s\n失败数:%s\n"
25                            "跳过数:%s\n错误数:%s\n"
26                            "报告链接:%s" % (
27                            project, end, total, passing, succeed, failing, skip, error, address)
28             }
29         }
30         return data

运行成功后,也会发送一个信息到指定企业微信群中

 

两种发送信息对比下,没有markdown的好看,因为mark的可以字体加粗、加颜色、增连接等......所以瞬间就决定更换成了markdown类型,以上代码为接口自动化实操代码,如有代码臃肿之处还望给出建议。

 


小小总结可能会解决你的问题,也可能解决不了你的问题,但还是希望对您有所帮助,感谢阅读,如有疑义,欢迎来扰!未完待续…

一直都在努力变好中,希望您也是,加油!

 

转载请附带原文链接,否则追究法律责任,谢谢!