自动化测试结果推送钉钉群消息

一.钉钉收到的消息样式如下:

二.操作步骤:

    (一)设置钉钉:

        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}&timestamp={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 和加签配置是否正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值