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)