钉钉机器人自动推送测试报告
钉钉推送测试报告,关于推送的类型,最终选择了推送markdown的,也实现了预期的功能。现在记录下来,备忘。
效果图:
实现功能:
①实时推送测试结果到钉钉;
②加上了可爱可憎的@所有人功能 ;
③增加每日壁纸图;
④点击报告链接可以跳转查看详细的测试报告
1、添加钉钉机器人
获取自定义机器人webhook
步骤一,打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择“机器人管理”。
步骤二,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。
步骤三,完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”。安全设置目前有3种方式,设置说明见下文介绍。
步骤四,完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
2、上代码
2.1 封装
import base64 import hashlib import hmac import time import urllib.parse import requests from core.logger import Logger logger = Logger().logger Webhook_url = "https://oapi.dingtalk.com/robot/send" class DingTalk: def __init__(self, msg): self.msg = msg logger.info("开始发送钉钉消息") # 加密签名并组合字段 def __spliceUrl(self): # 第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。 timestamp = str(round(time.time() * 1000)) 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)) # 第二步,把 timestamp和第一步得到的签名值拼接到URL中。 payload = { 'access_token': '********', 'timestamp': timestamp, 'sign': sign } # print(payload) return payload # 发送钉钉消息 def send_text(self): headers = {'Content-Type': 'application/json; charset=utf-8'} res = requests.post(Webhook_url, params=self.__spliceUrl(), headers=headers, json=self.msg) # print(res.url) # print(res.text) if "ok" in res.text: logger.info("钉钉消息发送成功") else: logger.error("钉钉消息推送失败!" + res.text) if __name__ == "__main__": pass
2.2 调用
# 发送钉钉推送消息 msg = { "msgtype": "markdown", "markdown": { "title": "APP接口自动化测试报告", "text": "#### 体检宝APP接口测试报告 \n> 执行应用:{} \n> 用例总数:{}条 \n> 执行结果:通过{}条 ,失败{}条 ,通过率{}%\n> ![每日壁纸](http://p0.so.qhimgs1.com/t02631d1836db81f6e3.jpg)\n> ###### 点击查看报告详情。[报告]({}) \n".format( '体检宝APP', num_[0], num_[1], int(num_[0]) - int(num_[1]), num_[-1], 'http://' + IP + ':12345/report_tjb') }, "at": { "atMobiles": [ ], "isAtAll": True } } # logger.info("访问的地址是:{}".format(IP+':12346'+'/report')) ding = DingTalk(msg=msg) ding.send_text()
OK