暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

接口测试与开发实战(二十一)_钉钉群机器人通知发送

1230


一、使用背景

当我们写了一套接口自动化脚本之后,希望每天测试不通过的用例可以及时的通知到测试人员。除了发送测试报告到邮件之外,还可以使用钉钉-群机器人这个工具,每天以推送的形式告知到测试人员。那接下来我们需要了解钉钉群机器人的推送机制。

二、钉钉消息推送

具体可参考官方文档:

https://developers.dingtalk.com/document/app/develop-enterprise-internal-robots

复制


类似于这种格式、这是我目前在公司的自动化测试钉钉群报告的模板


第一步创建钉钉群

这里假设我们都已经创建了钉钉群了这不略过。。。

第二步创建群机器人



群设置里面找到 ->智能群助手


点击添加机器人


添加机器人


选择自定义机器人

点击添加


输入群机器人的名称

安全设置

是进行使用钉钉接口进行的权重凭证、我们一般使用签名的认证方式、将下面的密钥进行复制下来

SEC1f50a51870370c0f5d6eaa41c7c0fff8619e42dac516ace2543d9bc0c36baa19
复制

每个机器人的密钥都不一样的


最后点击完成


将webhook复制下来 、点完成后基本完成操作了

钉钉群里就会收到一则通知



进入钉钉的API开发平台


我们主要看加签这一块、看看这样进行生成签名加密

找到python示例代码

我们进行复制下来放到python文件中去

import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
# 创建群机器人复制下来的密钥
secret = 'this is 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))
print(timestamp)
print(sign)

复制

运行一下

没有抛异常证明正常的



然后把 timestamp和第一步得到的签名值拼接到URL中。

https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX

复制

参数

说明

timestamp

第一步使用到的时间戳。

sign

第一步得到的签名值。

最后的完整url应该是这样的

url = "https://oapi.dingtalk.com/robot/send?access_token=xxxx&timestamp=1626336282534&sign=ShUVr%2Fnv0463z5sNe9kFxYGhzA3mUX5S1djpp6rm61Q%3D"
复制

我们使用requests发送下请求看看是否正常、我们不知道是什么请求方式、开放文档也没什么我们就使用get/post方法尝试即可:

import requests
url = "https://oapi.dingtalk.com/robot/send?access_token=xxxx&timestamp=1626336282534&sign=ShUVr%2Fnv0463z5sNe9kFxYGhzA3mUX5S1djpp6rm61Q%3D"

re = requests.get(url=url)
print(re.status_code)

复制

出现了200 正常、我们试试POST方法、结果发现也能正常发送、那我们就要post方法吧。

消息类型及数据格式

{
    "at": {
        "atMobiles":[
            "180xxxxxx"
        ],
        "atUserIds":[
            "user123"
        ],
        "isAtAll": false
    },
    "text": {
        "content":"我就是我, @XXX 是不一样的烟火"
    },
    "msgtype":"text"
}

复制



  • text类型

{
    "at": {
        "atMobiles":[
            "180xxxxxx"
        ],
        "atUserIds":[
            "user123"
        ],
        "isAtAll": false
    },
    "text": {
        "content":"我就是我, @XXX 是不一样的烟火"
    },
    "msgtype":"text"
}

复制


参数

参数类型

是否必填

必须

msgtype

String

消息类型,此时固定为:text。

content

String

消息内容。

atMobiles

Array

被@人的手机号。


atUserIds

Array

被@人的用户userid。

isAtAll

Boolean

是否@所有人。


  • link类型

{
    "msgtype""link"
    "link": {
        "text""这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林"
        "title""时代的火车向前开"
        "picUrl"""
        "messageUrl""https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
    }
}

复制

参数

参数类型

是否必填

说明

msgtype

String

消息类型,此时固定为:link。

title

String

消息标题。

text

String

消息内容。如果太长只会部分展示。

messageUrl

String

点击消息跳转的URL。

picUrl

String

图片URL。


markdown类型

{
     "msgtype""markdown",
     "markdown": {
         "title":"杭州天气",
         "text""#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"
     },
      "at": {
          "atMobiles": [
              "150XXXXXXXX"
          ],
          "atUserIds": [
              "user123"
          ],
          "isAtAll": false
      }
 }

复制


钉钉也支持很多其他的类型的数据格式、这里我们就用以上三个做介绍具体学习即可、后面在设计框架时还需要进行高级封装等操作、后面我们再来进一步学习。



下面举个栗子:

import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = 'SEC1f50a51870370c0f5d6eaa41c7c0fff8619e42dac516ace2543d9bc0c36baa19'
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))
# print(timestamp)
# print(sign)


import requests
webhook = "https://oapi.dingtalk.com/robot/send?access_token=35c1d7762039dccf84a9ea52073fbcf731aa4cd086982dff31c1f93b46a70f15"

url = '%s&timestamp=%s&sign=%s'%(webhook,timestamp,sign)
data = {
    "at": {
        "isAtAll"False
    },
    "text": {
        "content":"我就是我,是不一样的烟火"
    },
    "msgtype":"text"
}
re = requests.post(url=url,json=data)
print(re.content)

复制


好了钉钉群发送报告及通知基本样例已完成、自己可以下去好好跟着钉钉文档操作即可、后面的数据格式都与这个一样的操作、只是传递的参数不同罢了。


后面再进行对些操作进行封装。


文章转载自测试前沿布道者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论