pytest运行结果乱码处理
pytest终端打印结果,中文乱码,解决方式:
第一种方式:在pytest.ini文件中添加一行代码:disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True
第二种方式,conftest.py中添加钩子函数pytest_collection_modifyitems
def pytest_collection_modifyitems(items):
# 解决运行结果乱码问题
for item in items:
item.name = item.name.encode('UTF-8').decode('unicode-escape')
item._nodeid = item.nodeid.encode('UTF-8').decode('unicode-escape')
pytest_collection_modifyitems有三个参数:
session:会话对象
config:配置对象
items:用例对象列表
pytest_collection_modifyitems函数除了可以处理乱码问题外还能修改测试用例的执行顺序
pytest默认执行顺序:项目下的文件名根据ascii码收集运行,文件中的用例从上往下顺序执行,
修改顺序案例:
def pytest_collection_modifyitems(items):
# =====根据用例方法名移除测试用例
# 1.将items的name存放到新的列表
# new_items = []
# for item in items:
# new_items.append(item.name)
# # 2.将要删除的用例名称(test_01)对应的index获取
# del_case_idx = new_items.index('test_01')
# # 3.从items和new_items中移除用例
# new_items.pop(del_case_idx)
# items.pop(del_case_idx)
# # =====将2和4用例顺序调换执行
# del_case_idx2 = new_items.index('test_02')
# del_case_idx4 = new_items.index('test_04')
# items[del_case_idx2], items[del_case_idx4] = items[del_case_idx4], items[del_case_idx2]
# =======用例执行顺序根据name降序排序
items.sort(key=lambda x: x.name, reverse=True)