openTT/conftest.py

92 lines
4.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
# @Version: Python 3.9
# @Time : 2023/2/2 16:05
# @Author : chenyinhua
# @File : conftest.py
# @Software: PyCharm
# @Desc: 这是文件的描述信息
# 标准库导入
import time
import os
from datetime import datetime
# 第三方库导入
from loguru import logger
# 本地应用/模块导入
from settings import REPORT_DIR, CUSTOM_MARKERS
# ------------------------------------- START: pytest钩子函数处理---------------------------------------#
def pytest_configure(config):
"""
注册自定义标记
"""
# 注册自定义标记
logger.debug(f"需要注册的标记:{CUSTOM_MARKERS}")
# 对标记进行去重处理
unique_markers = []
for item in CUSTOM_MARKERS:
if item not in unique_markers:
unique_markers.append(item)
# 注册标记
for custom_marker in unique_markers:
if isinstance(custom_marker, str):
config.addinivalue_line('markers', f'{custom_marker}')
elif isinstance(custom_marker, dict):
for k, v in custom_marker.items():
config.addinivalue_line('markers', f'{k}:{v}')
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
_DURATION = time.time() - terminalreporter._sessionstarttime
session_start_time = datetime.fromtimestamp(terminalreporter._sessionstarttime)
_START_TIME = f"{session_start_time.year}{session_start_time.month}{session_start_time.day}" \
f"{session_start_time.hour}:{session_start_time.minute}:{session_start_time.second}"
test_info = f"各位同事, 大家好:\n" \
f"自动化用例于 {_START_TIME}- 开始运行,运行时长:{_DURATION:.2f} s 目前已执行完成。\n" \
f"--------------------------------------\n" \
f"#### 执行结果如下:\n" \
f"- 用例运行总数: {_TOTAL}\n" \
f"- 跳过用例个数skipped: {_SKIPPED}\n" \
f"- 实际执行用例总数: {_PASSED + _FAILED + _XPASSED + _XFAILED}\n" \
f"- 通过用例个数passed: {_PASSED}\n" \
f"- 失败用例个数failed: {_FAILED}\n" \
f"- 异常用例个数error: {_ERROR}\n" \
f"- 重跑的用例数(--reruns的值): {_RERUN} ({reruns_value}) 个\n"
try:
_RATE = (_PASSED + _XPASSED) / (_PASSED + _FAILED + _XPASSED + _XFAILED) * 100
test_result = f"- 用例成功率: {_RATE:.2f} %\n"
logger.success(f"{test_info}{test_result}")
except ZeroDivisionError:
test_result = "- 用例成功率: 0.00 %\n"
logger.critical(f"{test_info}{test_result}")
# 这里是方便在流水线里面发送测试结果到钉钉/企业微信的
with open(file=os.path.join(REPORT_DIR, "test_result.txt"), mode="w", encoding="utf-8") as f:
f.write(f"{test_info}{test_result}")
# ------------------------------------- END: pytest钩子函数处理---------------------------------------#