1、測試套件的作用
在我們實際工作,使用unittest
框架會有兩個問題:
- 我們知道測試用例的執行順序是根據測試用例名稱順序執行的,在不改變用例名稱的情況下,我們怎么來控制用例執行的順序。
- 一個測試文件,我們直接執行該文件即可,但如果有多個測試文件,怎么實現多個測試文件一起執行行。
要解決上面兩個問題,我們就要用到測試套件TestSuite
。
2、使用測試套件
(1)入門示例
1)用法:
unittest.TestSuite()
:創建測試套件。addTest()
和addTests()
方法是將測試用例添加到測試套件中。unittest.TextTextRunner()
:通過該類下面的run()
方法來運行suite所組裝的測試用例,suite測試套件為run()
方法參數。
例如:將test_Demo1
模塊下的TestDmeo
類下的test_case_01
測試用例添加到測試套件中。
# 1.創建測試套件
suite = unittest.TestSuite()
# 2.向測試套件中添加測試用例
# 模塊名.測試類名('測試用例名')
suite.addTest(test_Demo.TestDmeo('test_case_01'))
# 3.執行測試套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)
2)示例:
# 1 導入unittest
import unittest
# 2 創建測試類
class TestDmeo(unittest.TestCase):
# 3 編寫test case
def test_case_01(self):
"""測試用例1"""
print("執行測試用例1")
def test_case_02(self):
"""測試用例2"""
print("執行測試用例2")
def test_case_03(self):
"""測試用例3"""
print("執行測試用例3")
if __name__ == '__main__':
# 執行當前測試類中,以test開頭的測試用例
# unittest.main()
# 1. 創建測試套件
suite = unittest.TestSuite()
# 2. 向測試套件中添加測試用例
# 當前模塊中的測試用例,可省略模塊名(文件名)
suite.addTest(TestDmeo('test_case_02'))
suite.addTest(TestDmeo('test_case_03'))
suite.addTest(TestDmeo('test_case_01'))
# 3. 執行測試套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)
提示:向測試套件中添加測試用例的順序,就是測試用例執行的順序。(此時解決了第一個問題)
注意:
使用PyCharm執行上邊代碼,會按順序執行全部測試用例,這是PyCharm問題。
使用命令行直接執行該Python文件,沒有問題。
(2)根據不同的條件加載測試用例(了解)
提示:這種方式很少用,了解一下即可。推薦都用下面的方式(3)。
unittest.TestLoader()
:根據不同的條件加載測試用例,其中有幾個方法:
unittest.TestLoader().loadTestsFromName(測試用例名)
unittest.TestLoader().loadTestsFromNames(測試用例名的列表)
unittest.TestLoader().loadTestsFromTestCase(測試類名)
unittest.TestLoader().loadTestsFromModule(模塊名)
unittest.TestLoader().discover()
例如:將``test_demo2模塊下的
TestDmeo類下的
test_case_01`測試用例添加到測試套件中。
測試用例名格式:文件名+類名+方法名,一級一級的。
示例:
# 1 導入unittest
import unittest
# 2 創建測試類
class TestDmeo(unittest.TestCase):
# 3 編寫test case
def test_case_0001(self):
"""測試用例0001"""
print("執行測試用例0001")
def test_case_0002(self):
"""測試用例0002"""
print("執行測試用例0002")
def test_case_0003(self):
"""測試用例0003"""
print("執行測試用例0003")
if __name__ == '__main__':
# 1. 創建測試套件
suite = unittest.TestSuite()
# 2. 向測試套件中添加測試用例
"""
# 2.1 loadTestsFromName
# 提示:
name參數是傳入文件名,字符串格式
格式:模塊名.測試類名.測試用例名
"""
# suite_1 = unittest.TestLoader().loadTestsFromName('test_demo2.TestDmeo.test_case_01')
"""
# 2.2 loadTestsFromNames
參數是一個列表,列表中的元素格式同上
"""
# suite_1 = unittest.TestLoader().loadTestsFromNames(
# ['test_demo2.TestDmeo.test_case_01','test_demo2.TestDmeo.test_case_02'])
"""
# 2.3 loadTestsFromTestCase
參數一個測試類名
當前模塊直接傳如測試類名稱即可
"""
suite_1 = unittest.TestLoader().loadTestsFromTestCase(TestDmeo)
# 加入套件
suite.addTest(suite_1)
# 3. 執行測試套件中的用例
runner = unittest.TextTestRunner()
runner.run(suite)
(3)常用方式(推薦)
unittest.defaultTestLoader()
:通過該類下面的discover()
方法可自動根據測試目錄test_dir
匹配查找測試用例文件,如test*.py
,並將查找到的測試用例組裝到測試套件中。
1)簡單示例:
discover=unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
2)測試套件示例:
- 創建
test_case
包用來存放測試用例。 - 以上面兩個測試類做例子,把
test_demo1
和test_demo2
兩個測試用例類文件放入test_case
包中。 - 編寫調用用例腳本
run_case.py
文件執行多個測試用例。
3)說明:
test_demo1
和test_demo2
兩個文件,就是上面(1)(2)的示例。
下面是run_case.py
文件內容,需求是同時執行test_demo1
和test_demo2
兩個文件中的測試用例。
"""
1.學習目標
run_case.py必須會寫
2.操作步驟
2.1 明確測試用例存放路徑
2.2 將要執行的用例添加到測試套件中
2.3 執行測試套件中的用例
3.注意事項
1.run_case.py文件需要放置在項目根目錄下
2.所有測試用例都寫在test_caset文件夾中
3.編寫用例的py文件需要以test開頭
"""
# 1.導入unittest
import unittest
# 2.獲取測試用例存放路徑---測試用例存放文件夾
case_path = "./test_case"
# 3.添加用例到測試套件中
"""
# 如果只添加一個文件,pattern就直接填寫文件名
start_dir, 指定case目錄
pattern='test*.py', 匹配文件規則,# 選擇文件夾中的寫test_開頭的py文件
"""
discover = unittest.defaultTestLoader.discover(case_path, pattern="test*.py")
# 4.執行測試套件中的用例
runner = unittest.TextTestRunner()
runner.run(discover)