通用技术 调用微信接口实现测试监控

snake · August 04, 2016 · Last by tester replied at April 10, 2018 · 7021 hits
本帖已被设为精华帖!

最近写了些东东,来监控各种异常。传统的发邮件时效性不太好,更何况每天那么多邮件。
想到用微信的企业号来发消息。最重要一点,它是免费的。

首先要注册一个账号:
here

选择企业号

要填手机号,(微信需要绑定银行卡),扫描一下。

填写完公众号信息,就差不多看到曙光了。

创建一个应用,本人选择的是消息型。

设置管理员
指定应用的管理员。点击设置-> 权限管理 -> 管理 -> 新建管理组 --> 添加管理员和权限。然后就会获得corpid 和 sceret。记录下来,这个很重要。后面代码中用得到。

然后就是敲代码了。

#!/usr/bin/python
# coding=utf-8
import sys
import urllib2
import time
import json
import requests

__author__ = 'anderson'

reload(sys)
sys.setdefaultencoding('utf-8')

CORPID = "XXXX"
CORPSECRET = "XXXX"
BASEURL = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}'.format(CORPID, CORPSECRET)
URL = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s"


class Token(object):
# get token
def __init__(self):

self.expire_time = sys.maxint

def get_token(self):
if self.expire_time > time.time():
request = urllib2.Request(BASEURL)
response = urllib2.urlopen(request)
result_string = response.read().strip()
result_json = json.loads(result_string)
if 'errcode' in result_json.keys():
print >> result_json['errmsg'], sys.stderr
sys.exit(1)
self.expire_time = time.time() + result_json['expires_in']
self.access_token = result_json['access_token']
return self.access_token


def send_message(title, content):
team_token = Token().get_token()
print team_token
url = URL % (team_token)
wechat_json = {
"toparty": "1",
"msgtype": "text",
"agentid": "1",
"text": {
"content": "title:{0}\n content:{1}".format(title, content)
},
"safe": "0"
}
response = requests.post(url, data=json.dumps(wechat_json, ensure_ascii=False, encoding='utf8'))
print response.json()


if __name__ == '__main__':
send_message("test", "just test")

运行一下,就可以收到消息了:

点开,显示正确:

可以设置各种群组,接收消息的人。
结合Jenkins, 灵活运用到测试中来。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 35 条回复 时间 点赞
思寒_seveniruby 将本帖设为了精华贴 04 Aug 13:28

加精理由: 提供了一个不错的报警思路. 有用.

其他的微信公众号通过接口应该也能发. 你的这个脚本可以试试再精简为两三行bash脚本.

微信报警的效率要会高一些,请问楼主一下是否有字数限制以及每日条数限制?@snake

snake #4 · August 04, 2016 作者

每次最多发2W个字符; 条数限制,我记得在哪里看到是每月200条,还是每分钟最多发200条。认证需要费用。不认证的企业号,可以支持200人用,一般小企业并且需求不高的话,可以不认证。

我擦,正好用得上!先去试试看

如果公司用钉钉的话,其实钉钉更合适,一天1000次调用,支持富文本消息,我们的监控就是通过钉钉推送消息的

很棒啊,又多了一个思路了

上次有弄过一个监控异常通知的小脚本,也考虑过使用公众号,可是因为多种原因放弃了,后来使用了selenium加WEB版的微信解决了。。。你这个比我的要好太多了!

#6楼 @u1470305603 钉钉是直接短信发到手机吗? 有api吗?

这个思路不错,试试看!

发的消息是在订阅号里面,还是消息列表里的?

个人订阅号是否有限制,同问下

接口返回{'errcode': 0, 'errmsg': 'ok'}

这个思路不错,试试看!

试试看

onealert免费版基本也是够用的。通知途径还是很多的

报错,搞不定啊
TypeError: the JSON object must be str, not 'bytes'

手动可以发送消息,但是python发就报错{u'errcode': 82001, u'errmsg': u'All touser & toparty & totag invalid'},是不是发送的json内容有错误啊,比如toparty或agentid不对,按照你代码写的,传的都是1

#14楼 @wuyuleba {u'errcode': 0, u'errmsg': u'ok'} 这种情况我也遇到了,我发送给@all,响应值就是这样,但是微信没收到,手动发就收到了,你解决了没?

我已经解决了报错和收不到消息的问题了,现在有一个新的问题,就是这个发送消息的py脚本,怎么在jenkins中使用?构建完成后,没有找到对应的插件去执行python文件,请问你们这里是怎么解决的?

#21楼 @Tank007 插件名忘了

#22楼 @wuyuleba 这样不能根据构建的结果发送通知,一般这种情况都是构建失败或者用例报错然后发送的通知,而且通知的内容最好还有相关的构建状态信息等,直接shell好像不能满足需求

#23楼 @Tank007 win %ERRORLEVEL% linux $? 通过error code判断是否success

jenkins有一个环境变量是 BUILD_STATUS ,构建状态,我想要的是这个值,可是直接取的时候,是None,你说的%ERRORLEVEL%,我用python取出来是None

#25楼 @Tank007 BUILD_STATUS也是jenkins判断errorcode来的

值得收藏,微信现在越来越有用了!

有大神遇到过
我是直接在jenkins中开个脚本运行的
有详细的解决步骤吗?小白一杖~

#28楼 @xl051008
CORPID = "XXXX"
CORPSECRET = "XXXX" 是不是这里填错了

#30楼 @wuyuleba 有可能是CORPSECRET 这一项填错了。xxx这是填Secret的内容吗?还是填别的内容。

挺好的想法~!

@xl051008 你这个脚本是干什么用的啊~

codeskyblue 调用钉钉接口实现消息通知 中提及了此贴 14 Dec 13:10
tester 回复

请问您这个问题是怎么解决的,我现在也遇到了,烦请提供一下思路

littletiger7 回复

什么问题,描述清楚

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up