解決unittest中斷言失敗,后續的斷言都不執行的問題


  在unittest測試用例中,在含有多個斷言時,一個斷言失敗后,測試用例會結束運行,無法知道其他斷言是否成功。unittest不同與pytest,在pytest中,

可以使用pytest.assume(表達式),檢查點失敗繼續運行,所以為了解決unittest的這個弊端,本文解決方式:
      1)把多個斷言合成一個斷言,判斷多個斷言的綜合結果是True還是False
      2)判斷每個斷言結果,失敗則匯總,在最終斷言中輸出
 
之前多斷言代碼:
def checkCMSTab(self, tabLabelInfo, tabName):
  self.assertNotEqual(len(tabLabelInfo[0][0]) + len(tabLabelInfo[1]), 0,
'導航2N樓層的{}tab下數據異常:tab數據為空'.format(tabName))
  self.assertNotEqual(len(tabLabelInfo[0][0]), 0,
'導航2N樓層的{}tab下數據異常:無商品數據'.format(tabName))

  self.assertEqual(len(unsaleWareInfoList), 0, '{tabName}tab下存在已售罄商品,具體信息為{unsaleWareInfos}'.format(
tabName=tabName,
unsaleWareInfos=unsaleWareInfos))
  self.assertEqual(len(offlineWareInfoList), 0, '{tabName}tab下存在已下架商品,具體信息為{offlineWareInfoList}'.format(
tabName=tabName,
offlineWareInfoList=offlineWareInfoList))
  # 驗證tab下圖片坑位是否無跳轉鏈接
  self.assertEqual(len(pictureEroorList), 0, "{tabName}下圖片坑位無跳轉鏈接,具體信息為{pictureEroorInfos}".format(tabName=tabName,
pictureEroorInfos=pictureEroorInfos))

優化后代碼如下:

    def checkCMSTab(self, tabLabelInfo, tabName):
        # 解決unittest中斷言失敗,后續的斷言都不執行的問題
        res = True
        msg = []
        res = res and (len(tabLabelInfo[0][0]) + len(tabLabelInfo[1]) > 0)  # 驗證tab下商品+圖片數據為空
        res = res and (len(tabLabelInfo[0][0]) > 0)    # 驗證tab下商品為空
        res = res and (len(unsaleWareInfoList) == 0)   # tab下是否存在已售罄
        res = res and (len(offlineWareInfoList) == 0)  # tab下是否存在已下架
        res = res and (len(pictureEroorList) == 0)  # 驗證tab下圖片坑位是否無跳轉鏈

        if len(tabLabelInfo[0][0]) + len(tabLabelInfo[1]) == 0:
            msg.append('導航2N樓層的{}tab下數據異常:tab數據為空'.format(tabName))
        if len(tabLabelInfo[0][0]) == 0:
            msg.append('導航2N樓層的{}tab下數據異常:無商品數據'.format(tabName))
        if len(unsaleWareInfoList) > 0:
            msg.append('{tabName}tab下存在已售罄商品,具體信息為{unsaleWareInfos}'.format(tabName=tabName,
                                                                                        unsaleWareInfos=unsaleWareInfos))
        if len(offlineWareInfoList) > 0:
            msg.append('{tabName}tab下存在已下架商品,具體信息為{offlineWareInfoList}'.format(tabName=tabName,
                                                                                        offlineWareInfoList=offlineWareInfoList))
        if len(pictureEroorList) > 0:
            msg.append("{tabName}下圖片坑位無跳轉鏈接,具體信息為{pictureEroorInfos}".format(tabName=tabName,
                                                                                                         pictureEroorInfos=pictureEroorInfos))
        self.assertEqual(res, "\n".join(msg))

 此種方式在用例設計中相對實現起來會比較麻煩,為斷言優化初級版;可參考下一篇文章《解決unittest斷言失敗,后續的斷言不執行進階之重新封裝斷言》,重新封裝unittest斷言,

碼字不易,如有轉載請注明出處,感謝~


免責聲明!

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



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