1-UnitTest框架
阿新 • • 發佈:2021-06-22
1-什麼是UnitTest框架
概念:UnitTest框架是專門用來進行執行程式碼測試的框架
2-為什麼要使用UnitTest框架?
- 能夠組織多個用例去執行
- 提供豐富的斷言方法
- 提供豐富的日誌與測試結果
3-UnitTest核心要素
- TestCase
- TestSuite
- TextTestRunner
- 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