图片发送:
需要开发机器人应用,在此不详细介绍,可以参考飞书官方地址:
https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/image/create
https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-enable-bot-ability
公司内部开发已开发完成,这里主要介绍下测试结果数据和图片汇总,以及调用发送
# 获取所有的图片列表
def get_screen(self):
screen_list = []
return screen_list
# 获取测试失败的模块列表
def get_module_list(self):
error_module_list = []
return error_module_list
# 图片消息发送
def send_img_msg(self, screen_path):
screen_list = self.get_screen()
error_module_list = self.get_module_list()
image_list = []
data = {
'title': "UI检测结果",
'mutiple_text': [
"如下页面展示异常:",
],
'image_list': []
}
image_list = data['image_list']
mutiple_text = data['mutiple_text']
# 失败模块加入发送data中
for module_name in error_module_list:
mutiple_text.append(module_name)
# 图片文件的base64编解码,webhook调用发送
for screen in screen_list:
file_path = os.path.join(screen_path, screen)
try:
with open(file_path, 'rb') as fp:
image_base64 = base64.b64encode(fp.read())
image_binary_str = image_base64.decode()
image_list.append(image_binary_str)
except Exception as e:
print("there is an error when open screen file: ", e)
res = requests.post(url=self.webhook, json=data)
if __name__ == '__main__':
web_hook = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxx"
screen_file_path = "/home/jenkins/workspace/UITest/screens"
alarm.send_img_msg(screen_file_path)
在实际应用中该脚本文件要集成的jenkins中,在持续集成步骤,每次触发构建后自动发送通知,在脚本中可加一个条件,如果有失败结果再发送群通知。
二、钉钉群消息发送
同飞书类似,需要添加自定义机器人,获取webhook及加签key
步骤:
- 进入群聊,打开群设置,智能群助手,并点击添加机器人。选择自定义
2. 点击添加,设置机器人头像、名字,勾选“加签”,复制保存密钥,然后点击完成。
3. 会自动生成webhook,webhook复制保存,点击完成,机器人添加群完毕。
4. 调用webhook发送消息
本例同样采用了加签方式进行消息发送,把timestamp "\n" 密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
text消息发送:
class Alarm:
def __init__(self, webhook, key):
self.url = webhook
self.secret = key
self.headers = {"Content-Type": "application/json"}
def get_sign(self, timestamp, secret):
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
return timestamp, sign
def send_text_msg(self, msg, at_mobiles=None, is_atall=False):
data = {
"msgtype": "text",
"text": {
"content": msg
},
"at": {
"atMobiles": at_mobiles,
"isAtAll": is_atall
}
}
timestamp, sign = self.get_sign(str(round(time.time() * 1000)), self.secret)
url = f'{self.url}×tamp={timestamp}&sign={sign}'
r = requests.post(url, json=data, headers=self.headers)
ret = r.json()
if ret.get("errcode") != 0:
logger.info("钉钉消息发送失败!返回报文是:{}", ret)
return False
logger.info("钉钉消息发送成功")
return True
if __name__ == '__main__':
web_hook = "https://oapi.dingtalk.com/robot/send?access_token=test"
key = "SEC29d9b638568e66aa236f8d7ea628f4c16bba9db010a87cd37902672test"
alarm = Alarm(web_hook, key)
at_mobiles = ["13800138000"]
alarm.send_text_msg("自动化测试结果有异常,请及时关注", at_mobiles, False)
测试结果:
link消息发送
data = {
"msgtype": "link",
"link": {
"text": "发版前回归测试通知,请各相关负责人认真确认相关测试bug,及时处理,保证产品如期上线",
"title": "回归测试缺陷通知",
"picUrl": "https://img95.699pic.com/xsj/04/mn/g9.jpg!/fw/700/watermark/url/L3hzai93YXRlcl9kZXRhaWwyLnBuZw/align/southeast",
"messageUrl": "https://www.dingtalk.com/"
}
}
通知效果:
其它消息类型,支持markdown,actionCard等类型,可参考钉钉官方介绍文档。
钉钉也支持gitlab, github, jira等机器人进行简单webhook配置,即可实现群通知,十分方便。
以上为最基本的使用方法,实际应用中要结合具体业务和场景实现使用,目前测试工作中主要应用方面,一个是每日通过脚本读取数据库中bug相关数据统计并发送群通知(项目名称,bug总计,今日新增,今日修复,今日关闭等数据),第二个是自动化测试和线上定时检测的异常和告警通知,及时反馈给相关人员,及时处理。
感谢阅读,欢迎关注微信公众号(ATester),所有文章会在公众号首发。