日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 单元测试_Python系列之单元测试框架【unittest】

發布時間:2024/10/14 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 单元测试_Python系列之单元测试框架【unittest】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unittest是基于Python的單元測試框架,當然現在經常與其他框架集成,用來做自動化測試的框架。比如跟Selinum一起做Web UI的自動化測試框架,與Requests一起做接口的自動化測試框架,與Twisted一起做VoIP系統的自動化測試框架等等。

1 Unittest的幾大組件介紹

2 測試用例的編寫

(1)TestCase組件介紹

當我們寫測試用例的時候,是需要自己實現一個類,該類需要集成unittest框架自帶的TestCase類。我們具體每一個case的體現就是一個以test打頭的實例方法,具體的測試用例代碼都是寫在以test打頭的實力方法里面。

另外,父類TestCase給我們提供了幾個方法【實例方法:setUP()、tearDown()、addCleanup(),類方法:setUpClass()、tearDownClass()、addClassCleanup()】,用來充當TestFixture。幫我們實現測試用例執行前環境的創建、執行后環境的清理工作。

當然,類TestCase給我們提供了大量的斷言方法【assert*()】,用例判斷測試用例的結果是否符合預期,這些斷言方法,我們可以在以test打頭的實例方法里調用。

最后TestCase給我們提供了運行case的實例方法【run()】,不過呢該方法我們不會直接調用,而是通過調用后文講的【Testrunner】的方法【run()】,再調用它。

(2)TestCase有關方法執行順序

(3)編寫一個測試用例文件

如下:

## test_case_demo.pyimport unittestclass TestStringMethods(unittest.TestCase):@classmethoddef setUpClass(cls):print('Before all test cases')def setUp(self):print('Before some test case')def tearDown(self):print('After some test case')@classmethoddef tearDownClass(cls):print('After all test cases')def test_upper(self):print(__name__ + '.' + 'test_uppern')self.assertEqual('foo'.upper(), 'FOO')def test_isupper(self):print(__name__ + '.' + 'test_isuppern')self.assertTrue('FOO'.isupper())self.assertFalse('Foo'.isupper())def test_split(self):print(__name__ + '.' + 'test_splitn')s = 'hello world'self.assertEqual(s.split(), ['hello', 'world'])# check that s.split fails when the separator is not a stringwith self.assertRaises(TypeError):s.split(2)

3 測試用例的執行

(1)TestSuite組件介紹

站坑

(2)TestLoader組件介紹

站坑

(3)TestResult組件介紹

(4)TestRunner組件介紹

顧名思義,TestRunner是用來運行我們的TestCase的,最終會產生一個結果,形成一個測試報告。

一般根據TestResult,我們的TestRunner會有幾種,比如基于文本的TextTestRunner,基于HTML的HtmlTestRunner()。

我們已unittest框架自帶的運行器TexTestRunner()為例,該class的構造方法,接受幾個參數,如下:

TexTestRunner(stream=None, descriptions=True, verbosity=1, failfast=False, buffer=False, resultclass=None, warnings=None, *, tb_locals=False)

最后我們可以調用該class的run()方法,運行testcase,當然testcase作為該方法的入參,如下:

run(test)

(5) 執行測試用例

從上面不難知曉,Testcase是Unittest框架的核心,整個框架都是圍繞Testcase展開的,這一節重點闡述運行Testcase的幾種方法。

(5.1)采用unittest框架自帶的入口文件完成

采用unittest框架自帶的入口文件,有兩種處理方式。

第一種方式,在testcase文件里面,最后幾行加入以下代碼:

if __name__ == '__main__':unittest.main()

然后執行以下命令即可。

python3 test_case_demo.py

這種方式的缺點是,一次只能執行一個testcase文件里面的case。

第二種方式,在testcase文件里面,無需額外的代碼。不過呢,在運行的時候,需要調用unittest框架自帶的入口文件。命令如下:

python3 -m unittest test_case_demo.py

采用該方式,可以通過添加【-v】對運行時的輸出信息詳細程度等做控制,當然還有其他參數,具體的可以查看源碼【unittest/__main__.py】。

(5.2)自己編寫入口文件

除了testcase文件以外,我們需要額外編寫一個入口文件,用來運行我們的testcase。上面一種方式的入口文件,其實是由unittest框架自身實現的。

入口文件樣例如下:

## entry_point.pyimport unittest from test_case import TestStringMethods# step 1: create test suite suite = unittest.TestSuite()# # step 2-1: add test case to suite # suite.addTest(TestStringMethods('test_upper')) # suite.addTest(TestStringMethods('test_isupper')) # suite.addTest(TestStringMethods('test_split'))# # step 2-2: add test cases to suite # cases = [TestStringMethods('test_upper'), TestStringMethods('test_isupper')] # suite.addTests(cases)# # step 2-3: # suite.addTests(unittest.TestLoader().loadTestsFromTestCase(TestStringMethods))# test 2-4: suite.addTests(unittest.TestLoader().loadTestsFromName('test_case.TestStringMethods'))# steo 2-5: discover = unittest.defaultTestLoader.discover(start_dir='./', pattern='test_case.py' )# step 3: create test runner runner = unittest.TextTestRunner()# step 4-1: start runner runner.run(suite)# step 4-2: start runner # runner.run(discover)

最后執行以下命令,運行testcase。

python3 entry_point.py

總結

以上是生活随笔為你收集整理的python 单元测试_Python系列之单元测试框架【unittest】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。