我們知道痹屹,Pytest是Python技術(shù)棧下進(jìn)行自動化測試的主流測試框架厅须。支持靈活的測試發(fā)現(xiàn)、執(zhí)行策略惶岭,強(qiáng)大的Fixture夾具和豐富的插件支持。
除了通過pytest的parametrize標(biāo)簽進(jìn)行參數(shù)化外犯眠,我們通過fixture的param參數(shù)也可以比較方便地實(shí)現(xiàn)參數(shù)化測試的功能
fixture參數(shù)化實(shí)現(xiàn)
假設(shè)我們有如下一段待測代碼按灶,根據(jù)傳入?yún)?shù)的不同類型得到不同的輸出
def deal_params(p):
if type(p) is int:
return p*10
if type(p) is str:
return f"輸入了:{p}"
if type(p) in (tuple, list):
return "_".join(p)
else:
raise TypeError
然后我們編寫對應(yīng)的測試代碼,首先定義fixture筐咧,設(shè)定params參數(shù)列表鸯旁, 再通過fixture本身的request獲取param. 比如這里定義幾個參數(shù)。當(dāng)然此外我們還定義了fixture的前置和后置動作量蕊。測試方法就是調(diào)用被測函數(shù)執(zhí)行铺罢。
@pytest.fixture(params=[10, "城下秋草", "軟件測試", ("示例", "代碼")])
def fix_env(request):
yield request.param
def test_params(fix_env):
print(deal_params(fix_env))
運(yùn)行得到如下輸出:
可以看到,雖然參數(shù)化成功運(yùn)行残炮,但這里有個問題韭赘,就是輸出的結(jié)果中,用例ID這里势就,顯示的是亂碼.
根據(jù)pytest的ID生成規(guī)則泉瞻,如果是字符或數(shù)字,會顯示傳入的參數(shù)本身(當(dāng)然也可以利用ids參數(shù)重新指定參數(shù)的對應(yīng)ID)苞冯,如果是元組袖牙、列表或字典,則會顯示fixture的name+參數(shù)序號舅锄,比如這里的fix_env3
那這里的字符是中文鞭达,顯示成了unicode轉(zhuǎn)義前的編碼,所以還是中文轉(zhuǎn)換有問題巧娱。也就是Pytest對于fixture參數(shù)的處理,默認(rèn)會使用Ascii編碼來進(jìn)行顯示烘贴,而對于中文禁添,我們是希望用unicode編碼顯示。
中文亂碼解決方案一
所以桨踪,這里解決這個問題的第一個方法是可以利用Pytest的fixture集中配置文件conftest.py
老翘, 在其中利用Pytest的hook機(jī)制,修改用例收集方法中生成用例ID的部分. 對應(yīng)代碼:
用例文件的同級conftest.py中定義:
def pytest_collection_modifyitems(items):
# item表示收集到的測試用例锻离,對他進(jìn)行重新編碼處理
for item in items:
item.name = item.name.encode("utf-8").decode("unicode-escape")
item._nodeid = item._nodeid.encode("utf-8").decode("unicode-escape")
再次執(zhí)行铺峭,可以看到已經(jīng)正常顯示了中文
中文亂碼解決方案二
除了通過修改hook來對用例ID進(jìn)行重新編碼處理外,其實(shí)Pytest本身也提供了一個配置參數(shù)汽纠。只是這個配置并不是官方推薦的解決方法卫键。在某些操作系統(tǒng)上的特定情形下,使用這個配置虱朵,可能會導(dǎo)致一些異常bug莉炉。但筆者在windows和Ubuntu上測試是沒有問題的钓账。
這里對應(yīng)的配置是:
disable_test_id_escaping_and_forfeit_all_rights_to_community_support = True
從這個超長的配置名稱也可以看出,就是禁用testID的轉(zhuǎn)義但同時放棄了社區(qū)支持 ????
在pytest.ini中加上這個配置絮宁,不使用上面hook的話梆暮,也能得到中文正常顯示的效果。
以上就是關(guān)于Pytest中參數(shù)化中文顯示時绍昂,可能遇到的亂碼問題的解決方案啦粹。
我的測試職業(yè)進(jìn)階提升課程正在慕課網(wǎng)火熱推廣中,感興趣的小伙伴可以以下鏈接了解下哦
???????? 城下秋草的測試職業(yè)進(jìn)階提升課 ????????