1. 程式人生 > 其它 >1-UnitTest框架

1-UnitTest框架

1-什麼是UnitTest框架

概念:UnitTest框架是專門用來進行執行程式碼測試的框架

2-為什麼要使用UnitTest框架?

  • 能夠組織多個用例去執行
  • 提供豐富的斷言方法
  • 提供豐富的日誌與測試結果

3-UnitTest核心要素

  1. TestCase
  2. TestSuite
  3. TextTestRunner
  4. Fixture

3.1-TestCase

點選檢視程式碼
說明:(翻譯:測試用例)一個TestCase就是一條測試用例;
使用:
    1. 導包:import unittest             --> 匯入unitest框架
    2. 繼承:unittest.TestCase             --> 新建測試類繼承unittest.TestCase

提示:
    1). 測試用例:在自動化測試中,一條用例就是一個完整的測試流程;                
    2). 測試方法名稱命名必須以test開頭;
       (原因:unittest.TestCase類批量執行的方法是搜尋執行test開頭的方法)

3.2-TestSuite (翻譯:測試套件)

點選檢視程式碼
說明:多條測試用例集合在一起,就是一個TestSuite;
使用:
    1. 例項化:     suite = unittest.TestSuite()           ——>(suite:為TestSuite例項化的名稱)          

    2. 新增用例:suite.addTest(ClassName("MethodName"))    ——>(ClassName:為類名;MethodName:為方法名)         
                 

    3. 新增擴充套件:suite.addTest(unittest.makeSuite(ClassName))
                 (搜尋指定ClassName內test開頭的方法並新增到測試套件中)

提示:
    1). 一條測試用例(.py)內,多個方法也可以使用測試套件
    2). TestSuite需要配合TextTestRunner才能被執行

3.3-TextTestRunner (翻譯:執行測試用例)

點選檢視程式碼
說明:是用來執行測試用例套件
使用:
    1. 例項化: runner=unittest.TextTestRunner()    ——>(runner:TextTestRunner例項化名稱)

    2. 執行:    runner.run(suite)                  ——>(suite:為測試套件名稱)

3.4-Fixture

點選檢視程式碼
說明:是一個概述,對一個測試用例環境的搭建和銷燬就是一個Fixture;

使用:
    1. 初始化(搭建):def setUp(self)            --> 首先執行
       (setUp:此方法繼承於unittest.TestCase)   
       
    2. 結束(銷燬):    def tearDown(self)        --> 最後執行
       (tearDown:此方法繼承於unittest.TestCase)
       
提示:
    1. 必須繼承unittest.TestCase類,setUp、tearDown才是一個Fixture;
    2. setUp:一般做初始化工作,比如:例項化瀏覽器、瀏覽器最大化、隱式等待設定
    3. tearDown:一般做結束工作,比如:退出登入、關閉瀏覽器
    4. 如果一個測試類有多個test開頭方法,則每個方法執行之前都會執行setUp、結束時執行tearDown

4-defaultTestLoader

點選檢視程式碼
說明: 
    使用unittest.defaultTestLoader()類,通過該類下面的discover()方法自動搜尋指定目錄下指定開頭
    的.py檔案,並將查詢到的測試用例組裝到測試套件;

用法:
    test_dir = '../'
    disconver = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
    ——>(test_dir為要指定的目錄 ./為當前目錄;pattern:為查詢的.py檔案的格式 ;test:代表檔案開頭是test,*:萬用字元,匹配所有)
    
執行:
    runner=unittest.TextTestRunner()
    runner.run(disconver)

5-defaultTestLoader與TestSuite區別

點選檢視程式碼
1. TestSuite可以新增TestCase中所有test開頭的方法和新增指定的test開頭方法;
2. defaultTestLoader搜尋指定目錄下指定開頭.py檔案,並新增TestCase內所有test開頭的方法,不能指定新增方法;

提示:defaultTestLoader屬於TestSuite另一種實現方式;

使用案例

結構目錄介紹

unittest_07.py

點選檢視程式碼
import unittest


def add(a, b):
    return a + b


class TestCase01(unittest.TestCase):
    def testcase_01(self):
        print('testcase_01')
        print('1 + 1 =', add(1, 1))

    def testcase_02(self):
        print('testcase_02')
        print('6 + 8 =', add(6, 8))

unnittest_08.py

點選檢視程式碼
import unittest

from untest_07 import TestCase01

suite = unittest.TestSuite()
# 以測試用例類裡的每一種方法為單位新增
suite.addTest(TestCase01("testcase_01"))
suite.addTest(TestCase01("testcase_02"))

runner = unittest.TextTestRunner()
runner.run(suite)



-----------------------------------------執行結果---------------------------------------------------------------------------------
C:\Users\XXX\XXX\Scripts\python.exe D:/XXX/自動化測試/案例演示/unittest_08.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
testcase_01
1 + 1 = 2
testcase_02
6 + 8 = 14

Process finished with exit code 0

unnittest_08.py

點選檢視程式碼
import unittest

from untest_07 import TestCase01

suite = unittest.TestSuite()

# 以測試用例類為單位新增
suite.addTest(unittest.makeSuite(TestCase01))

runner = unittest.TextTestRunner()
runner.run(suite)


-------------------------執行結果---------------------------------------------------

C:\Users\XXX\XXX\Scripts\python.exe D:/XXX/自動化測試/案例演示/unittest_08.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
testcase_01
1 + 1 = 2
testcase_02
6 + 8 = 14

Process finished with exit code 0

defaultTestLoader方法案例

test01.py

點選檢視程式碼
import unittest


def add(a, b):
    return a + b


class TestCase01(unittest.TestCase):
    def testcase_01(self):
        print('test01.py裡面的testcase_01方法')
        print('1 + 1 =', add(1, 1))

    def testcase_02(self):
        print('test01.py裡面的testcase_02方法')
        print('6 + 8 =', add(6, 8))

test02.py

點選檢視程式碼
import unittest

def add(a, b):
    return a + b

class TestCase01(unittest.TestCase):
    def testcase_01(self):
        print('test02.py裡面的testcase_01方法')
        print('3 + 1 =', add(3, 1))

    def testcase_02(self):
        print('test02.py裡面的testcase_02方法')
        print('10 + 7 =', add(10, 7))


demo_1.py

點選檢視程式碼
import unittest

discover = unittest.defaultTestLoader.discover('./cases', pattern="test*.py")
runner = unittest.TextTestRunner()
runner.run(discover)



-------------------執行結果-----------------------------

C:\Users\XXX\XXX\Scripts\python.exe D:/XXX/自動化測試/demo_09.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s

OK
test01.py裡面的testcase_01方法
1 + 1 = 2
test01.py裡面的testcase_02方法
6 + 8 = 14
test02.py裡面的testcase_01方法
3 + 1 = 4
test02.py裡面的testcase_02方法
10 + 7 = 17

Process finished with exit code 0