背景
有时候用例执行完,为了有个直观的结果,可以结合钉钉群自定义机器人发送我们的执行结果,这里需要使用到一个插件,pytest-json-report(可以报告摘要、测试细节、捕获的输出、日志、异常回溯等等)。
- 如果我们只是想拿到用例执行的结果,执行命令可添加如下参数: ```python —json-report —json-report-summary
示例
python -m pytest test.py -v -s -n auto —json-report —json-report-summary
默认生成.report.json文件,示例如下:<br />更多详情见:[https://pypi.org/project/pytest-json-report/](https://pypi.org/project/pytest-json-report/)```json{"created":1622290482.970531,"duration":12.282971143722534,"exitcode":0,"root":"/Users/zaygee/CodeMao/kitten_api_auto_test","environment":{"Python":"3.7.7","Platform":"Darwin-20.3.0-x86_64-i386-64bit","Packages":{"pytest":"6.1.2","py":"1.9.0","pluggy":"0.13.1"},"Plugins":{"json-report":"1.3.0","xdist":"2.2.1","metadata":"1.11.0","Faker":"5.0.2","allure-pytest":"2.8.22","forked":"1.3.0"}},"summary":{"collected": 10,"passed": 2,"failed": 3,"xfailed": 1,"xpassed": 1,"error": 2,"skipped": 1,"total": 10}}
�
自定义钉钉机器人通知实现代码示例如下:
这里我们选择的通知格式是markdown,根据详情见钉钉官方文档:钉钉群自定义机器人通知
# -*- coding: utf-8 -*-## file: dingtalk# Author: ShunZhe# Date: 2021/5/28"""钉钉通知"""import jsonimport osimport requestsfrom common import loggerheaders = {"Content-Type": "application/json; charset=UTF-8"}def get_results_data():"""读取json文件获取用例执行汇总数据"""with open('.report.json', 'r') as file:data = file.read()if data is not None and data != '':sum_data = json.loads(data)else:returnreturn sum_dataclass DingTalk:"""钉钉群测试报告通知"""def __init__(self):self.req = requests.sessionding_url = 'https://oapi.dingtalk.com/robot/send?access_token=4545454' # Webhook地址@classmethoddef data(cls, results_data):if results_data is not None and len(results_data) > 0:duration = round(results_data.get('duration'), 2)results_data = results_data.get('summary')else:returnding_data = {"msgtype": "markdown","markdown": {"title": "接口测试报告","text": "### **Kitten 接口测试报告** \n >"f"#### 执行环境: {os.environ.get('env').capitalize()} 环境 \n >"f"#### 成功用例: {results_data.get('passed', 0)} 条 \n >"f"#### 失败用例:{results_data.get('failed', 0)} 条\n > "f"#### 跳过用例:{results_data.get('skipped', 0)} 条\n > "f"#### 其他错误:{results_data.get('error', 0)} 条\n > "f"#### 执行总时间:{round(duration / 60, 2)} min\n > "" \n ""###### 更多详情见 [报告地址](https://jenkins.codemao.cn/job/auto_test/job/K4Api_Auto_Test/allure/) \n"},"at": {"atMobiles": [# 被@人的手机号],"atUserIds": [# 被@人的用户userid],"isAtAll": False # 是否@所有人}}return ding_datadef post_req(self, post_data):res = self.req().post(self.ding_url, data=json.dumps(post_data), headers=headers)logger.info("钉钉通知调用结果:" + str(res.text))
常见问题:
// 消息内容中不包含任何关键词{"errcode":310000,"errmsg":"keywords not in content"}// 解决办法:钉钉群机器人添加相应的关键词
结果如图所示:
