23 Star 244 Fork 60

伯庸/接口测试和ui自动化测试通用框架

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
dingding_request.py 3.74 KB
一键复制 编辑 原始数据 按行查看 历史
伯庸 提交于 2024-08-15 19:23 +08:00 . 项目大重构
# -*- coding: utf-8 -*-
# -------------------------------
# @文件:dingding_request.py
# @时间:2024/4/10 上午9:36
# @作者:caiweichao
# @功能描述:发送钉钉第三方机器人工具类
# -------------------------------
from util.basic.analysis_yaml import AnalysisYaml
from util.basic.http_request import HttpRequest
from util.auto_test.get_allure_data import CaseCount
import time
import hmac
import hashlib
import base64
import urllib.parse
from util.basic.log import Log
class DingdingRequest:
def __init__(self, robot_name):
# 获取对应的钉钉机器人配置
robot_info: dict = AnalysisYaml().get_dingding_robot_config(robot_name=robot_name)
self.test_team = robot_info.get('test_team')
try:
if robot_info.get("secret"):
timestamp = str(round(time.time() * 1000))
secret = str(robot_info.get("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))
self.res_url = robot_info.get('url') + f"&timestamp={timestamp}&sign={sign}"
else:
self.res_url = robot_info.get("url")
self.header = {"Content-Type": "application/json", "Charset": "UTF-8"}
except KeyError:
raise KeyError(f'机器人:{robot_name}的配置文件录入错误,请检查!')
except Exception:
raise Exception('未知异常请检查')
def send_msg(self, title: str, msg: str, is_at=None):
res_msg = {
"msgtype": "markdown",
"markdown": {
"title": title,
"text": msg
},
"at": {
"atMobiles": f"[{is_at}]"
}
}
res = HttpRequest(method="post", url=self.res_url, data=res_msg, headers=self.header)
Log.debug(f"钉钉机器人请求结果:{res}")
def send_test_report(self, report_url):
# 构建测试报告数据
detail = CaseCount()
total_case = detail.total_cases
pass_case = f'<font color=\"#009900\">{detail.pass_case}</font>'
fail_case = detail.fail_case if detail.fail_case == 0 else f"<font color=\"#FF0000\">{detail.fail_case}</font>"
broken_case = 0 if detail.broken_case == 0 else f"<font color=\"#8B4513\">{detail.broken_case}</font>"
skip_case = 0 if detail.skipped_case == 0 else f"<font color=\"#808080\">{detail.skipped_case}</font>"
# 处理测试报告详情
report_info = (f"#### {self.test_team}:用例执行明细\n"
f"| 描述 | 执行明细 \n| --- | --- \n"
f"| 执行用例总数 | {total_case} \n"
f"| 通过用例数 | {pass_case} \n"
f"| 失败用例数 | {fail_case} \n"
f"| 异常用例数 | {broken_case} \n"
f"| 跳过用例数 | {skip_case} \n"
f"| 测试报告链接 | [点击查看]({report_url})"
)
test_detail = {
"msgtype": "markdown",
"markdown": {
"title": "测试结果",
"text": report_info
}
}
# 执行用例为空时不会进行钉钉推送
if total_case != 0:
HttpRequest(method='post', url=self.res_url, data=test_detail, headers=self.header)
if __name__ == '__main__':
DingdingRequest(robot_name='DEMO_ROBOT_NAME').send_test_report(report_url="https://www.baidu.com")
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/by_cwc/GuardianAutoTestFramework.git
git@gitee.com:by_cwc/GuardianAutoTestFramework.git
by_cwc
GuardianAutoTestFramework
接口测试和ui自动化测试通用框架
master

搜索帮助