1. 程式人生 > 其它 >017、fixture之 ids 引數

017、fixture之 ids 引數

1、fixture之 ids 引數

  1)概述:

    a、配合 params 引數化時使用,給每個測試用例分配 id ( 用例id的作用:用來描述測試用例的標題 ) ;

    b、fixture之 ids 引數,中文編碼問題:注意 [\u8f93\u5165\u6b63 ...] 這種不叫亂碼, 這叫 unicode 編碼,

      需要 在 conftest.py 中 寫個hook函式轉碼 ( def pytest_collection_modifyitems(items): );

  2)詳情:

    a、配合 params 引數化時使用,給每個測試用例分配 id ( 用例id的作用:用來描述測試用例的標題 )

    test_ee.py 示例程式碼如下:

import pytest

# fixture 之 ids 引數 , 配合 params 引數化時使用,給每個測試用例分配 id
# ( 用例id的作用:用來描述測試用例的標題 )
user_data = [
    {'name': 'sky', 'age': 18, 'hobby': '游泳'},
    {'name': 'Jack', 'age': 250, 'hobby': '搞錢'},
    {'name': 'Tony', 'age': 250, 'hobby': '玩遊戲'}
]

test_name = [
    '用例1:sky
', '用例2:Jack', '用例3:Tony' ] @pytest.fixture(params=user_data, ids=test_name) def login(request): user = request.param return user def test_login(login): user = login print(f"使用者名稱為:{user['name']},年齡為:{user['age']},愛好為:{user['hobby']}")
View Code

    執行結果如下:

  

  沒加 ids 引數的效果如下:

 b、fixture之 ids 引數,中文編碼問題:注意 [\u8f93\u5165\u6b63 ...] 這種不叫亂碼, 這叫 unicode 編碼,

   需要在 conftest.py 中 寫個hook函式轉碼 ; 

   關於,def pytest_collection_modifyitems(items): 的使用, 參考資料:https://blog.csdn.net/waitan2018/article/details/104334932

# 函式名、引數、函式體 內容都固定
# 把 測試用例名,節點名的 unicode編碼(\u7528\u4f8b1\uff1a) 變成 中文 ;
def pytest_collection_modifyitems(items):
    """
    測試用例蒐集完成時,將蒐集到的 item 的 name 和 nodeid的中文顯示在控制檯上
    :param items:
    :return:
    """
    for item in items:
        item.name = item.name.encode('utf-8').decode('unicode_escape')
        item._nodeid = item.nodeid.encode('utf-8').decode('unicode_escape')

執行結果如下,Unicode碼已經變成中文了,如下:

2、@pytest.mark.parametrize 引數化時也可以加ids引數

  test_ee_2.py 程式碼如下:

import pytest

user_data = [
    {'name': 'Tom', 'age': 20, 'hobby': '游泳'},
    {'name': 'Jack', 'age': 250, 'hobby': '搞錢'},
    {'name': 'Tony', 'age': 250, 'hobby': '玩遊戲'}
]

test_name = [
    '用例1:Tom',
    '用例2:Jack',
    '用例3:Tony'
]


@pytest.mark.parametrize('user_data', user_data, ids=test_name)
def test_login(user_data):
    print(f"使用者名稱為:{user_data['name']},年齡為:{user_data['age']},愛好為:{user_data['hobby']}")
View Code

  執行結果如下: