83 lines
3.7 KiB
Python
83 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# @Version: Python 3.9
|
|
# @Time : 2023/2/2 16:05
|
|
# @Author : chenyinhua
|
|
# @File : conftest.py
|
|
# @Software: PyCharm
|
|
# @Desc: 这是文件的描述信息
|
|
|
|
# 标准库导入
|
|
import time
|
|
# 第三方库导入
|
|
from loguru import logger
|
|
# 本地应用/模块导入
|
|
from config.global_vars import CUSTOM_MARKERS
|
|
|
|
|
|
# ------------------------------------- START: pytest钩子函数处理---------------------------------------#
|
|
def pytest_configure(config):
|
|
"""
|
|
注册自定义标记
|
|
"""
|
|
# 注册自定义标记
|
|
print(f"需要注册的标记:{CUSTOM_MARKERS}")
|
|
logger.debug(f"需要注册的标记:{CUSTOM_MARKERS}")
|
|
markers = list(set(CUSTOM_MARKERS))
|
|
for custom_marker in markers:
|
|
if isinstance(custom_marker, str):
|
|
config.addinivalue_line('markers', f'{custom_marker}')
|
|
print(f"注册了自定义标记:{custom_marker}")
|
|
logger.debug(f"注册了自定义标记:{custom_marker}")
|
|
elif isinstance(custom_marker, dict):
|
|
for k, v in custom_marker.items():
|
|
config.addinivalue_line('markers', f'{k}:{v}')
|
|
print(f"注册了自定义标记:{custom_marker}")
|
|
logger.debug(f"注册了自定义标记:{custom_marker}")
|
|
|
|
|
|
def pytest_terminal_summary(terminalreporter, config):
|
|
"""
|
|
收集测试结果
|
|
"""
|
|
_RERUN = len([i for i in terminalreporter.stats.get('rerun', []) if i.when != 'teardown'])
|
|
try:
|
|
# 获取pytest传参--reruns的值
|
|
reruns_value = int(config.getoption("--reruns"))
|
|
_RERUN = int(_RERUN / reruns_value)
|
|
except Exception:
|
|
reruns_value = "未配置--reruns参数"
|
|
_RERUN = len([i for i in terminalreporter.stats.get('rerun', []) if i.when != 'teardown'])
|
|
|
|
_PASSED = len([i for i in terminalreporter.stats.get('passed', []) if i.when != 'teardown'])
|
|
_ERROR = len([i for i in terminalreporter.stats.get('error', []) if i.when != 'teardown'])
|
|
_FAILED = len([i for i in terminalreporter.stats.get('failed', []) if i.when != 'teardown'])
|
|
_SKIPPED = len([i for i in terminalreporter.stats.get('skipped', []) if i.when != 'teardown'])
|
|
_XPASSED = len([i for i in terminalreporter.stats.get('xpassed', []) if i.when != 'teardown'])
|
|
_XFAILED = len([i for i in terminalreporter.stats.get('xfailed', []) if i.when != 'teardown'])
|
|
_TOTAL = terminalreporter._numcollected
|
|
_TIMES = time.time() - terminalreporter._sessionstarttime
|
|
_ACTUAL_RUN = _PASSED + _FAILED + _XPASSED + _XFAILED
|
|
logger.success(f"\n======================================================\n"
|
|
"-------------测试结果--------------------\n"
|
|
f"用例总数: {_TOTAL}\n"
|
|
f"跳过用例数: {_SKIPPED}\n"
|
|
f"实际执行用例总数: {_ACTUAL_RUN}\n"
|
|
f"通过用例数: {_PASSED}\n"
|
|
f"异常用例数: {_ERROR}\n"
|
|
f"失败用例数: {_FAILED}\n"
|
|
f"重跑的用例数(--reruns的值): {_RERUN}({reruns_value})\n"
|
|
f"意外通过的用例数: {_XPASSED}\n"
|
|
f"预期失败的用例数: {_XFAILED}\n\n"
|
|
"用例执行时长: %.2f" % _TIMES + " s\n")
|
|
try:
|
|
_RATE = _PASSED / _ACTUAL_RUN * 100
|
|
logger.success(
|
|
f"\n用例成功率: %.2f" % _RATE + " %\n"
|
|
"=====================================================")
|
|
except ZeroDivisionError:
|
|
logger.critical(
|
|
f"用例成功率: 0.00 %\n"
|
|
"=====================================================")
|
|
|
|
# ------------------------------------- END: pytest钩子函数处理---------------------------------------#
|