一.钉钉收到的消息样式如下:
二.操作步骤:
(一)设置钉钉:
1.选择要推送消息的钉钉群,打开群设置,选择‘机器人’
2.选择添加机器人
3.选择自定义-添加
4.添加完成后,会生成一个Webhook地址和一个加签;通过调用Webhook接口即可想钉钉发送消息
(二)添加代码:
1:添加测试结果统计功能:在测试运行结束后统计测试结果(通过、失败、跳过的用例数)
class TestResultCollector(unittest.TestResult):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.passed = 0 # 统计通过的用例数
self.failed = 0 # 统计失败的用例数
self.skipped = 0 # 统计跳过的用例数
def addSuccess(self, test):
super().addSuccess(test)
self.passed += 1 # 每当用例通过时,增加通过计数
def addFailure(self, test, err):
super().addFailure(test, err)
self.failed += 1 # 每当用例失败时,增加失败计数
def addSkip(self, test, reason):
super().addSkip(test, reason)
self.skipped += 1 # 每当用例跳过时,增加跳过计数
2.在 run_tests_and_generate_report
函数中收集测试结果
def run_tests_and_generate_report():
logger.info('Start testing...')
# 创建一个测试套件
suite = unittest.TestSuite()
suite.addTests(unittest.TestLoader().loadTestsFromName('testcase.cg_2_供应商.test_suite_gys'))
# 创建自定义的 TestResult 对象
result_collector = TestResultCollector()
# 使用 BeautifulReport 生成测试报告
report_base = '自动化测试结果报告_{}'.format(datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
report_file = 'report/{}.html'.format(report_base)
# 运行测试用例并生成报告
result = BeautifulReport(suite)
result.report(filename=report_base, description='自动化测试用例', log_path='report')
# 收集测试结果
result_collector.passed = result.success_count
result_collector.failed = result.failure_count
result_collector.skipped = result.skipped # 直接使用 result.skipped 获取跳过用例的数量
logger.info('Testing finished. Report file: {}'.format(report_file))
# 返回测试结果
return {
"total": result_collector.passed + result_collector.failed + result_collector.skipped,
"passed": result_collector.passed,
"failed": result_collector.failed,
"skipped": result_collector.skipped
}
3.添加钉钉消息推送的工具函数:
创建 send_dingtalk_message
和 create_dingtalk_message
函数。
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
def send_dingtalk_message(webhook, secret, message):
"""
发送钉钉消息
:param webhook: 钉钉机器人的 Webhook URL
:param secret: 钉钉机器人的加签密钥
:param message: 要发送的消息内容
"""
# 生成加签
timestamp = str(round(time.time() * 1000))
secret_enc = secret.encode('utf-8')
string_to_sign = f"{timestamp}\n{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))
# 构造请求URL
url = f"{webhook}×tamp={timestamp}&sign={sign}"
# 发送请求
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=message, headers=headers)
if response.status_code == 200:
print("消息发送成功!")
else:
print(f"消息发送失败,状态码:{response.status_code}")
def create_dingtalk_message(total, passed, failed, skipped):
"""
创建钉钉消息内容
:param total: 总用例数
:param passed: 通过用例数
:param failed: 失败用例数
:param skipped: 跳过用例数
:return: 钉钉消息内容
"""
message = {
"msgtype": "markdown",
"markdown": {
"title": "自动化测试结果通知:",
"text": f"### 自动化测试结果通知:\n\n"
f"- **总用例数**: {total}\n"
f"- **通过用例数**: {passed}\n"
f"- **失败用例数**: {failed}\n"
f"- **跳过用例数**: {skipped}\n"
}
}
return message
4.在主程序中调用钉钉推送功能
在 __main__
中调用 run_tests_and_generate_report
获取测试结果,并推送消息到钉钉
if __name__ == '__main__':
# 运行测试并获取结果
test_results = run_tests_and_generate_report()
# 钉钉 Webhook 和加签
webhook = "替换成你的webhook地址"
secret = "替换成你的加签"
# 创建消息并发送
message = create_dingtalk_message(
total=test_results["total"],
passed=test_results["passed"],
failed=test_results["failed"],
skipped=test_results["skipped"]
)
send_dingtalk_message(webhook, secret, message)
5.运行代码,确保测试用例正常执行;检查钉钉群,确认是否收到测试结果通知;如果消息发送失败,检查钉钉机器人的 Webhook 和加签配置是否正确。