# -*- coding: utf-8 -*- """ @File : message_template.py @Time : 2023/11/21 17:29 @Author : geekbing @LastEditTime : - @LastEditors : - @Description : 消息模板 """ from typing import Dict from django.conf import settings import time def parse_message(summary: Dict, **kwargs): """ 解析消息模板 :param summary: 测试报告摘要 :param kwargs: 其他参数 :return: """ task_name = summary["task_name"] rows_count = summary["stat"]["testsRun"] pass_count = summary["stat"]["successes"] fail_count = summary["stat"]["failures"] error_count = summary["stat"]["errors"] duration = "%.2fs" % summary["time"]["duration"] report_id = summary["report_id"] base_url = settings.IM_REPORT_SETTING.get("base_url") port = settings.IM_REPORT_SETTING.get("port") report_url = f"{base_url}:{port}/api/lunarlink/reports/{report_id}" executed = rows_count fail_rate = "{:.2%}".format(fail_count / executed) case_count = kwargs.get("case_count") return { "task_name": task_name, "duration": duration, "case_count": case_count, "pass_count": pass_count, "error_count": error_count, "fail_count": fail_count, "fail_rate": fail_rate, "report_url": report_url, } def email_msg_template( task_name, duration, case_count, pass_count, error_count, fail_count, fail_rate, report_url, ): """ 定制邮件报告消息模板(高级优化版) :param task_name: 任务名称 :param duration: 总耗时 :param case_count: 用例个数 :param pass_count: 成功接口个数 :param error_count: 异常接口个数 :param fail_count: 失败接口个数 :param fail_rate: 失败比例 :param report_url: 报告链接 :return: 邮件主题及 HTML 内容 """ email_subject = f"【自动化测试报告】{task_name}" email_content = f""" 自动化测试报告

自动化测试报告

{task_name}

总耗时 {duration}
用例个数 {case_count}
失败比例 {fail_rate}
成功接口 {pass_count}
异常接口 {error_count}
失败接口 {fail_count}
点击查看详细报告
""" return { "subject": email_subject, "html_message": email_content, } def qy_msg_template( task_name, duration, case_count, pass_count, error_count, fail_count, fail_rate, report_url, msg_type: str = "markdown", ): """ 定制企业微信消息模板 :param task_name: :param duration: :param case_count: :param pass_count: :param error_count: :param fail_count: :param fail_rate: :param report_url: :param msg_type: :return: """ if msg_type == "markdown": msg_template = {"msgtype": "markdown", "markdown": {"content": ""}} content = f"""**接口自动化测试报告** \n >任务名称: {task_name} >总共耗时: {duration} >用例个数: {case_count} >成功接口: **{pass_count}** >异常接口: **{error_count}** >失败接口: **{fail_count}** >失败比例: **{fail_rate}** >测试报告: [点击查看]({report_url})""" msg_template["markdown"]["content"] = content return msg_template text = f" 任务名称: {task_name}\n 总共耗时: {duration}\n 成功接口: {pass_count}个\n 异常接口: {error_count}个\n 失败接口: {fail_count}个\n 失败比例: {fail_rate}\n 查看详情: {report_url}" return text def dd_msg_template( task_name, duration, case_count, pass_count, error_count, fail_count, fail_rate, report_url, msg_type: str = "markdown", creator=None, updater=None, ): """ 定制钉钉消息模板:包含自动评价、图标提示、markdown美观布局 :param task_name: 任务名称 :param duration: 总耗时 :param case_count: 用例个数 :param pass_count: 成功接口个数 :param error_count: 异常接口个数 :param fail_count: 失败接口个数 :param fail_rate: 失败比例(字符串或百分比) :param report_url: 报告链接 :param msg_type: 消息类型,默认 markdown :return: 钉钉消息内容(字典格式) """ # 安全转换失败比例 try: fr = float(str(fail_rate).strip().replace("%", "").replace("%", "")) except Exception: fr = 0.0 # 状态图标 status_icon = "✅" if fail_count == 0 and error_count == 0 else ("⚠️" if fail_count == 0 else "❌") # 自动评价等级 if error_count == 0 and fail_count == 0: evaluation = "测试结果优秀" evaluation_icon = "🟢" elif fr <= 5: evaluation = "测试结果良好" evaluation_icon = "🟡" elif fr <= 10: evaluation = "测试结果一般" evaluation_icon = "🟠" else: evaluation = "测试结果严重异常" evaluation_icon = "🔴" if msg_type == "markdown": content = ( f"## {status_icon} **接口自动化测试完成通知**\n\n" f"### 📌 任务名称:**{task_name}**\n" f"### 📈 自动评价:{evaluation_icon} `{evaluation}`\n\n" f"> ⏱️ **总耗时:** {duration} \n" f"> 📊 **执行用例数:** {case_count} \n" f"> ✅ **成功接口数:** {pass_count} \n" f"> ⚠️ **异常接口数:** {error_count} \n" f"> ❌ **失败接口数:** {fail_count} \n" f"> 📉 **失败比例:** {fail_rate} \n\n" f"> 👤 **创建人:** {creator if creator else '未记录'} \n" # 新增创建人显示 f"> ✏️ **更新人:** {updater if updater else '未记录'} \n\n" # 新增更新人显示 f"🔗 [👉 点击查看详细报告]({report_url})\n\n" f"📬 详细内容也可通过邮件查看。\n\n" "---\n" "如有异常,请及时处理!🎉" ) return {"msgtype": "markdown", "markdown": {"content": content}} else: # 普通 text 消息 fallback content = ( f"{status_icon} 接口自动化测试完成通知\n" f"任务名称:{task_name}\n" f"自动评价:{evaluation_icon} {evaluation}\n" f"总耗时:{duration}\n" f"执行用例数:{case_count}\n" f"成功接口数:{pass_count}\n" f"异常接口数:{error_count}\n" f"失败接口数:{fail_count}\n" f"失败比例:{fail_rate}\n" f"创建人:{creator}\n" f"更新人:{updater}\n" f"报告地址:{report_url}\n" f"详细内容请查看邮件,如有异常,请及时处理!。" ) return {"msgtype": "text", "text": {"content": content}}