對於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測試報告,但報告內容爲空,如圖所訴:
出現的原因:
- 代碼缺少這句話:fp.close()#關閉文件流,不關的話生成的報告是空的
- 測試用例壓根沒有執行,測試用例集的調用出現代碼問題; 測試用例壓根沒有執行,測試用例集的調用出現代碼問題;
解決的方法:
- 在運行測試用例集之後,添加fp.close(),如圖所訴:
- 檢查調用測試用例集的代碼,不能出現重複調用的情況;重複調用測試用例集的話,會出現無法找到需要運行的測試用例的情況;但代碼不會報錯,正常執行
網上有很多生成測試報告的代碼,東拼西湊起來,不可避免有代碼錯誤
錯誤代碼如下:
#構造測試集
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() # 關閉文件對象把數據寫進磁盤,關閉文件流,不關的話生成的報告是空的
程序運行結果終於出現了想要的數據,如圖所訴:雖然測試用例執行失敗了,但好歹測試報告生成了,測試用例也執行了;哎,突然想放聲大哭,這個東西對於無代碼基礎的初學者有點難度的;
今天就寫這麼多,以後碰到的問題,我會再補充進來,謝謝!