python+unittest+HTMLtestrunner遇到的錯誤

對於python初學者,碰到的問題會千奇百怪,百度上也有不少解決辦法,我總結歸納了自己
碰到的問題;希望對大家有用:
拿登錄接口測試舉例;從代碼調通到HTMLtestrunner測試報告的生成,出現的問題如下:(大神們也可在下面的評論區提供更好更高效的解決方法,謝謝!)

1、問題一:運行Unittests函數時,測試用例未執行

在這裏插入圖片描述

出現的原因:
unittest提供了全局的main()方法,使得一個單元測試模塊變成可以直接運行的測試腳本,main()方法使用TestLoader類來搜索所有包含在模塊中以“test”命名開頭的測試方法,並自動執行它們;

解決的方法:(每個測試用例名稱前都要加“test”或“test_”)

在這裏插入圖片描述

2、問題二:斷言判斷失敗,返回錯誤信息

在這裏插入圖片描述

出現的原因:
正常情況,因爲我加的斷言self.assertEqual(resp[‘status’],1,resp[‘info’]),實際結果與期望值不符,打印出的失敗信息;“Ran 1 test in 0.069s”代表測試用例已經執行完成了;

解決的方法:
正常情況,不予解決;生成HtmltestRunner測試報告時,會在fail中查看到該信息;如圖所訴:
在這裏插入圖片描述

3、問題三:在Pycharm中使用HTMLTestRunner不能生成測試報告

我碰到的問題是代碼程序運行未報錯,就是不生成測試報告;
請參考這個大神的博客:https://blog.csdn.net/zby_hlx/article/details/80415111
出現的原因:
在這裏插入圖片描述

解決的方法:
在pycharm右上角運行主文件;如果找不到主文件,就要添加,添加完成後,選擇運行需要的文件就好了:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

4、問題四:生成HTMLTestRunner測試報告,但報告內容爲空

生成HTMLTestRunner測試報告,但報告內容爲空,如圖所訴:
測試報告內容爲空

出現的原因:

  1. 代碼缺少這句話:fp.close()#關閉文件流,不關的話生成的報告是空的
  2. 測試用例壓根沒有執行,測試用例集的調用出現代碼問題; 測試用例壓根沒有執行,測試用例集的調用出現代碼問題;

解決的方法:

  1. 在運行測試用例集之後,添加fp.close(),如圖所訴:
    在這裏插入圖片描述
  2. 檢查調用測試用例集的代碼,不能出現重複調用的情況;重複調用測試用例集的話,會出現無法找到需要運行的測試用例的情況;但代碼不會報錯,正常執行
    網上有很多生成測試報告的代碼,東拼西湊起來,不可避免有代碼錯誤
    錯誤代碼如下:
#構造測試集
def suite(self):
    self.suiteTest = unittest.TestSuite()#實例化
    self.suiteTest.addTest(UserLoginTest("test_userlogin"))#增加測試用例
    return self.suiteTest
# #構造測試集
# def suite(f):
#     suiteTest = unittest.TestSuite()#實例化
#     suiteTest.addTest(f)  # 增加測試用例
#     return suiteTest
if __name__ == "__main__":
    testunit = unittest.TestSuite()#實例化 ,該處是從重複實例化了測試用例,則程序是找不到需要執行的測試用例的;
    testunit.addTest(suite)  # 增加測試用例
    #testunit.addTest(UserLoginTest("test_userlogin"))#增加測試用例
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()) #獲取當前時間
    # 定義報告存放路徑(避免轉義字符,則使用“/)
    filepath = 'D:/pycharm/newerpetapi/request/'+now+'_test_result.html'
    fp = open(filepath, 'wb') #python3以上版本,打開文件用open,不能用file
    # 定義測試報告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'員工登錄接口測試報告', description=u'測試用例執行情況')
    # 運行測試
    reportresult=runner.run(suite)
    print(reportresult)
    fp.close()  # 關閉文件對象把數據寫進磁盤,關閉文件流,不關的話生成的報告是空的

將上述代碼修改爲:刪除suite函數,直接在if中實例化測試用例,調用

if __name__ == "__main__":
    testunit = unittest.TestSuite()#實例化
    testunit.addTest(UserLoginTest("test_userlogin"))#增加測試用例
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()) #獲取當前時間
    # 定義報告存放路徑(避免轉義字符,則使用“/)
    filepath = 'D:/pycharm/newerpetapi/request/'+now+'_test_result.html'
    fp = open(filepath, 'wb') #python3以上版本,打開文件用open,不能用file
    # 定義測試報告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'員工登錄接口測試報告', description=u'測試用例執行情況')
    # 運行測試
    reportresult=runner.run(testunit)
    print(reportresult)
    fp.close()  # 關閉文件對象把數據寫進磁盤,關閉文件流,不關的話生成的報告是空的

若不刪除suite函數的修改方法如下:

#構造測試集
def suite(f):
    suiteTest = unittest.TestSuite()#實例化
    suiteTest.addTest(f)  # 增加測試用例
    return suiteTest
if __name__ == "__main__":
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
    # 定義報告存放路徑(避免轉義字符,則使用“/)
    filepath = 'D:/pycharm/newerpetapi/request/'+now+'_test_result.html'
    fp = open(filepath, 'wb') #python3以上版本,打開文件用open,不能用file
    # 定義測試報告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'員工登錄接口測試報告', description=u'測試用例執行情況')
    # 運行測試
    runner.run(suite(testadd('test_userlogin')))#調用suite函數,將測試用例名稱傳入函數中
    fp.close()  # 關閉文件對象把數據寫進磁盤,關閉文件流,不關的話生成的報告是空的

程序運行結果終於出現了想要的數據,如圖所訴:雖然測試用例執行失敗了,但好歹測試報告生成了,測試用例也執行了;哎,突然想放聲大哭,這個東西對於無代碼基礎的初學者有點難度的;
在這裏插入圖片描述

今天就寫這麼多,以後碰到的問題,我會再補充進來,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章