017、fixture之 ids 引數
阿新 • • 發佈:2021-08-07
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:skyView Code', '用例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']}")
執行結果如下:
沒加 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
執行結果如下: