zoukankan      html  css  js  c++  java
  • 钉钉机器人自动推送测试报告

    钉钉推送测试报告,关于推送的类型,最终选择了推送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

  • 相关阅读:
    【POI】使用POI 创建生成XLS,打开xls文件提示【此文件中某些文本格式可能已经更改,因为它已经超出最多允许的字体数。】
    【提问解答】2017-10-18--如果你有什么问题,可以分享出来,让我帮你一起解决=_=
    【sublime Text】sublime Text3安装可以使xml格式化的插件
    【IntelliJ IDEA】idea上安装Translation插件后,需要AppKey才能生效的解决方案
    【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
    【sublime Text】关闭sublime的更新提醒和激活提醒
    【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
    【spring boot】4.spring boot配置多环境资源文件
    java多线程断点下载原理(代码实例演示)
    Google Chrome Developer Tools
  • 原文地址:https://www.cnblogs.com/mlp1234/p/13740711.html
Copyright © 2011-2022 走看看