pyest+allure框架将环境参数添加到allure首页展示
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/37325e10681b40f8d6c135f896f22956.png)
1.手动添加参数
pyest+allure框架执行完成后,在allure生成的allure-results目录下创建一个environment.properties文件并将环境参数,以a=b的方式,写在文件中,如下:
environment.properties
Author=mojin
BaseUrl=http://192.168.1.234:8056/prod/
Packages_pluggy=0.13.1
Packages_py=1.11.0
Packages_pytest=7.1.3
Platform=Windows-10-10.0.22621-SP0
Plugins_Faker=13.15.1
Plugins_allure-pytest=2.10.0
Plugins_assume=2.4.3
Plugins_asyncio=0.20.3
Plugins_benchmark=3.4.1
Plugins_cov=3.0.0
Plugins_html=3.2.0
Plugins_metadata=2.0.2
Plugins_mock=3.10.0
Plugins_repeat=0.9.1
Plugins_rerunfailures=10.2
Plugins_sugar=0.9.6
Plugins_testreport=1.1.6
Plugins_xdist=3.1.0
ProjectName=\u5efa\u5de5\u96c6\u56e2
Python=3.10.7
完成上述步骤,执行窗口命令,将报告原始数据,生成allure的html 报告,即可完成添加参数到allure首页
allure generate ./target/allure-results -o ./target/allure-report --clean
2.自动获取环境参数
执行pyest+allure框架时会发现,环境参数是以及被获取到的,我们只需要拿到参数即可!
在conftest.py中,通过引用可以之间使用打印
#conftest.py
@pytest.fixture(scope='session',autouse=True)
def run_environmental_information(metadata): #执行环境版本的获取和添加
pass
yield
Logger.info(metadata)
结果如:
{'Python': '3.10.7', 'Platform': 'Windows-10-10.0.22621-SP0', 'Packages': {'pytest': '7.1.3', 'py': '1.11.0', 'pluggy': '0.13.1'}, 'Plugins': {'allure-pytest': '2.10.0', 'Faker': '13.15.1', 'assume': '2.4.3', 'asyncio': '0.20.3', 'benchmark': '3.4.1', 'cov': '3.0.0', 'html': '3.2.0', 'metadata': '2.0.2', 'mock': '3.10.0', 'repeat': '0.9.1', 'rerunfailures': '10.2', 'sugar': '0.9.6', 'testreport': '1.1.6', 'xdist': '3.1.0'}}
2.格式化获取环境参数
思路:手动整理的参数和自动获取到参数合并,展示到allure中
手动添加的参数
# 汉字需要转为ASCII编码 在allure中展示才不乱码
# 手动在线转码 https://www.ip138.com/ascii/,添加到 ./config/environment.properties 文件中
将上述,获取到的环境参数,格式化整理为,allure报告需要参数格式,以a=b的方式,写在environment.properties文件中
#conftest.py
def environmental_information(data, parent_key='', sep='_'):
'''
获取环境信息
:param data: 获取到的环境参数字典
:param parent_key:
:param sep:
:return:
'''
# environment.properties文本信息为手动添加的环境信息
# 读取environment.properties文本信息转为字典格式
with open(all_path.environmentPath, 'r') as file:
text_data = file.read()
#print(text_data)
# 将文本数据分割成行,并以等号为界分割键和值
key_value_pairs = [line.split('=') for line in text_data.strip().split('\n')]
# 创建字典并存储键值对
text_data_to_dict = {key: value for key, value in key_value_pairs}
#将多层嵌套字典转为,不嵌套的字典格式,一层结构
flattened_data = {}
def _flatten(current_data, key):
for k, v in current_data.items():
new_key = f"{key}{sep}{k}" if key else k
if isinstance(v, dict):
_flatten(v, new_key)
else:
flattened_data[new_key] = v
_flatten(data, parent_key)
flattened_data.update(text_data_to_dict) #手动添加的环境信息和获取到的环境信息进行合并
flattened_data = dict(sorted(flattened_data.items())) #字典中按照key名称排序
# flattened_data 字典格式转为 a=b 字符串格式
flattened_srt=''
for k, v in flattened_data.items():
flattened_srt=flattened_srt+f'{k}={v}\n'
#写入文本
with open(all_path.allure_results, 'w', encoding='utf-8') as file:
file.write(flattened_srt)
3.pytest+allure框架执行完成用例后执行调用,environmental_information函数
#conftest.py
@pytest.fixture(scope='session',autouse=True)
def run_environmental_information(metadata): #执行环境版本的获取和添加
pass
yield
Logger.info(metadata)
# metadata 获取到的环境参数
environmental_information(metadata)
4.修改获取的环境参数(补充)
#conftest.py
@pytest.hookimpl(optionalhook=True)
def pytest_metadata(metadata:dict):
# 修改或添加环境参数 例如下 可有可无 亦可在 ./config/environment.properties 文件中添加修改
# 汉字需要转为ASCII编码 在allure中展示才不乱码
# 手动在线转码 https://www.ip138.com/ascii/,添加到 ./config/environment.properties 文件中
# 代码 添加 .encode("unicode_escape").decode() 处理中文在allure中展示乱码
metadata['ProjectName'] = '建工集团'.encode("unicode_escape").decode()
源码地址:https://gitee.com/HP_mojin/python_pytest_environmental_information