一、前言
一般做接口自动化发送报告都是用测试框架自带或者allure测试报告,这种报告内容较为详细,但是执行用例次数多时,每次都要打开报告阅读,既费时又费力。其实我们只看成功数、失败数,通过率等主要信息,那我们怎么做才能每次构建后快速看到执行结果信息呢?那就是我们工作经常用到的钉钉了,系好安全带,咋们开车啦。
二、钉钉群自定义机器人配置及发送消息代码
- 钉钉群自定义机器人配置如下:
- 钉钉消息发送支持html、文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型,下方只列出actionCard发送消息代码,其他格式只是请求参数略有变化,详情请到 钉钉官网查看,代码如下:
# coding=utf-8
# @Author : 梗小旭
# @Time : 2022-10-31
# @File : send_dingding_msg.py
import requests
from conf.setting import setting
def send_dingding_msg(content: str):
"""
支持以html、markdown语法的格式发送消息给钉钉群
:param content: 消息内容
:return:
"""
url = f"https://oapi.dingtalk.com/robot/send?access_token={setting.DING_ACCESS_TOKEN}" # 配置文件中的access_token,对应钉钉群配置的Webhook信息
headers = {'Content-Type': 'application/json'}
data = {
"msgtype": "actionCard",
"actionCard": {
"title": "接口自动化测试报告",
# 要发送的内容【支持markdown】【!注意:content内容要包含机器人自定义关键字,不然消息不会发送出去,这个案例中是“接口自动化”字段】
"text": content,
"btnOrientation": "1",
"btns": [
{"title": "查看详情",
"actionURL": "https://www.dingtalk.com/"} # 测试报告地址,可以更改为allure报告地址
]
},
"at": {
# 要@的人
# "atMobiles": mobile_list,
# 是否@所有人
"isAtAll": True
}
}
res = requests.post(url=url, headers=headers, json=data)
return res
三、pytest_terminal_summary钩子函数
-
当使用pytest框架执行完用例后,想要拿到用例的执行结果时,使用pytest_terminal_summary钩子函数可以拿到执行结果数据,源代码如下:
参数解释
terminalreporter:内部终端报告器对象
exitstatus:返回给操作系统的返回码
config:pytest的config对象 -
在conftest.py文件中添加pytest_terminal_summary,代码如下:
# coding=utf-8
# @Author : 梗小旭
# @Time : 2022-10-31
# @File : conftest.py
import time
from common.send_dingding_msg import send_dingding_msg
def pytest_terminal_summary(terminalreporter, exitstatus, config):
total = terminalreporter._numcollected
passed = len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])
failed = len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])
error = len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])
skipped = len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])
success_rate = round(passed / total,4) * 100
duration = time.time() - terminalreporter._sessionstarttime
content = f"""
### ✨接口自动化报告✨
- <font color="#444444">用例总数:{total}</font>
- <font color="#66FF66">成功数:{passed}</font>
- <font color="#FF5511">失败数:{failed}</font>
- <font color="#FF0000">错误数:{error}</font>
- <font color="#FFFF33">跳过数:{skipped}</font>
- <font color="#444444">成功率:▓▓▓▓▓▓▓▓▓▓▓ {success_rate} %</font>
- <font color="#444444">执行时间:{round(duration,2)} s</font>
"""
send_dingding_msg(content)
四、运行用例及结果展示
- 新建test_demo文件,代码如下:
# coding=utf-8
# @Author : 梗小旭
# @Time : 2022-10-31
# @File : test_demo.py
import pytest
def test_01():
assert 1 == 1
def test_02():
assert 1 == 2
@pytest.mark.skip("跳过")
def test_03():
assert 2 == 2
if __name__ == '__main__':
pytest.main(["-s","-q","test_demo.py"])
- 执行用例完成后,钉钉消息报告如下:
- 一份简单的消息报告就好了,大家可以根据自己情况更改报告样式,如果文件对你有用,赶快学起来吧