ddt源碼中有個函數用來生成用例名稱, mk_test_name
它接收兩個參數:name 和 valu
name:為測試用例的名字。即test_api.
value:為測試數據,ddt是處理一組測試數據。而這個value就是這一組數據中的每一個測試數據。
對value的值是有限制的:要么就是單值變量,要么就是元組或者列表並且要求元組和列表中的數據都是單值變量。如("name","port") 、["name","port"]
如果傳進來的測試數據,不符合value的要求,那么測試用例名字為:name_index。
如果傳進來的測試數據,符合value的要求,那么測試用例名字為:name_index_value。如果value為列表或者元組,那么將列表/元組的每個數據依次追加在末尾。
比如傳進來的name值為test_login,value值為["name","port"]
。那最終的測試用例名字是:test_login_01_name_port。
如果傳進來的name值為test_login,value值為{"userName":"18500384561", "password":"123456"},
那最終的測試用例名字為:test_login_1。 因為它不支持對字典類型的數據處理 。
而我的接口自動化框架中,ddt處理的數據是一列表:列表當中每個數據都為字典。ddt一遍歷整個列表,那傳給value的值剛好是字典。。
所以我得到的測試用例名稱就是:test_login_1,test_login_2,test_login_3
處理方法:
1. 在ddt中添加對字典dict的處理,如果字典中有case_name字段,則將字典中鍵名為case_name的值作為測試用例名稱中的value值。
2. 在ddt中添加對列表list的處理,則將列表中某一列的值作為測試用例名稱中的value值。
修改后的ddt源碼為(紅色部分為修改的內容):
修改后輸出測試報告用例名: