调整发送钉钉/企业微信/邮件里面关于测试人员信息,参数替换没有成功的问题
This commit is contained in:
@@ -3,10 +3,9 @@
|
||||
# @Author : chenyinhua
|
||||
# @File : send_result_handle.py
|
||||
# @Software: PyCharm
|
||||
# @Desc: 根据配置文件,发送指定类型的测试结果
|
||||
# @Desc: 根据配置文件,发送指定通知
|
||||
|
||||
# 标准库导入
|
||||
# 第三方库导入
|
||||
# 第三方模块
|
||||
from loguru import logger
|
||||
# 本地应用/模块导入
|
||||
from config.models import NotificationType
|
||||
@@ -72,18 +71,21 @@ def send_wechat(webhook_url, content, attachment=None):
|
||||
logger.error(f"发送企业微信通知异常, 错误信息:{e}")
|
||||
|
||||
|
||||
def send_result(report_path, attachment_path=None):
|
||||
def send_result(report_info: dict, report_path: str, attachment_path: str = None):
|
||||
"""
|
||||
根据用户配置,采取指定方式,发送测试结果
|
||||
:param report_info: 报告相关信息,包括tester, department, env
|
||||
:param report_path: 报告路径
|
||||
:param attachment_path: 发送的附件, pytest-html就是报告本身作为附件发送, allure是压缩包发送
|
||||
"""
|
||||
# 默认不发送任何通知
|
||||
if SEND_RESULT_TYPE == NotificationType.DEFAULT.value:
|
||||
logger.debug(f"SEND_RESULT_TYPE={SEND_RESULT_TYPE}, 配置了不发送任何邮件")
|
||||
logger.info(f"SEND_RESULT_TYPE={SEND_RESULT_TYPE}, 配置了不发送任何邮件")
|
||||
return
|
||||
|
||||
results = get_test_results_from_from_allure_report(report_path)
|
||||
for k, v in report_info.items():
|
||||
results[k] = v
|
||||
|
||||
# 建立发送消息的内容、函数以及参数的映射关系
|
||||
notification_mappings = {
|
||||
@@ -121,7 +123,7 @@ def send_result(report_path, attachment_path=None):
|
||||
if SEND_RESULT_TYPE in notification_mappings:
|
||||
notification = notification_mappings[SEND_RESULT_TYPE]
|
||||
# 获取消息内容并替换
|
||||
notification['sender_args']['content'] = data_handle(notification['sender_args']['content'],
|
||||
notification['sender_args']['content'] = data_handle(obj=notification['sender_args']['content'],
|
||||
source=results)
|
||||
# 获取消息发送函数
|
||||
sender = notification['sender']
|
||||
@@ -134,7 +136,7 @@ def send_result(report_path, attachment_path=None):
|
||||
# 遍历所有消息发送方式
|
||||
for notification in notification_mappings.values():
|
||||
# 获取消息内容并替换
|
||||
notification['sender_args']['content'] = data_handle(notification['sender_args']['content'],
|
||||
notification['sender_args']['content'] = data_handle(obj=notification['sender_args']['content'],
|
||||
source=results)
|
||||
# 获取消息发送函数
|
||||
sender = notification['sender']
|
||||
|
||||
@@ -514,12 +514,30 @@ if __name__ == '__main__':
|
||||
print("-----------测试场景17---------------------")
|
||||
data_17 = {
|
||||
"winner_id": "${winner_id}",
|
||||
"user_id": "${user_id}"
|
||||
"user_id": "${user_id}",
|
||||
"assignee_id": "${assignee_id}"
|
||||
}
|
||||
source = {
|
||||
"winner_id": "1,2,4",
|
||||
"user_id": []
|
||||
"assignee_id": [],
|
||||
"user_id": 1076
|
||||
}
|
||||
|
||||
res = data_handle(obj=data_17, source=source)
|
||||
print(res)
|
||||
|
||||
print("-----------测试场景18---------------------")
|
||||
payload = {'id': 'case_login_01', 'title': '用户名密码正确,登录成功(不校验数据库)', 'severity': 'NORMAL',
|
||||
'url': ' https://testforgeplus.trustie.net/api/accounts/login.json', 'run': True, 'method': 'POST',
|
||||
'headers': {'Content-Type': 'application/json; charset=utf-8;'}, 'cookies': None, 'request_type': 'JSON',
|
||||
'payload': {'login': 'autotest', 'password': '********', 'autologin': 1}, 'files': None,
|
||||
'extract': {'nickname': '$.username', 'login': '$.login', 'user_id': '$.user_id'},
|
||||
'assert_response': {'eq': {'http_code': 200, '$.user_id': "${user_id}"}}, 'assert_sql': None}
|
||||
|
||||
source = {
|
||||
"winner_id": "1,2,4",
|
||||
"assignee_id": [],
|
||||
"user_id": 1076
|
||||
}
|
||||
res = data_handle(obj=payload, source=source)
|
||||
print(res)
|
||||
|
||||
@@ -7,7 +7,6 @@ import pytest
|
||||
import allure
|
||||
from loguru import logger
|
||||
# 本地应用/模块导入
|
||||
from config.settings import db_info
|
||||
from config.global_vars import GLOBAL_VARS
|
||||
from case_utils.assert_utils.assert_handle import assert_response, assert_sql
|
||||
from case_utils.requests_utils.request_data_handle import RequestPreDataHandle, RequestHandle, after_request_extract
|
||||
@@ -37,7 +36,7 @@ class ${class_title}Auto:
|
||||
# 进行响应断言
|
||||
assert_response(response, case_data["assert_response"])
|
||||
# 进行数据库断言
|
||||
assert_sql(db_info[GLOBAL_VARS["env_key"]], case_data["assert_sql"])
|
||||
assert_sql(db_info=GLOBAL_VARS["db_info"], expected=case_data["assert_sql"])
|
||||
# 断言成功后进行参数提取
|
||||
after_request_extract(response, case_data.get("extract", None))
|
||||
logger.info("\n-----------------------------END-用例执行结束-----------------------------\n")
|
||||
|
||||
+57
-50
@@ -9,36 +9,63 @@
|
||||
# ------------------------------------ 测试数据配置 ----------------------------------------------------#
|
||||
ENV_VARS = {
|
||||
"common": {
|
||||
"报告标题": "API自动化测试报告",
|
||||
"报告标题": "UI自动化测试报告",
|
||||
"项目名称": "GitLink 确实开源",
|
||||
"测试人": "陈银花",
|
||||
"所属部门": "开源中心"
|
||||
"tester": "陈银花",
|
||||
"department": "开源中心",
|
||||
"env": ""
|
||||
},
|
||||
"test": {
|
||||
# 示例测试环境及示例测试账号
|
||||
"host": "https://testforgeplus.trustie.net",
|
||||
"login": "autotest",
|
||||
"password": "***autotest***", # 运行时需要手动更改密码
|
||||
"password": "****autotest-test****", # 运行时需要手动更改密码
|
||||
"nickname": "autotest",
|
||||
"user_id": "106",
|
||||
"user_id": 106,
|
||||
"super_login": "floraachy",
|
||||
"super_password": "***floraachy***",
|
||||
"project_id": "59",
|
||||
"repo_id": "59",
|
||||
"project_url": "/autotest/auotest"
|
||||
"super_password": "****floraachy-test****",
|
||||
"project_id": 59,
|
||||
"repo_id": 59,
|
||||
"project_url": "/autotest/auotest",
|
||||
"db_info": {
|
||||
"db_host": "xx.xx.xx.xx",
|
||||
"db_port": 3306,
|
||||
"db_user": "root",
|
||||
"db_pwd": "**********",
|
||||
"db_database": "test**********",
|
||||
"ssh": True,
|
||||
"ssh_host": "xx.xx.xx.xx",
|
||||
"ssh_port": 3306,
|
||||
"ssh_user": "root",
|
||||
"ssh_pwd": "**********"
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
"live": {
|
||||
"host": "https://www.gitlink.org.cn",
|
||||
"login": "autotest",
|
||||
"password": "***autotest***", # 运行时需要手动更改密码
|
||||
"nickname": "autotest",
|
||||
"user_id": "106",
|
||||
"super_login": "floraachy",
|
||||
"super_password": "***floraachy***",
|
||||
"project_id": "",
|
||||
"repo_id": "",
|
||||
"project_url": ""
|
||||
"login": "floraachy",
|
||||
"password": "****floraachy-live****",
|
||||
"nickname": "🌼陈银花",
|
||||
"user_id": 87611,
|
||||
"super_login": "chenyh",
|
||||
"super_password": "****chenyh-live****",
|
||||
"project_id": 1445676,
|
||||
"repo_id": 1447291,
|
||||
"project_url": "/floraachy/auotest",
|
||||
"db_info": {
|
||||
"db_host": "xx.xx.xx.xx",
|
||||
"db_port": 3306,
|
||||
"db_user": "root",
|
||||
"db_pwd": "**********",
|
||||
"db_database": "test**********",
|
||||
"ssh": True,
|
||||
"ssh_host": "xx.xx.xx.xx",
|
||||
"ssh_port": 3306,
|
||||
"ssh_user": "root",
|
||||
"ssh_pwd": "**********"
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,10 +87,10 @@ class RunConfig:
|
||||
|
||||
# ------------------------------------ 配置信息 ----------------------------------------------------#
|
||||
# 0代表执行Excel和yaml两种格式的用例, 1 代表 yaml文件,2 用例代表Excel用例, 其他数值将不自动生成用例,仅能执行手动编写的用例
|
||||
CASE_FILE_TYPE = 0
|
||||
CASE_FILE_TYPE = 1
|
||||
|
||||
# 0表示默认不发送任何通知, 1代表钉钉通知,2代表企业微信通知, 3代表邮件通知, 4代表所有途径都发送通知
|
||||
SEND_RESULT_TYPE = 0
|
||||
SEND_RESULT_TYPE = 1
|
||||
|
||||
# 指定日志收集级别
|
||||
LOG_LEVEL = "DEBUG"
|
||||
@@ -77,39 +104,19 @@ LOG_LEVEL = "DEBUG"
|
||||
ERROR: 表示错误和异常情况,但程序仍然可以继续运行。
|
||||
CRITICAL: 表示严重的错误和异常情况,可能导致程序崩溃或无法正常运行。
|
||||
"""
|
||||
# ------------------------------------ 数据库相关配置 ----------------------------------------------------#
|
||||
db_info = {
|
||||
"test": {
|
||||
"db_host": "xx.xx.xx.xx",
|
||||
"db_port": 3306,
|
||||
"db_user": "root",
|
||||
"db_pwd": "**********",
|
||||
"db_database": "test**********",
|
||||
"ssh": True,
|
||||
"ssh_host": "xx.xx.xx.xx",
|
||||
"ssh_port": 3306,
|
||||
"ssh_user": "root",
|
||||
"ssh_pwd": "**********"
|
||||
|
||||
},
|
||||
"live": {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
# ------------------------------------ 邮件配置信息 ----------------------------------------------------#
|
||||
|
||||
# 发送邮件的相关配置信息
|
||||
email = {
|
||||
"user": "******", # 发件人邮箱
|
||||
"password": "******", # 发件人邮箱授权码
|
||||
"user": "****email-user****", # 发件人邮箱
|
||||
"password": "****email-password****", # 发件人邮箱授权码
|
||||
"host": "smtp.qq.com",
|
||||
"to": ["******", "******"] # 收件人邮箱
|
||||
"to": ["****email-user-1****", "****email-user-2****"] # 收件人邮箱
|
||||
}
|
||||
|
||||
# ------------------------------------ 邮件通知内容 ----------------------------------------------------#
|
||||
email_subject = f"接口自动化报告"
|
||||
email_subject = f"UI自动化报告"
|
||||
email_content = """
|
||||
各位同事, 大家好:
|
||||
|
||||
@@ -117,7 +124,7 @@ email_content = """
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
测试人:<strong> ${tester} </strong>
|
||||
所属部门:<strong> ${department} </strong>
|
||||
项目环境:<strong> ${run_env} </strong>
|
||||
项目环境:<strong> ${env} </strong>
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
执行结果如下:
|
||||
用例运行总数:<strong> ${total} 个</strong>
|
||||
@@ -133,12 +140,12 @@ email_content = """
|
||||
"""
|
||||
# ------------------------------------ 钉钉相关配置 ----------------------------------------------------#
|
||||
ding_talk = {
|
||||
"webhook_url": "https://oapi.dingtalk.com/robot/send?access_token=***********",
|
||||
"secret": "***********"
|
||||
"webhook_url": "https://oapi.dingtalk.com/robot/send?access_token=********",
|
||||
"secret": "****ding****"
|
||||
}
|
||||
|
||||
# ------------------------------------ 钉钉通知内容 ----------------------------------------------------#
|
||||
ding_talk_title = f"接口自动化报告"
|
||||
ding_talk_title = f"UI自动化报告"
|
||||
ding_talk_content = """
|
||||
各位同事, 大家好:
|
||||
|
||||
@@ -146,7 +153,7 @@ ding_talk_content = """
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
#### 测试人: ${tester}
|
||||
#### 所属部门: ${department}
|
||||
#### 项目环境: ${run_env}
|
||||
#### 项目环境: ${env}
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
#### 执行结果如下:
|
||||
- 用例运行总数: ${total} 个
|
||||
@@ -172,7 +179,7 @@ wechat_content = """
|
||||
--------------------------------
|
||||
#### 测试人: ${tester}
|
||||
#### 所属部门: ${department}
|
||||
#### 项目环境: ${run_env}
|
||||
#### 项目环境: ${env}
|
||||
--------------------------------
|
||||
#### 执行结果如下:
|
||||
- 用例运行总数: ${total} 个
|
||||
|
||||
@@ -70,13 +70,10 @@ def run(env, m, report):
|
||||
""")
|
||||
|
||||
# ------------------------ 处理一下获取到的参数----------------------------
|
||||
print(f"打印一下run方法的入参:\nreport={report}\nenv={env}\nm={m}")
|
||||
|
||||
# 根据指定的环境参数,将运行环境所需相关配置数据保存到GLOBAL_VARS
|
||||
GLOBAL_VARS["env_key"] = env.lower()
|
||||
if ENV_VARS.get(env.lower()):
|
||||
GLOBAL_VARS.update(ENV_VARS[env.lower()])
|
||||
|
||||
ENV_VARS["common"]["env"] = ENV_VARS[env]["host"]
|
||||
GLOBAL_VARS.update(ENV_VARS["common"])
|
||||
GLOBAL_VARS.update(ENV_VARS[env])
|
||||
# ------------------------ 自动生成测试用例 ------------------------
|
||||
# 删除原有的测试用例,以便生成新的测试用例
|
||||
if os.path.exists(AUTO_CASE_DIR):
|
||||
@@ -109,7 +106,7 @@ def run(env, m, report):
|
||||
f'autotest_report.zip'))
|
||||
# ------------------------ 发送测试结果 ------------------------
|
||||
|
||||
send_result(report_path=report_path, attachment_path=attachment_path)
|
||||
send_result(report_info=ENV_VARS["common"], report_path=report_path, attachment_path=attachment_path)
|
||||
|
||||
except Exception as e:
|
||||
raise e
|
||||
|
||||
Reference in New Issue
Block a user