(2023-05-13) 1. 封装Python脚本:使用pymysql+sshtunnel,支持通过SSH隧道方式链接mysql数据库 2. 调整用例参数,支持数据库断言。可以通过assert_sql用例参数进行数据库断言
This commit is contained in:
+35
-25
@@ -1,8 +1,8 @@
|
||||
import pytest
|
||||
from case_utils.assert_handle import assert_result
|
||||
from case_utils.requests_handle import BaseRequest
|
||||
from case_utils.assert_handle import assert_response, assert_sql
|
||||
from common_utils.base_request import BaseRequest
|
||||
from loguru import logger
|
||||
from case_utils.request_data_handle import RequestPreDataHandle
|
||||
from case_utils.request_data_handle import RequestPreDataHandle, after_extract, case_data_replace,eval_data_process
|
||||
from pytest_html import extras # 往pytest-html报告中填写额外的内容
|
||||
from common_utils.func_handle import add_docstring
|
||||
|
||||
@@ -16,28 +16,38 @@ def case(request):
|
||||
|
||||
@pytest.mark.${func_title}
|
||||
@pytest.mark.auto
|
||||
def ${func_title}_auto(case, extra):
|
||||
"""
|
||||
|
||||
"""
|
||||
def ${func_title}_auto(case, extra, request):
|
||||
logger.info("-----------------------------START-开始执行用例-----------------------------")
|
||||
logger.debug(f"当前执行的用例数据:{case}")
|
||||
# 给当前测试方法添加文档注释
|
||||
add_docstring(case.get("title", ""))(${func_title}_auto)
|
||||
if case.get("run", None):
|
||||
# 获取处理完成的用例数据
|
||||
case_data = RequestPreDataHandle(case).request_data_handle()
|
||||
# 将用例数据显示在pytest-html报告中
|
||||
extra.append(extras.text(str(case_data), name="用例数据"))
|
||||
# 发送请求
|
||||
response = BaseRequest.send_request(case_data)
|
||||
# 将响应数据显示在pytest-html报告中
|
||||
extra.append(extras.text(str(response.text), name="响应数据"))
|
||||
# 进行断言
|
||||
assert_result(response, case_data["expected"])
|
||||
else:
|
||||
reason = f"标记了该用例为false,不执行\\n"
|
||||
logger.warning(f"{reason}")
|
||||
pytest.skip(reason)
|
||||
logger.info("------------------------------------------用例执行结束------------------------------------------")
|
||||
try:
|
||||
# 获取命令行参数,判断当前处于哪个环境
|
||||
env = request.config.getoption("--env")
|
||||
# 给当前测试方法添加文档注释
|
||||
add_docstring(case.get("title", ""))(${func_title}_auto)
|
||||
if case.get("run", None):
|
||||
# 处理请求前的用例数据
|
||||
case_data = RequestPreDataHandle(case).request_data_handle()
|
||||
# 将用例数据显示在pytest-html报告中
|
||||
extra.append(extras.text(str(case_data), name="用例数据"))
|
||||
# 发送请求
|
||||
response = BaseRequest.send_request(case_data)
|
||||
# 将响应数据显示在pytest-html报告中
|
||||
extra.append(extras.text(str(response.text), name="响应数据"))
|
||||
# 请求后,提取后置参数作为全局变量
|
||||
after_extract(response, case_data["extract"])
|
||||
# 从全局变量中获取最新值,替换数据库断言中的参数
|
||||
case_data["assert_sql"] = eval_data_process(case_data_replace(case_data["assert_sql"]))
|
||||
# 进行响应断言
|
||||
assert_response(response, case_data["assert_response"])
|
||||
# 进行数据库断言
|
||||
assert_sql(env, case_data["assert_sql"])
|
||||
else:
|
||||
reason = f"标记了该用例为false,不执行\\n"
|
||||
logger.warning(f"{reason}")
|
||||
pytest.skip(reason)
|
||||
except Exception as e:
|
||||
logger.error(f"用例执行过程中报错:{e}")
|
||||
raise e
|
||||
finally:
|
||||
logger.info("-----------------------------END-用例执行结束-----------------------------")
|
||||
|
||||
|
||||
@@ -68,4 +68,26 @@ ding_talk = {
|
||||
# ------------------------------------ 企业微信相关配置 ----------------------------------------------------#
|
||||
wechat = {
|
||||
"webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=********",
|
||||
}
|
||||
|
||||
# ------------------------------------ 数据库相关配置 ----------------------------------------------------#
|
||||
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": {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user