• 接口自动化发送钉钉群消息


    一,新建钉钉机器人
    1.钉钉群右上角点击群设置,选择智能群助手,点击添加机器人,选择自定义机器人;
    在这里插入图片描述
    2.给机器人起个名字,消息推送开启,复制出webhook,后面会用到,勾选自定义关键词,填写关键词(关键词可以随便填写,但是一定要记住,后面会用);
    在这里插入图片描述
    在这里插入图片描述
    二,钉钉机器人发送消息
    url就是创建机器人时的webhook,data中的atMobiles可填写多个手机号,发送的消息会直接@这个人,text的content里面一定要加上创建机器人时设置的关键词,msgtype意思时文本格式,也可以link格式,就可以放链接了;

        def send_text(self):
    
            url = "https://oapi.dingtalk.com/robot/send?access_token=43c4dab2ac31125e605c458b4b9561a73"
            headers = {'Content-Type': 'application/json'}
            data = {"at": {"atMobiles":["18206264857"],"atUserIds":["user123"],"isAtAll": False},
                    "text": {"content":"砍价小程序接口自动化测试"},"msgtype":"text"},"msgtype":"text"}
            requests.post(url,headers=headers,data=json.dumps(data))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三,钉钉机器人实际的应用
    1.监控接口自动化结果
    在这里插入图片描述
    实现思路是:jenkins定时执行自动化——执行完后生成html报告——BeautifulSoup模块解析html报告——发送钉钉消息
    如下代码:
    解析html的模块:

    from common.handle_path import html_path
    from bs4 import BeautifulSoup
    
    class GetHtml:
        """
        读取测试报告,解析html  获得测试用例总数,通过数等,发送到钉钉
        """
    
        def get_total(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("p")[1].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
        def get_pass(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("span",class_="passed")[0].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
        def get_skipped(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("span",class_="skipped")[0].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
        def get_failed(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("span",class_="failed")[0].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
    
        def get_error(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("span",class_="error")[0].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
    
        def get_xfailed(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("span",class_="xfailed")[0].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
        def get_xpassed(self):
            with open(html_path, "r", encoding="utf-8") as f:
                file = f.read()
                soup = BeautifulSoup(file, 'html.parser')  # 使用BeautifulSoup库解析网页内容
                item = soup.find_all("span",class_="xpassed")[0].string  # 使用BeautifulSoup库的标签方法找到你需要的内容
                return str(item)
    
    if __name__ == '__main__':
        t = GetHtml()
        t.get_xpassed()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    如下代码:
    发送钉钉消息的模块:

    
    import requests
    import json
    from common.handle_readhtml import GetHtml
    
    class SendMassage:
    
        """
        发送测试结果到钉钉群
        """
        result = GetHtml()
        total = result.get_total()
        passed = result.get_pass()
        skipped = result.get_skipped()
        failed = result.get_failed()
        error = result.get_error()
        xfailed = result.get_xfailed()
        xpassed = result.get_xpassed()
        def send_text(self):
    
            url = "https://oapi.dingtalk.com/robot/send?access_token=43c4dab2ac3152e605c458b4b9561a73"
            headers = {'Content-Type': 'application/json'}
            data = {"at": {"atMobiles":["18206233880"],"atUserIds":["user123"],"isAtAll": False},
                    "text": {"content":"砍价小程序接口自动化测试 \n total       : {}\n passed   : {},\n skipped : {},\n failed    : {},\n error     : {},\n xfailed   : {},\n xpassed : {}".format(self.total,self.passed,self.skipped,self.failed,self.error,self.xfailed,self.xpassed)},"msgtype":"text"}
            requests.post(url,headers=headers,data=json.dumps(data))
    
    
    if __name__ == '__main__':
        s = SendMassage()
        s.send_text()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    jenkins配置的shell为:
    先执行接口自动化脚本,等待一会然后发送钉钉消息;

    ${PYTHON} main.py
    sleep 100
    ${PYTHON} handle_dingding.py
    
    • 1
    • 2
    • 3

    接口自动化发钉钉群消息还可以再优化,比如可以加上断言失败的错误日志等;
    在这里插入图片描述

    2,监控qa环境错误日志
    这里借用大佬的一篇博客:https://www.cnblogs.com/zy0209/p/12769466.html
    此处发送的qq邮件,消息查看不方便,且不好共享,可以优化为发钉钉群消息,然后将开发也拉到群里,提高效率;
    3,jira上有钉钉机器人插件,可以每天发送消息@某某开发 还有N个待处理bug,@某某测试 还有N个待验证bug,以及监控看板指标达到阈值报警等;

  • 相关阅读:
    OpenMP 快速入门
    数据库——模式分解和关系范式的分解
    Linux 虚拟网络类型(NAT和桥接)介绍
    求过去半年内连续30天以上每天都有1000元以上成交的商铺
    flex布局(弹性盒子三)
    阿里云的ACA认证到底是个啥?有用吗?
    String类及相应的字符串操作方法
    java版直播商城平台规划及常见的营销模式有哪些?
    android应用后台常驻内存优化(二) 类重命名
    路由器基础(十二):IPSEC VPN配置
  • 原文地址:https://blog.csdn.net/weixin_48636525/article/details/125003998