unittestreport帮你搞定发送自动化测试结果到钉钉
前言
前段时间有小伙伴反馈,公司执行完自动化之后,需要把测试结果发送到钉钉群里面,应该怎么实现。其实往钉钉群里面发送测试结果很简单,获取到钉钉的webhook地址后,直接发送请求即可。但是也有小伙伴表示不知道从何下手,那么今天小编就来给大家讲讲如何去做。
1、钉钉群机器人创建
要往钉钉群中发送消息,那么首先咱们得自定义一个钉钉群机器人,群机器人的定义非常简单,钉钉开放平台(https://ding-doc.dingtalk.com/)中有详细的教程,大家可以按这个文档教程去创建一个群机器人,创建群机器人的时候有三种安全设置,关键字校验,有签名校验,有ip地址校验,大家根据需求去选择即可。
-
钉钉开放平台配置图
机器人创建好了之后会有一个webhook的地址,这个地址大家一定要保存下来,咱们后续往钉钉群发通知,直接这个webhook的地址发送即可。webhook的格式如下:
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
2、案例演示
通过上面创建好群机器人之后,那么接下来就可以通过webhook地址发送消息了。关于消息发送钉钉也提供了SDK,钉钉官方文档上面也有案例介绍。因为小编用的是python语言,于是就把钉钉提供的python版本的sdk下载下来看了一下,发现钉钉官方提供的python版SDK提供给用户使用的接口真的不太友好【一看就不是专业写py的人写出来的,里面的py代码写的真是烂的可以,居然还有很多分号(;), 小小的吐槽一下 】,既然钉钉官方提供的SDK不太优化,那么就直接抛弃不用,直接用requests发送请求更实在。
-
案例一
由于我这边创建的钉钉群机器人,安全设置只添加一个【自动化】的关键字,消息的文本内容中只要有这几个字就可以通过校验。发送消息的代码如下
import requests # webhook地址 url = "https://oapi.dingtalk.com/robot/send?access_token=6e2a63c2b9d870ee878335b5ce6d5d102323232" # 发送的消息 data = { "msgtype": "text", "text": { "content": "自动化测试,测试一下,请忽略" }, "at": { "atMobiles": [], "isAtAll": False } } 发送请求获取结果 res = requests.post(url=url, json=data) print(res.text)
运行上述代码,钉钉群中就可以收到咱们发送的消息。当然如果安全设置里面设置了签名的咱们在发送请求的时候,要把签名加上。至于如何生成签名钉钉开放平台里面也提供了参考代码。SDK里面也做了封装,只有配置一下签名校验的秘钥即可,因为我这边没使用官方提供的SDK,关于添加秘钥这些操作,小编自己封装了一个模块用来代替官方的SDK。因为考虑到要发送测试结果,这边把封装好的模块集成到了unittestreport中。下面给大家介绍如何使用unittestreport来发送钉钉群消息。
3、unittestreport发送钉钉消息
unittestreport是柠檬班木森老师基于unittest框架开发的一个扩展库,没有用过unittestreport的可以去看看详细的使用文档( unittestreport 详细功能使用文档(V1.1.1) ),接下来给大家介绍一下如何使用unittestreport来发送钉钉群消息。
unittestreport模块中实现了一个DingTalk的类,可以用来发送钉钉群消息,对与签名验证也做了封装,需要进行签名验证的话,在实例化DingTalk对象的时候,通过secret参数传入秘钥即可。
-
DingTalk初始化参数介绍
-
案例
from unittestreport.core.dingtalk import DingTalk
data = {
"msgtype": "text",
"text": {
"content": "自动化测试,测试一下,请忽略"
},
"at": {
"atMobiles": [],
"isAtAll": False
}
}
url = 'webhook地址'
ding = DingTalk(url=url, data=data, secret='秘钥')
dins.send_info()
4、发送测试结果到钉钉
通过上述案例的方式,我们可以根据需求发送消息到钉钉群,大家根据钉钉开放平台上的消息类型去发送即可。关于把测试结果发送到钉钉群,那么unittestreport里面还做了更好的封装。具体我们先来看案例代码
-
案例代码:
```python
import unittest
from unittestreport import TestRunner
# 收集用例到套件
suite = unittest.defaultTestLoader.discover(CASE_DIR)
runner = TestRunner(suite)
# 执行用例
runner.run()
url = "https://oapi.dingtalk.com/robot/send?access_token=6e2a63c2b9d870ee878335b5ce6d5d10bb1218b8e64a4e2b55f96a6d116aaf50"
# 发送钉钉通知
runner.dingtalk_notice(url=url, key='钉钉安全设置的关键字',secret='钉钉安全设置签名的秘钥')
# 备注:关键字和秘钥,根据创建钉钉机器人时设置的去添加,没有设置就不需要传这个参数。
通过上面方式执行完测试用例,我们就可以再钉钉群收到测试执行的结果。
-
dingtalk_notice方法更多参数介绍
关于dingtalk_notice这个方法还有更多的配置参数,大家可以在使用的时候可以根据需求来选择。
关于使用unittestreport发送测试结果到钉钉群,就给大家到这里啦。
欢迎来到testingpai.com!
注册 关于