python.UnitTest框架(用例執行、結果斷言、HTML報告)


本文將以下方面,闡述UnitTest框架的初級操作:

UnitTest介紹:

UnitTest框架使用:

 

 

UnitTest介紹:

     unittest單元測試框架不僅可以適用於單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,並且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果。

  UnitTest框架的優點

  1. 能夠組織多個用例去執行
  2. 提供豐富的斷言方法
  3. 提供豐富的日志與測試結果

  需要注意的地方

  1. UnitTesrt框架是python自帶庫不需要下載,使用時import即可
  2. 新建一個測試類是需要繼承unittest.TestCase類

 


 

UnitTest框架使用:

  TestCase類中定義的幾個特殊方法

  1. setUp():每個測試方法運行前運行,測試前的初始化工作。
  2. tearDown():每個測試方法運行結束后運行,測試后的清理工作。
  3. setUpClass():所有的測試方法運行前運行,單元測試前期准備,必須使用 @classmethod裝飾器進行修飾,setUp()函數之前執行,整個測試過程只執行一次。比如:實例化瀏覽器、瀏覽器最大化、隱式等待設置
  4. tearDownClass():所有的測試方法運行結束后執行,單元測試后期清理,必須使用 @classmethod裝飾器進行修飾,tearDown()之后執行,整個測試過程只執行一次。

  執行用例

   將功能相關的測試用例組合到一起成為一個測試用例集,unittest框架中通過TestSuite類來組裝所有的測試用例集。(也就是說,使用測試集合可                  以同時執行同一個py文件中的多個測試用例類)

  1. TestLoader類:測試用例加載器,返回一個測試用例集合
  2. loadTestsFromTestCase類:根據給定的測試類,獲取其中的所有以‘test’開頭的測試方法,並返回一個測試集合
  3. TestSuite類:組裝測試用例的實例,支持添加和刪除用例,最后將傳遞給test runner進行測試執行
  4. TextTestRunner類:測試用例執行類,其中Text 表示以文本形式輸出測試結果

     測試結果

  . (點):執行成功,一個點表示一個測試方法

  F:執行失敗,如斷言失敗(輸出日志中 failures=1表示一條用例執行失敗)

  E:用例本身有異常,如除數為零(輸出日志中 errors=1表示一條用例異常)

  skipped:有幾條用例被跳過執行

  斷言

  

assertEqual(a, b,[msg = '測試失敗時打印的信息'])          :斷言a和b是否相等,相等則測試用例通過。
assertNotEqual(a, b,[msg = '測試失敗時打印的信息'])       :斷言a和b是否相等,不相等則測試用例通過。
assertTrue(x,[msg = '測試失敗時打印的信息'])              :斷言x是否True,是True則測試用例通過。
assertFalse(x,[msg = '測試失敗時打印的信息'])             :斷言x是否False,是False則測試用例通過。
assertIs(a, b,[msg = '測試失敗時打印的信息'])             :斷言a是否是b,是則測試用例通過。
assertNotIs(a, b,[msg = '測試失敗時打印的信息'])          :斷言a是否是b,不是則測試用例通過。
assertIsNone(x,[msg = '測試失敗時打印的信息'])            :斷言x是否None,是None則測試用例通過。
assertIsNotNone(x,[msg = '測試失敗時打印的信息'])         :斷言x是否None,不是None則測試用例通過。
assertIn(a, b,[msg = '測試失敗時打印的信息'])             :斷言a是否在b中,在b中則測試用例通過。
assertNotIn(a, b,[msg = '測試失敗時打印的信息'])          :斷言a是否在b中,不在b中則測試用例通過。
assertIsInstance(a, b,[msg = '測試失敗時打印的信息'])     :斷言a是是b的一個實例,是則測試用例通過。
assertNotIsInstance(a, b,[msg = '測試失敗時打印的信息'])  :斷言a是是b的一個實例,不是則測試用例通過。

 

  HTML報告

  這個模塊不能用pip進行安裝,只能下載
  http://tungwaiyip.info/software/HTMLTestRunner.html

  將HTMLTestRunner.py文件復制至Python安裝路徑下的lib文件夾中 

  執行 import HTMLTestRunner驗證

 


 

運用以上所述做個練習:

 

import os
import sys
import time
import unittest
import selenium
import HTMLTestRunner


# 繼承unittest.TestCase類
class NumberTest(unittest.TestCase):

    def setUp(self):
        self.a = 10
        self.b = 15

    # Unittest默認運行以test開頭的測試用例
    def test_a(self):
        # 使用unittest.TestCase類下面的斷言方法對測試結果的判斷
        self.assertEqual(self.a+self.b, 10, msg="輸入的數字不是10")

    # @unittest.skip('跳過用例b')
    def test_b(self):
        self.assertEqual(self.a-self.b, 20, msg="輸入的數字不是20")

    def test_c(self):
        self.assertEqual(self.a*self.b, 30, msg="輸入的數字不是30")

    # 在每個測試用例執行完成后都打印"結束"
    def tearDown(self):
        print("結束")


class LoaderTest(unittest.TestCase):

    def test_d(self):
        print("測試LoaderTest")


if __name__ == "__main__":
    # # 執行用例的方法:unittest.main()
    # # 搜索該模塊下所有以test開頭的測試用例方法,並按照ASCLL碼排序執行用例。
    # unittest.main()

    '''
    # 實例化測試套件方法
    suite = unittest.TestSuite()

    # 一次加載多個測試用例並實例化
    testlist = [NumberTest("test_a"), NumberTest("test_b")]
    suite.addTests(testlist)

    # 一次加載一個測試用例並實例化
    # suite.addTest(NumberTest("test_a"))
    # suite.addTest(NumberTest("test_b"))
    
    # 實例化執行測試用例方法
    runner = unittest.TextTestRunner()
    runner.run(suite)
    '''  # 測試套件運行測試類中的測試方法

    '''
    # 加載測試用例並實例化
    testCase = unittest.TestLoader().loadTestsFromTestCase(NumberTest)
    testCase01 = unittest.TestLoader().loadTestsFromTestCase(LoaderTest)
    
    # 組裝被加載的測試用例並實例化
    suite = unittest.TestSuite([testCase, testCase01])
    
    # 運行suite
    unittest.TextTestRunner().run(suite)
    '''  # 測試套件運行測試類

    '''
    # 加載測試用例並實例化
    testCase = unittest.TestLoader().loadTestsFromTestCase(NumberTest)
    # 組裝被加載的測試用例並實例化
    suite1 = unittest.TestSuite([testCase])
    # 實例化創建時間
    cur_time = time.strftime('%Y-%m-%d_%H_%M_%S')
    # 實例化HTML文件的信息屬性
    filename = os.path.dirname(os.path.abspath('.')) + '\\學習筆記\\' + cur_time + '.html'
    # 實例化打開HTML的文件操作
    f = open(filename, "wb")
    # 實例化生成HTML的操作
    runner = HTMLTestRunner.HTMLTestRunner(stream=f, title="測試報告", description='測試報告描述')
    # 執行用例
    runner.run(suite1)
    '''  # HTML報告

 


免責聲明!

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



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