python使用ddt過程中遇到的問題及解決方案【推薦】
前言:
在使用DDT數(shù)據驅動+HTMLTestRunner輸出測試報告時遇到過2個問題:
1、生成的測試報告中,用例名稱后有dict() -> new empty dictionary
2、使用ddt生成的用例名稱無法更改
1、用例名稱后有dict() -> new empty dictionary
報告中用例名稱后有dict() -> new empty dictionary,如圖所示:
解決方案:這是ddt高版本1.2.0的bug
1、cmd先通過pip uninstall ddt 卸載ddt,
2、然后再安裝一個低版本的ddt,命令pip install ddt==1.1.3
安裝后再運行程序,結果如下
2、使用ddt生成的用例名稱無法更改
如上圖所示測試用例名稱都是test_api_index,運行結果無法看出用例執(zhí)行的是哪條數(shù)據,翻閱網上的資料找到一個比較好的方法,講解比較詳細,這段內容來自鏈接https://www.cnblogs.com/Simple-Small/p/9230382.html
ddt源碼中有個函數(shù)用來生成用例名稱, mk_test_name
它接收兩個參數(shù):name 和 value.
name:為測試用例的名字。即test_api.
value:為測試數(shù)據,ddt是處理一組測試數(shù)據。而這個value就是這一組數(shù)據中的每一個測試數(shù)據。
對value的值是有限制的:要么就是單值變量,要么就是元組或者列表并且要求元組和列表中的數(shù)據都是單值變量。如("name","port") 、["name","port"]
如果傳進來的測試數(shù)據,不符合value的要求,那么測試用例名字為:name_index。
如果傳進來的測試數(shù)據,符合value的要求,那么測試用例名字為:name_index_value。如果value為列表或者元組,那么將列表/元組的每個數(shù)據依次追加在末尾。
比如傳進來的name值為test_login,value值為["name","port"]
。那最終的測試用例名字是:test_login_01_name_port。
如果傳進來的name值為test_login,value值為{"userName":"18500384561", "password":"123456"},
那最終的測試用例名字為:test_login_1。 因為它不支持對字典類型的數(shù)據處理 。
而我的接口自動化框架中,ddt處理的數(shù)據是一列表:列表當中每個數(shù)據都為字典。ddt一遍歷整個列表,那傳給value的值剛好是字典。。
所以我得到的測試用例名稱就是:test_login_1,test_login_2,test_login_3
為了讓我的測試報告,呈現(xiàn)的更好。那就改改ddt源碼,讓它能夠適應我的框架。
考慮兩個問題:
1、不同接口的測試用例名字如何來??
2、如何讓ddt支持對字典的處理??
解決方案:
第一個問題:每一個測試用例主動提供一個用例名字,說明你是什么接口的什么場景用例。比如:接口名_場景名。login_success、login_noPasswd、login_wrongPasswd等。
在我的框架當中,每一個測試用例是一個字典。那么我就在字典中添加一個鍵值對,case_name=用例名稱
第二個問題:在ddt中添加對字典的處理,如果字典中有case_name字段,則將字典中鍵名為case_name的值作為測試用例名稱中的value值。
修改后的ddt源碼為(紅色粗體部分為修改的內容):
更改代碼后再執(zhí)行,結果如下:
總結
以上所述是小編給大家介紹的python使用ddt過程中遇到的問題及解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
Python報錯ImportError:?IProgress?not?found.?Please?update
在使用Jupyter Notebook或JupyterLab進行交互式編程時,我們可能會遇到各種導入錯誤,本文就來介紹一下Python報錯ImportError:?IProgress?not?found.?Please?update?jupyter?and?ipywidgets解決,感興趣的可以了解一下2024-06-06關于Python可視化Dash工具之plotly基本圖形示例詳解
這篇文章主要介紹了關于Python可視化Dash工具之plotly基本圖形示例詳解,需要的朋友可以參考下2021-03-03