1. 增加测试数据分析预警机制 2. 优化自动生成测试用例方法 3. 将用例跳过方法 提取成公共的fixture,自动运行 4. 修改pytet-html测试报告列’用例描述’值获取 5. 根 据最新修改,更新readme文件~
This commit is contained in:
+17
-19
@@ -1,31 +1,33 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Time : ${now}
|
||||
|
||||
import pytest
|
||||
from case_utils.assert_handle import assert_response, assert_sql
|
||||
from loguru import logger
|
||||
from case_utils.request_data_handle import RequestPreDataHandle, RequestHandle, after_request_extract
|
||||
from pytest_html import extras # 往pytest-html报告中填写额外的内容
|
||||
from common_utils.func_handle import add_docstring
|
||||
from case_utils.allure_handle import allure_title
|
||||
import allure
|
||||
from config.settings import db_info
|
||||
from config.global_vars import GLOBAL_VARS
|
||||
|
||||
|
||||
# 用例数据
|
||||
cases = ${case_data}
|
||||
|
||||
|
||||
@allure.story(f'{cases["case_common"]["allure_story"]}')
|
||||
@pytest.mark.${func_title}
|
||||
@pytest.mark.auto
|
||||
@pytest.mark.parametrize("case", cases.get("case_info"))
|
||||
def ${func_title}_auto(case, extra):
|
||||
logger.info("-----------------------------START-开始执行用例-----------------------------")
|
||||
logger.debug(f"当前执行的用例数据:{case}")
|
||||
# 给当前测试方法添加文档注释
|
||||
add_docstring(case.get("title", ""))(${func_title}_auto)
|
||||
# 添加用例标题作为allure中显示的用例标题
|
||||
allure_title(case.get("title", ""))
|
||||
if case.get("run", None):
|
||||
@allure.epic("${allure_epic}")
|
||||
@allure.feature("${allure_feature}")
|
||||
class ${class_title}Auto:
|
||||
|
||||
@allure.story("${allure_story}")
|
||||
@pytest.mark.${func_title}
|
||||
@pytest.mark.auto
|
||||
@pytest.mark.parametrize("case", cases, ids=["{}".format(case["title"]) for case in cases])
|
||||
def ${func_title}_auto(self, case, extra):
|
||||
logger.info("-----------------------------START-开始执行用例-----------------------------")
|
||||
logger.debug(f"当前执行的用例数据:{case}")
|
||||
# 添加用例标题作为allure中显示的用例标题
|
||||
allure_title(case.get("title", ""))
|
||||
# 处理请求前的用例数据
|
||||
case_data = RequestPreDataHandle(case).request_data_handle()
|
||||
# 将用例数据显示在pytest-html报告中
|
||||
@@ -40,9 +42,5 @@ def ${func_title}_auto(case, extra):
|
||||
assert_sql(db_info[GLOBAL_VARS["env_key"]], case_data["assert_sql"])
|
||||
# 断言成功后进行参数提取
|
||||
after_request_extract(response, case_data.get("extract", None))
|
||||
else:
|
||||
reason = f"标记了该用例为false,不执行\\n"
|
||||
logger.warning(f"{reason}")
|
||||
pytest.skip(reason)
|
||||
logger.info("-----------------------------END-用例执行结束-----------------------------")
|
||||
logger.info("-----------------------------END-用例执行结束-----------------------------")
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
# @Desc: 全局变量
|
||||
|
||||
from enum import Enum, unique # python 3.x版本才能使用
|
||||
from typing import Text, Dict, Callable, Union, Optional, List, Any
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class CaseFileType(Enum):
|
||||
@@ -55,3 +57,57 @@ class AllureAttachmentType(Enum):
|
||||
WEBM = "webm"
|
||||
|
||||
PDF = "pdf"
|
||||
|
||||
|
||||
class TestCaseEnum(Enum):
|
||||
FEATURE = ("feature", False)
|
||||
TITLE = ("title", True)
|
||||
URL = ("url", True)
|
||||
METHOD = ("method", True)
|
||||
HEADERS = ("headers", True)
|
||||
COOKIES = ("cookies", False)
|
||||
RUN = ("run", False)
|
||||
REQUEST_TYPE = ("request_type", True)
|
||||
PAYLOAD = ("payload", False)
|
||||
FILES = ("files", False)
|
||||
EXTRACT = ("extract", False)
|
||||
ASSERT_RESPONSE = ("assert_response", True)
|
||||
ASSERT_SQL = ("assert_sql", False)
|
||||
|
||||
|
||||
class TestCase(BaseModel):
|
||||
feature: Union[None, Text] = None
|
||||
title: Text
|
||||
url: Text
|
||||
method: Text
|
||||
headers: Union[None, Dict, Text] = {}
|
||||
cookies: Union[None, Dict, Text]
|
||||
request_type: Text
|
||||
run: Union[None, bool, Text] = None
|
||||
payload: Any = None
|
||||
files: Any = None
|
||||
extract: Union[None, Dict, Text] = None
|
||||
assert_response: Union[None, Dict, Text]
|
||||
assert_sql: Union[None, Dict, Text] = None
|
||||
|
||||
|
||||
class Method(Enum):
|
||||
GET = "GET"
|
||||
POST = "POST"
|
||||
PUT = "PUT"
|
||||
PATCH = "PATCH"
|
||||
DELETE = "DELETE"
|
||||
HEAD = "HEAD"
|
||||
OPTION = "OPTION"
|
||||
|
||||
|
||||
class RequestType(Enum):
|
||||
"""
|
||||
request请求发送,请求参数的数据类型
|
||||
"""
|
||||
JSON = "JSON"
|
||||
PARAMS = "PARAMS"
|
||||
DATA = "DATA"
|
||||
FILE = 'FILE'
|
||||
EXPORT = "EXPORT"
|
||||
NONE = "NONE"
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
|
||||
# ------------------------------------ 配置信息 ----------------------------------------------------#
|
||||
# 0代表执行Excel和yaml两种格式的用例, 1 代表 yaml文件,2 用例代表Excel用例
|
||||
CASE_FILE_TYPE = 1
|
||||
CASE_FILE_TYPE = 0
|
||||
|
||||
# 0表示默认不发送任何通知, 1代表钉钉通知,2代表企业微信通知, 3代表邮件通知, 4代表所有途径都发送通知
|
||||
SEND_RESULT_TYPE = 0
|
||||
|
||||
Reference in New Issue
Block a user