pytest运行结果乱码处理

发布时间 2023-03-22 21:16:16作者: dyjnicole

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)