目錄
- 介紹
- 入門案例
- 通過TestSuite 執行指定測試案例
- 通過TestSuite 執行指定測試類的全部test開頭的方法
- TestLoader 的使用
- 參數化 - DDT
- 參數化 - parameterized
- skip
- HTMLTestReport插件生成報告
python 自帶的測試架構,使用時不需要進行導包
組成:
- TestFixture
測試之前或之後需要做的一些操作,常用的有setUp,tearDown,setUpClass,tearDownClass,setUpModel,tearDownModer
Fixture 注意事項:
- 使用Fixture結構代碼(定義了前後置方法)時,務必保證至少有一個測試方法
- 根據需求隻調用部分 Fixture 方法是允許的, 不一定非得成對實作
- TestCase
Unittest 中執行測試的最小單元,測試用例的方法必須以test開頭,并且執行順序依照的是方法名的ASCII值排序
- TestSuite
測試套件就是一組測試用例,作用是将多個測試用例放在一起,執行一個測試套件就可以将這些測試用例全部執行
- TestRunner
測試運作器用來執行測試用例,并傳回測試用例的執行結果
- TestLoader
加載TestCase 到TestSuit中
import unittest
"""
目标:
執行目前測試類的全部test開頭的方法
1.測試類必須繼承unittest.TestCase
2.測試方法必須以test開頭
3.測試類的名字建議以Test開頭或者TestCase結尾
4.子產品名預設以test開頭
"""
class TestDemo(unittest.TestCase):
def setUp(self) -> None:
print("setUp")
def tearDown(self) -> None:
print("tearDown")
def test_method01(self):
self.assertEqual("張飛", "張飛")
if __name__ == '__main__':
unittest.main()
"""
目标:通過TestSuite 運作指定的測試案例
"""
import unittest
from test01 import TestDemo
from test02 import TestDemo2
# 1.獲得TestSuite對象
suite = unittest.TestSuite()
# 2.添加測試方法
# 注意格式:suite.addTest(類名("方法名"))
suite.addTest(TestDemo("test_method01"))
suite.addTest(TestDemo2("test_method01"))
# 3.執行測試用例
# 3.1 獲得TextTestRunner對象
runner = unittest.TextTestRunner()
# 3.2執行run方法
runner.run(suite)
"""
目标:通過TestSuite
運作指定測試類下的全部test開頭的方法
"""
# 1.導包
import unittest
from test02 import TestDemo2
# 2.獲得TestSuite對象
suite = unittest.TestSuite()
# 3.調用addTest方法指定測試類
"""
unittest.makeSuite(testCaseClass, prefix='test')
如果不指定字首, 預設是test開頭的方法
"""
suite.addTest(unittest.makeSuite(TestDemo2, prefix="method"))
# 4.執行個體化TextTestRunner
runner = unittest.TextTestRunner()
runner.run(suite)
"""
目标:
掌握TestLoader的使用方法,通過TestLoader()運作
指定路徑下,以某種字首開頭的.py檔案中的test開頭的方法
"""
# 1.導包
import unittest
# 2.通過TestLoader獲得TestSuite對象
"""
unittest.TestLoader() 也可以使用unittest.defaultTestLoader代
注意:
def discover(self, start_dir, pattern='test*.py')
start_dir: 搜尋的路徑
pattern: 指定測試檔案的字首
"""
suite = unittest.TestLoader().discover(".")
# 3.執行個體化TextTestRunner對象
runner = unittest.TextTestRunner()
# 4.執行run方法
runner.run(suite)
"""
目标:掌握unittest + ddt 實作參數化
DDT: Data Driven Tests,即資料驅動測試,為第三方插件第一次使用需要在安裝
"""
import unittest
import ddt
def my_sum(a, b):
return a + b
@ddt.ddt
class TestSum(unittest.TestCase):
"""
注意:
1.測試類需要被@ddt.ddt 修飾
2.ddt.data(): 可以傳遞清單和元組,一個清單或元組是一個測試用例
3.ddt.unpack: 對測試資料進行解包
"""
@ddt.data((1, 2, 3), (3, 4, 7))
@ddt.unpack
def test_my_sum(self, a, b, expect):
result = my_sum(a, b)
self.assertEqual(result, expect)
"""
目标:
掌握unittest 參數化第三方插件parameterized的基本使用,第一次使用需要安裝插件
"""
import unittest
from parameterized import parameterized
def my_sum(a, b):
return a + b
class SumTestCase(unittest.TestCase):
"""
注意:
1.parameterized.expand(),需要傳遞清單
2.清單中包含元組,一個元組就是一個測試用例
"""
@parameterized.expand([(1, 2, 3), (1, 5, 6)])
def test_my_sum(self, a, b, expect):
result = my_sum(a, b)
self.assertEqual(result, expect)
"""
@unittest.skip()
@unittest.skipif(condition, reason)
注意:
這兩個修飾符可以修飾類和方法
當修飾類時,将忽略類的所有測試方法
"""
import unittest
version = 25
#@unittest.skip
@unittest.skipIf(version > 20, "跳過此案例")
class TestDemo2(unittest.TestCase):
# @unittest.skip
def test_method01(self):
self.assertEqual("關羽", "關羽")
# @unittest.skipIf(version > 20, "跳過此案例")
def test_method02(self):
self.assertEqual("曹操", "曹操")
"""
目标: 掌握HTMLTestReport 的基本使用
report = HTMLTestReport(file_path, [title], [description])
file_path: 報告生成的路徑
title: 可選參數,測試報告的标題
description: 可選參數,為報告描述資訊
"""
import unittest
from htmltestreport import HTMLTestReport
suite = unittest.TestLoader().discover('../case', pattern='test*.py')
# 生成報告的路徑
report_path = '../report/report.html'
# 生成報告
report = HTMLTestReport(report_path, title='測試報告', description='v1.0')
report.run(suite)
報告資訊:

本文來自部落格園,作者:abcbca,轉載請注明原文連結:https://www.cnblogs.com/czzz/p/15754942.html