钉钉机器人自动推送测试报告

钉钉推送测试报告,关于推送的类型,最终选择了推送markdown的,也实现了预期的功能。现在记录下来,备忘。

效果图:

实现功能:

①实时推送测试结果到钉钉;

②加上了可爱可憎的@所有人功能 ;

③增加每日壁纸图;

④点击报告链接可以跳转查看详细的测试报告

1、添加钉钉机器人

获取自定义机器人webhook

步骤一,打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择“机器人管理”。

image.png

 

步骤二,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。

 

 

屏幕快照 2019-10-25 下午1.50.45.png

 

步骤三,完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”。安全设置目前有3种方式,设置说明见下文介绍。

image.png

 

步骤四,完成安全设置后,复制出机器人的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+"
"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
        timestamp = str(round(time.time() * 1000))
        secret = '**********'
        secret_enc = secret.encode('utf-8')
        string_to_sign = '{}
{}'.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接口测试报告 
> 执行应用:{} 
> 用例总数:{}条 
> 执行结果:通过{}条 ,失败{}条 ,通过率{}%
> ![每日壁纸](http://p0.so.qhimgs1.com/t02631d1836db81f6e3.jpg)
> ###### 点击查看报告详情。[报告]({}) 
".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

原文地址:https://www.cnblogs.com/mlp1234/p/13740711.html