# -*- coding:utf-8 -*-
# 检查jenkins上的用例构建结果，并根据用例失败数量，将结果设置为通过或失败
import sys
import os
HERE = os.path.dirname(os.path.abspath(__file__))
WORKSPACE = os.path.abspath(os.path.join(HERE, '../../../'))
sys.path.append(WORKSPACE)
from base_framework.public_tools.xml_file_api import XmlFileApi
PROJECT_NAME = sys.argv[0]

# 指定 Robot Framework 输出文件的路径
HERE = os.path.dirname(os.path.abspath(__file__))
output_file = os.path.abspath(os.path.join(HERE, '../../../Report/out/output.xml'))

# 解析输出文件, 获取失败用例数量
xf = XmlFileApi(file_path=output_file)
result = xf.get_contain_by_tag_names(tag_names='statistics/total/stat')
failed_count = int(result[0]['attrib']['fail'])

# 按失败用例对应的qa人员标签,
if failed_count > 0:
    result = xf.get_contain_by_tag_names(tag_names='statistics/tag/stat')
    qa_info = {}
    qa_failed_case_number = 0
    for item in result:
        if 'qa-' in item['text'].lower():
            fail_case = int(item['attrib']['fail'])
            if fail_case > 0:
                qa_info[item['text'][3:]] = fail_case
                qa_failed_case_number += fail_case
    if len(qa_info) > 0:
        print("失败用例对应的QA人员及失败用例数量:")
        for key, value in qa_info.items():
            print(f"{key}: {value}个")
        if failed_count > qa_failed_case_number:
            print(f"无qa标签：{failed_count - qa_failed_case_number}个")

# 根据失败用例数量设置构建结果
if "-IT" in PROJECT_NAME:  # it用例失败用例大于5个就标红
    if failed_count > 5:
        print(f"测试用例执行失败，共有 {failed_count} 个失败的用例。")
        sys.exit(1)  # 退出码为1，表示构建失败，构建结果将展示为红色
    elif failed_count > 0:
        print("测试用例小范围失败，但是不影响整体结果。")
        sys.exit(0)  # 退出码为0，表示构建成功，但此时受jenkins构建后步骤限制，将展示为黄色
    else:
        print("测试用例执行成功，所有用例都通过了。")
        sys.exit(0)  # 退出码为0，表示构建成功，构建结果将展示为绿色
else:  # st和smoking有失败用例就标红
    if failed_count > 0:
        print(f"测试用例执行失败，共有 {failed_count} 个失败的用例。")
        sys.exit(1)  # 退出码为1，表示构建失败，构建结果将展示为红色
    else:
        print("测试用例执行成功，所有用例都通过了。")
        sys.exit(0)  # 退出码为0，表示构建成功，构建结果将展示为绿色
