python——使用ddt過程中遇到的問題及解決方案


前言:

  在使用DDT數據驅動+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,運行結果無法看出用例執行的是哪條數據,翻閱網上的資料找到一個比較好的方法,講解比較詳細,這段內容來自鏈接https://www.cnblogs.com/Simple-Small/p/9230382.html

  ddt源碼中有個函數用來生成用例名稱,mk_test_name

  它接收兩個參數:name 和 value.

        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

  

  為了讓我的測試報告,呈現的更好。那就改改ddt源碼,讓它能夠適應我的框架。

       考慮兩個問題:

        1、不同接口的測試用例名字如何來??

        2、如何讓ddt支持對字典的處理??

        解決方案:

        第一個問題:每一個測試用例主動提供一個用例名字,說明你是什么接口的什么場景用例。比如:接口名_場景名。login_success、login_noPasswd、login_wrongPasswd等。

        在我的框架當中,每一個測試用例是一個字典。那么我就在字典中添加一個鍵值對,case_name=用例名稱

  第二個問題:在ddt中添加對字典的處理,如果字典中有case_name字段,則將字典中鍵名為case_name的值作為測試用例名稱中的value值。

       修改后的ddt源碼為(紅色粗體部分為修改的內容):

  

  更改代碼后再執行,結果如下:

  

    喜歡可打賞鼓勵下博主:

           

 

 

 

 

注:轉載請注明:https://www.cnblogs.com/Clairewang/p/9857921.html

  文中第二個問題解決方案來自https://www.cnblogs.com/Simple-Small


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM