一篇文章向你解釋什麼是Unittest單元測試框架(上)

2021-02-20 51Testing軟體測試網

軟體測試一般按階段劃分為:單元測試,集成測試,系統測試。單元測試(unit testing)是指對軟體中的最小可測試單元進行檢查和驗證。單元測試中單元的含義,單元就是人為規定的最小的被測功能模塊,如C語言中單元指一個函數,Java裡單元指一個類,圖形化的軟體中可以指一個窗口或一個菜單等。在實際項目中,單元測試往往由開發人員完成。

單元測試其實就是構造數據使用一段代碼去測試另一段代碼,理論上來說,不使用單元測試框架也能進行單元測試。但如果用於單元測試的代碼(即測試用例)增多,在沒有測試框架的情況下會變得擁擠、不可管理,這個時候引入測試框架就變得尤為重要。

單元測試框架提供了一種統一的編程模型,可以將測試定義為一些簡單的類,這些類中的方法可以調用希望測試的應用程式代碼。利用單元測試框架,可以很輕鬆地插入、設置和分解有關測試的功能,可以直觀方便地管理測試用例。

主流的單元測試框架,如Java的Junit、TestNg,python的Unittest、Pyunit、Pytest,通用的自動化測試框架Robot Framework等。

1)提供用例組織與執行

2)提供豐富的斷言方法

3)提供豐富的日誌與測試結果

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

Unittest官方文檔:https://docs.python.org/3/library/unittest.html

TestCase:即測試用例,Unittest提供testCase類來編寫測試用例,一個TestCase的實例就是一個測試用例。一條測試用例就是一個完整的測試流程,包括測試前準備環境的搭建(setUp),執行測試代碼(run),以及測試後環境的還原(tearDown),通過運行一條測試用例,可以對某一個問題進行驗證。

Fixture:即測試固件,用於測試用例環境的搭建和銷毀。在測試步驟執行前需要為該測試用例準備環境(SetUp),如啟動app或打開瀏覽器,測試步驟執行後需要恢復環境 (TearDown),如關閉app或瀏覽器,這時候就需要用到Fixture,使代碼更簡潔。

TestSuite:即測試套件,把需要執行的測試用例集合在一起就是TestSuite。使用TestLoader來加載TestCase到TestSuite中。

TextTestRunner:即測試執行器,用於執行測試用例。該模塊中提供run方法執行TestSuite中的測試用例,並返回測試用例的執行結果,如運行的用例總數、用例通過數、用例失敗數。

report:即測試報告。unittest框架沒有自帶的用於生成測試報告的模塊或接口,需要使用第三方的擴展模塊HTMLTestRunner。

斷言在自動化測試腳本中是很重要的內容,只有設置正確合適的斷言才能獲取正確的測試結果。Unittest框架提供了自己的斷言方法,如下:

注意:

如果斷言成功則該條測試用例通過,斷言失敗則該條測試用例執行失敗,且會拋出AssertionError錯誤。

以上提供的斷言方法中,都有一個msg參數,默認為None。如果msg參數有對應的值,則斷言失敗後該msg的值會作為失敗信息返回,如 assertEqual(a, b, msg="a與b不相等!") 。

測試對象:構造一個類Math,其中包含整數的加、減法運算。

calculator.py

class Math():    def __init__(self, a, b):        self.a = int(a)        self.b = int(b)
def sum(self): '''和''' return self.a + self.b
def sub(self): '''差''' return self.a - self.b

測試需求:對Math類進行單元測試。接下來針對這個測試需求,使用unittest框架編寫測試用例。

項目目錄結構:後面的例子中,項目結構如下所示。

在Unittest框架下創建測試用例,步驟如下:

1)導入unittest模塊。

2)創建測試類。測試類的命名不做要求,但需要繼承unittest.TestCase類。

3)添加setUp()、tearDown()函數,即測試固件。當然還有setUpClass()、tearDownClass() 函數,區別後面會有介紹。

4)定義測試方法,即測試用例。測試方法名稱必須以test開頭,否則測試時該方法將不會被執行。測試方法裡需要添加斷言。

5)調試執行測試用例。執行當前模塊的測試用例時,調用unittest.main()方法,該方法會搜索該模塊下所有以test開頭的測試用例方法,並執行。其他方法後面介紹。

針對測試需求,編寫測試用例。目錄結構如下:

test_sum.py

import unittestfrom calculator import Math
class SumTest(unittest.TestCase): '''測試Math類中的sum函數''' def setUp(self): print("開始執行測試用例{}...".format(self))
def test_sum01(self): m = Math(3, 4) self.assertEqual(m.sum(), 7)
def test_sum02(self): m = Math(2, 8) self.assertEqual(m.sum(), 11)
def tearDown(self): print("測試用例{}執行結束...".format(self))
if __name__ == '__main__': unittest.main()

運行結果:

.F======================================================================FAIL: test_sum02 (__main__.SumTest)Traceback (most recent call last):  File "C:/Users/xiaoqq/Desktop/test_project/demo/testSum.py", line 15, in test_sum02    self.assertEqual(m.sum(), 11)AssertionError: 10 != 11
Ran 2 tests in 0.001s
FAILED (failures=1)開始執行測試用例test_sum01 (__main__.SumTest)...測試用例test_sum01 (__main__.SumTest)執行結束...開始執行測試用例test_sum02 (__main__.SumTest)...測試用例test_sum02 (__main__.SumTest)執行結束...
Process finished with exit code 0

結果顯示:

1)test_sum01通過,test_sum02失敗。點"."表示通過,"F"表示失敗。

2)測試類中每個測試方法(即測試用例)執行前,都先執行setUp()方法,每個測試方法執行完畢後都要執行tearDown()方法。

3)斷言失敗會返回一個AssertionError。

相關焦點

  • 細說unittest單元測試框架
    一、單元測試框架說明 單元測試是指在編程中,針對程序模塊的最小單元(類中的方法)進行正確性檢驗的測試工作。python+selenium自動化測試中通常使用unittest或者pytest作為單元測試框架。
  • 軟體測試學習教程:單元測試之UnitTest測試框架
    單元測試的概念單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。對於單元測試中單元的含義,要根據實際情況去判定其具體含義。一個單元可能是功能模塊、類、方法(函數)等。單元測試工具不同的程式語言都有比較成熟的單元測試框架,語法規則有些差別,其核心思想都是相通的。
  • Python單元測試——深入理解unittest
    單元測試的重要性就不多說了,可惡的是python中有太多的單元測試框架和工具,什麼unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover,再加上setuptools, distutils等等這些,先不說如何寫單元測試,光是怎麼運行單元測試就有
  • Python自動化之unittest框架
    在金字塔模型的測試理論體系中,單元測試是最底層的測試,而且是測試覆蓋最多的層面。在自動化所有的測試體系中,不管是單元測試,還是接口測試以及基於UI的自動化測試,都需要單元測試框架,在Python語言中,最常用的單元測試框架是unittest和pytest,今晚主要來介紹unittest單元測試框架,後期逐步的介紹pytest測試框架在自動化測試中的應用。
  • Python單元測試框架-UnitTest以及測試報告
    在開始使用UnitTest執行單元測試之前我們先了解幾個概念:test case:測試用例,可以通過創建unitest.TestCase類的子類創建一個測試用例。test suite:測試套件,是測試用例、測試套件或者兩者的集合,用來將有關聯的測試項打包。test runner:負責執行測試並將結果展示給用戶,可以展示圖形或文字形式(unittest.TextTestRunner)的結果,或者返回一個錯誤碼標識測試用例的執行結果。
  • unittest測試框架
    unittest測試框架1、導入包from selenium
  • 自動化測試基礎篇:Selenium unittest 簡介
    ,對於Python語言,同樣有類似的單元測試框架Unittest。今天就給大家結合實例介紹一下unittest,一起來學習吧。一、什麼是unittestunittest是Python單元測試框架,類似於JUnit框架。
  • Python之UnitTest框架介紹
    UnitTest的介紹Python中相對比較流行的自動化測試框架UnitTest,早期主要時用於做單元測試,隨著自動化更新,能夠完善的結合Selenium/Appium/Requests等實現UI自動化與接口自動化。
  • unittest框架核心要素及應用
    1. unittest核心要素unittest介紹測試框架,不僅僅用於單元測試python自動的測試包用法和運行容器中的測試用例"""import unittest# 測試類,繼承於unittest.TestCaseclass MyTest(unittest.TestCase):def test_1(self):
  • python unittest使用基本過程
    前言unittest是python的標準的單元測試框架,能夠很好的和自動化測試相結合,並有獨立的測試報告框架。在selenium測試中,我們可以用來做webdriver的初始化等等testcase測試用例,unittest的最小單元。用以對指定輸入的返回結果進行檢測。在unittest中提供 了TestCase基類,用來創建新的測試用例類。
  • 技術面試沒過,居然是因為沒用過 pytest 單元測試框架
    他說面試官問了一些 pytest 單元測試框架相關的知識,包括什麼插件系統和用力篩選。但是他之前的公司用的技術是基於 unittest 的,沒有用過 pytest。也就是因此被面試官給卡住了。實際上他在面試之前已經了解過 pytest 的一些基礎用法,但是網上的一些資料,都是停留基礎講解,沒有深入到 pytest 內部運行和一些高級特性。
  • 從小白變高手,這7個超實用的Python自動化測試框架請收好!
    常見的測試框架1、Unittestunittest是Python內置的標準類庫。它的API跟Java的JUnit、.net的NUnit,C++的CppUnit很相似。通過繼承unittest.TestCase來創建一個測試用例。
  • python測試函數模塊unittest
    1.測試函數在編寫完代碼後進行對代碼測試是否有錯誤2.pytho標準庫中的模塊unittest為代碼測試工具例如:name_function.py 模塊名def get_formatted_name(first, last): full_name = first + ' ' + last
  • python unittest關鍵API說明及示例
    前言本次就python unittest單元測試框架的一些基本的、常用的API 進行分享,以便大家後續更深入的熟悉和應用unittest。TestCase類APITeseCase類實例化的對象是最小的可測單元顆粒。
  • Python Unittest 根據不同測試環境跳過用例詳解
    本文章會講述以下幾個內容:  1、Unittest
  • 從零開始學Python-Day50-單元測試
    把上面的測試用例放到一個測試模塊裡,就是一個完整的單元測試。如果單元測試通過,說明我們測試的這個函數能夠正常工作。如果單元測試不通過,要麼函數有bug,要麼測試條件輸入不正確,總之,需要修復使單元測試能夠通過。單元測試通過後有什麼意義呢?
  • 使用python的unittest做測試
    ()實現一個繼承unittest.TestCase的類,使用unittest.main()來測試該類中所有以test開頭的測試用例。而不是assertTrue、assertFalse,當assertEquals失敗的時候,會列印出比較的兩方值更直觀self.fail([msg])會無條件的導致測試失敗,不推薦使用。
  • 自動化測試常用的Python框架有哪些?
    另外,用戶只需要有一臺帶有命令行界面的測試設備,並且安裝好了Python包管理器、以及可用於開發的IDE工具。三、UnitTest/PyUnitUnitTest/PyUnit一種標準化的針對單元測試的Python類自動化測試框架。基類TestCase提供了各種斷言方法、以及所有清理和設置的例程。
  • 關於Android單元測試,你需要知道的一切
    單元測試是個技術活,它有自己的一套知識體系,要做好單元測試,的確是需要學習和不斷的在實踐中練習的。好消息是,這套知識體系的範圍相對來說是有限的,因此,只要耐心的學習和練習一段時間,就可以做好日常大多數的需求。然後國內這大環境和氛圍,大家都清楚,大部分時候大家都在趕feature,趕上線,以至於單元測試這件事情,往往被忽略,甚至從來沒考慮過,而這一點在移動開發上面則更加嚴重。
  • 測試藍本 | 一篇文章搞懂什麼是測試,測試是幹什麼的
    所以我們理解自動化一定從成本的概念上考慮, 最少從自動化測試概念的起步應該從這個方面考慮。那麼自動化測試的重點就在於他節省人力,節省時間,得到的數據更精確些,而且操作的可重複性和Bug的可重現性更強一些。下面我就對自動化測試做一個詳細的解釋,跟大家分享。1. 簡介本文關注於一個實施自動化測試框架的組織的主要方面和影響。