From 14e3dbd1947f1643be70ef520d129defd1a2357b Mon Sep 17 00:00:00 2001 From: floraachy <1622042529@qq.com> Date: Mon, 22 May 2023 09:35:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86allure=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=96=B9=E6=B3=95=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96allure=E6=8A=A5=E5=91=8A=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- case_utils/allure_handle.py | 147 ++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 case_utils/allure_handle.py diff --git a/case_utils/allure_handle.py b/case_utils/allure_handle.py new file mode 100644 index 0000000..c2a9cdc --- /dev/null +++ b/case_utils/allure_handle.py @@ -0,0 +1,147 @@ +# -*- coding: utf-8 -*- +# @Time : 2023/5/17 8:58 +# @Author : chenyinhua +# @File : allure_handle.py +# @Software: PyCharm +# @Desc: + +import json +import allure +from config.global_vars import AllureAttachmentType +import os + + +def allure_title(title: str) -> None: + """allure中动态生成用例标题""" + # allure.dynamic动态属性 + allure.dynamic.title(title) + + +def allure_step(step_title: str, content: str = None, source=None) -> None: + """ + allure.step()添加测试用例步骤 + :param step_title: 步骤及附件名称 + :param content: 附件内容 + :param source: 文件路径 + """ + if source: + with allure.step(step_title): + """ + 语法:allure.attach.file(source, name, attachment_type, extension) + + 参数解释: + source:文件路径,相当于传一个文件; + name:附件名称; + attachment_type:附件类型,是allure.attachment_type其中的一种; + extension:附件的扩展名(文件后缀); + """ + # 获取上传附件的尾缀,判断对应的 attachment_type 枚举值 + file_suffix = source.split('.')[-1] + _attachment_type = getattr(AllureAttachmentType, file_suffix.upper(), None) + allure.attach.file(source=source, name=os.path.basename(source), + attachment_type=_attachment_type if _attachment_type is None else _attachment_type.value, + extension=file_suffix) + else: + with allure.step(step_title): + """ + 语法:allure.attach(body, name, attachment_type, extension) + 参数解释: + body:要写入附件的内容; + name:附件名称; + attachment_type:附件类型,是allure.attachment_type其中的一种; + extension:附件的扩展名(文件后缀); + ------------------------------------------------------------------- + json.dumps(content, ensure_ascii=False, indent=4) + ensure_ascii表示的意思是是否要转为ASCII码,如果打开(默认打开True),那么转为json后中文会变成ASCII编码,如果关闭后中文还是中文,不会变为ASCII编码。 + indent表示间隔的长度 + """ + allure.attach(body=json.dumps(content, ensure_ascii=False, indent=4), name=step_title, + attachment_type=allure.attachment_type.TEXT) + + +class AllureReportBeautiful: + """ + 美化allure测试报告 + """ + + def __init__(self, allure_html_path=None, allure_results_path=None): + """ + @param allure_results_path: allure保存测试结果集目录 + @param allure_html_path: allure生成的html报告的目录 + """ + self.allure_html_path = allure_html_path + self.allure_results_path = allure_results_path + + # 设置报告窗口的标题 + def set_windows_title(self, new_title): + """ + 设置打开的 Allure 报告的浏览器窗口标题文案 + @param new_title: 需要更改的标题文案 【 原文案为:Allure Report 】 + @return: + """ + report_title_filepath = os.path.join(self.allure_html_path, "index.html") + # 定义为只读模型,并定义名称为: f + with open(report_title_filepath, 'r+', encoding="utf-8") as f: + # 读取当前文件的所有内容 + all_the_lines = f.readlines() + f.seek(0) + f.truncate() + # 循环遍历每一行的内容,将 "Allure Report" 全部替换为 → new_title(新文案) + for line in all_the_lines: + f.write(line.replace("Allure Report", new_title)) + # 关闭文件 + f.close() + + def set_report_name(self, new_name): + """ + 修改Allure报告Overview的标题文案 + @param new_name: 需要更改的标题文案 【 原文案为:ALLURE REPORT 】 + @return: + """ + title_filepath = os.path.join(self.allure_html_path, "widgets", "summary.json") + # 读取summary.json中的json数据,并改写reportName + with open(title_filepath, 'rb') as f: + # 加载json文件中的内容给params + params = json.load(f) + # 修改内容 + params['reportName'] = new_name + # 将修改后的内容保存在dict中 + new_params = params + # 往summary.json中,覆盖写入新的json数据 + with open(title_filepath, 'w', encoding="utf-8") as f: + json.dump(new_params, f, ensure_ascii=False, indent=4) + + def set_report_env(self, env_info): + """ + 在allure-results报告的根目录下生成一个写入了环境信息的文件:environment.properties(注意:不能放置中文,否则会出现乱码) + @param env_info: 需要写入的环境信息 + @return: + """ + + with open(os.path.join(self.allure_results_path, "environment.properties"), 'w', encoding="utf-8") as f: + for k, v in env_info.items(): + f.write('{}={}\n'.format(k, v)) + + +def allure_logo_change(allure_path, logo_path): + """ + 修改allure的logo + 步骤: + 1. 进入‘allure-x.x.x\config’ 目录,打开 ‘allure.yml’ 文件,在最下面增加一行 ‘- custom-logo-plugin ' , 特别要注意层级关系。 + 2. 复制logo到‘allure-x.x.x\plugins\custom-logo-plugin\static’ 文件夹 + 3. 修改‘allure-x.x.x\plugins\custom-logo-plugin\static\styles.css’ 文件 来配置logo,参考如下: + .side-nav__brand { + background: url('logo.svg') no-repeat left center !important; + margin-left: 10px; + height: 65px; + width: 150px; + background-size: contain !important; + } + .side-nav__brand span{ + display: none; + } + @param allure_path: logo绝对路径 + @param logo_path: logo绝对路径 + """ + # TODO 后续支持通过代码实现修改 + pass