python測試用例學習一

 測試用例代碼:

import unittest
from test_fk_math import TestCrazyitModule
import test_hello

test_cases = "TestHello"


def whole_suite():
    # 創建測試加載器
    loader = unittest.TestLoader()
    # 創建測試包
    suite = unittest.TestSuite()
    # 從測試類中加載測試用例
    tests = loader.loadTestsFromTestCase(test_hello.TestHello)
    # 將測試用例添加到測試包中
    suite.addTests(tests)
    return suite


if __name__ == '__main__':
    # 創建測試運行器
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(whole_suite())

輸出到文件中:

if __name__ == '__main__':
    # 創建測試運行器
    '''
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(whole_suite())
    '''
    with open('fk_test_report.txt', 'a') as f:
        # 創建測試運行器(TestRunner),將測試報告輸出到文件中
        runner = unittest.TextTestRunner(verbosity=2, stream=f)
        runner.run(whole_suite())

  hello.py 

import unittest
from hello import *


class TestHello(unittest.TestCase):
    # 測試say_hello函數
    def test_say_hello(self):
        self.assertEqual(say_hello(), "hello world.")

    # 測試add函數
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)

 verbosity=1,2對比

運行測試

在編寫完測試用例之後,可以使用如下兩種方式來運行它們。

1.通過代碼調用測試用例。程序可以通過調用unittest.main()來運行當前源文件中

的所有測試用例。例如,在上面的測試用例中增加如下代碼.

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

2.使用unittest模塊運行測試用例。使用該模塊的語法格式如下:

python -m unittest 測試文件

        如果不指定文件,該命令將自動查找並運行當前目錄下的所有測試用例。因此,程序也可直接使用如下命令來運行所有測試用例 

3.result:

測試固件之setUp和tearDown: 

重寫setUpClass()和tearDown()類方法

import unittest
from hello import *


class TestHello(unittest.TestCase):
    # 測試say_hello函數
    def test_say_hello(self):
        self.assertEqual(say_hello(), "Hello world.")

    # 測試add函數
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)
    @classmethod
    def setUpClass(cls):
        print("\n==========執行setUpClass在類級別模擬初始化測試固件=============")
    @classmethod
    def tearDownClass(cls):
        print("\n==========執行setUpClass在類級別模擬銷燬測試固件=============")

測試結果:

(venv) E:\PythonProject\lesson\venv\com\lxy\crazyPy\16>python -m unittest -v fixture_test2.py

==========執行setUpClass在類級別模擬初始化測試固件=============
test_add (fixture_test2.TestHello) ... ok
test_say_hello (fixture_test2.TestHello) ... ok

==========執行setUpClass在類級別模擬銷燬測試固件=============

----------------------------------------------------------------------
Ran 2 tests in 0.002s

跳過測試

如果希望臨時跳過某個測試用例,則可以通過如下

兩種方式來實現

1.使用skipXxx裝飾器來跳過測試用例。

unittest一共提供了3個裝飾器,分別是@unittest.skip(reason),@unittest.skipif(condition.reason)和@unittest.skipUnless(condition,reason).其中skip代表無條件跳過,skipif代表condition爲True時跳過,skipUnless代表當condition爲False時跳過。

使用TestCase的skipTest()方法來跳過測試用例

方法1——@unittest.skip:

class TestHello(unittest.TestCase):
    # 測試say_hello函數
    def test_say_hello(self):
        self.assertEqual(say_hello(), "Hello world.")

    # 測試add函數
    @unittest.skip('臨時跳過test_add')
    def test_add(self):
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)

 

python -m unittest skip_test1.py
(venv) E:\PythonProject\lesson\venv\com\lxy\crazyPy\16>python -m unittest skip_test1.py
sF
======================================================================
FAIL: test_say_hello (skip_test1.TestHello)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "E:\PythonProject\lesson\venv\com\lxy\crazyPy\16\skip_test1.py", line 8, in test_say_hello
    self.assertEqual(say_hello(), "Hello World.")
AssertionError: 'Hello world.' != 'Hello World.'
- Hello world.
?       ^
+ Hello World.
?       ^


----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1, skipped=1)

 方法2——TestCase的skipTest(): 

class TestHello(unittest.TestCase):
    # 測試say_hello函數
    def test_say_hello(self):
        self.assertEqual(say_hello(), "Hello world.")
        # 測試add函數

    def test_add(self):
        self.skipTest("臨時跳過test_add")
        self.assertEqual(add(3, 4), 7)
        self.assertEqual(add(0, 4), 4)
        self.assertEqual(add(-3, 0), -3)
python -m  unittest -v skip_test2.py

 

(venv) E:\PythonProject\lesson\venv\com\lxy\crazyPy\16>python -m  unittest -v skip_test2.py
test_add (skip_test2.TestHello) ... skipped '臨時跳過test_add'
test_say_hello (skip_test2.TestHello) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK (skipped=1)

1.PyUnit是python自帶的單元測試框架,用於編寫和運行可重複的測試。PyUnit是xUnit體系的一個成員,xUnit是衆多測試框架的總稱,PyUnit主要用於進行白盒測試和迴歸測試。

2.PyUnit具有如下好處:

   2.1可以使測試代碼與產品代碼分離

   2.2針對某一個類的測試代碼只需要進行較少的改動,便可以應用於另一個類的測試

   2.3PyUnit開放代碼,可以進行二次開發,方便對PyUnit的擴展

3.PyUnit是一個簡單,易用的測試框架,其具有如下特徵:

   3.1使用斷言方法判斷期望值和實際值的差異,返回bool值

   3.2測試驅動設備可使用共用的初始化變量或實例

   3.3測試包結構便於組織和集成運行

4.測試注意事項

   4.1測試方法應該沒有返回值

   4.2測試方法不應該有任何參數

   4.3測試方法應以test_開頭

   4.4在測試某個方法時,如果實際測試要求達到某種覆蓋程度,那麼在編寫測試用例時必須傳入多組參數來進行測試,使得測試用例能達到指定的邏輯覆蓋

5.TextTestRunner,它是一個測試運行器,專門用於運行測試用例和測試包。其實前面使用的unittest.main()函數,同樣也是通過

創建TextTestRunner時還指定了verbosity=2,這樣可以生成更詳細的測試信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章