80 lines
3.2 KiB
Python
80 lines
3.2 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
import os
|
|
import sys
|
|
import traceback
|
|
import pytest
|
|
from utils.other_tools.models import NotificationType
|
|
from utils.other_tools.allure_data.allure_report_data import AllureFileClean
|
|
from utils.logging_tool.log_control import INFO
|
|
from utils.notify.wechat_send import WeChatSend
|
|
from utils.notify.ding_talk import DingTalkSendMsg
|
|
from utils.notify.send_mail import SendEmail
|
|
from utils.notify.lark import FeiShuTalkChatBot
|
|
from utils.other_tools.allure_data.error_case_excel import ErrorCaseExcel
|
|
from utils import config
|
|
|
|
|
|
def run():
|
|
# 从配置文件中获取项目名称
|
|
try:
|
|
INFO.logger.info(
|
|
"""
|
|
_ _ _ _____ _
|
|
__ _ _ __ (_) / \\ _ _| |_ __|_ _|__ ___| |_
|
|
/ _` | '_ \\| | / _ \\| | | | __/ _ \\| |/ _ \\/ __| __|
|
|
| (_| | |_) | |/ ___ \\ |_| | || (_) | | __/\\__ \\ |_
|
|
\\__,_| .__/|_/_/ \\_\\__,_|\\__\\___/|_|\\___||___/\\__|
|
|
|_|
|
|
开始执行{}项目...
|
|
""".format(config.project_name)
|
|
)
|
|
|
|
# 判断现有的测试用例,如果未生成测试代码,则自动生成
|
|
# TestCaseAutomaticGeneration().get_case_automatic()
|
|
|
|
pytest.main(['-s', '-W', 'ignore:Module already imported:pytest.PytestWarning',
|
|
'--alluredir', './report/tmp', "--clean-alluredir"])
|
|
|
|
"""
|
|
--reruns: 失败重跑次数
|
|
--count: 重复执行次数
|
|
-v: 显示错误位置以及错误的详细信息
|
|
-s: 等价于 pytest --capture=no 可以捕获print函数的输出
|
|
-q: 简化输出信息
|
|
-m: 运行指定标签的测试用例
|
|
-x: 一旦错误,则停止运行
|
|
--maxfail: 设置最大失败次数,当超出这个阈值时,则不会在执行测试用例
|
|
"--reruns=3", "--reruns-delay=2"
|
|
"""
|
|
|
|
os.system(r"allure generate ./report/tmp -o ./report/html --clean")
|
|
|
|
allure_data = AllureFileClean().get_case_count()
|
|
notification_mapping = {
|
|
NotificationType.DING_TALK.value: DingTalkSendMsg(allure_data).send_ding_notification,
|
|
NotificationType.WECHAT.value: WeChatSend(allure_data).send_wechat_notification,
|
|
NotificationType.EMAIL.value: SendEmail(allure_data).send_main,
|
|
NotificationType.FEI_SHU.value: FeiShuTalkChatBot(allure_data).post
|
|
}
|
|
|
|
if config.notification_type != NotificationType.DEFAULT.value:
|
|
notification_mapping.get(config.notification_type)()
|
|
|
|
if config.excel_report:
|
|
ErrorCaseExcel().write_case()
|
|
|
|
# 程序运行之后,自动启动报告,如果不想启动报告,可注释这段代码
|
|
os.system(f"allure serve ./report/tmp -h 127.0.0.1 -p 9999")
|
|
|
|
except Exception:
|
|
# 如有异常,相关异常发送邮件
|
|
e = traceback.format_exc()
|
|
send_email = SendEmail(AllureFileClean.get_case_count())
|
|
send_email.error_mail(e)
|
|
raise
|
|
|
|
|
|
if __name__ == '__main__':
|
|
run()
|