四、TestSuite-测试套件
首先新建一个UnitTest类,编写测试用例,文件名为unit_for_testA.py,代码如下:
# 导包 import unittest class UnitForTestA(unittest.TestCase): # 前置条件 def setUp(self) -> None: print('this is AsetUp') # 后置条件 def tearDown(self) -> None: print('this is AtearDown') #定义测试用例 def test_1(self): print('this is Atest1!!!') def test_2(self): print('this is Aest2!!!') def test_3(self): print('this is Atest3!!!')# 导包 import unittest class UnitForTestA(unittest.TestCase): # 前置条件 def setUp(self) -> None: print('this is AsetUp') # 后置条件 def tearDown(self) -> None: print('this is AtearDown') # 定义测试用例 def test_1(self): print('this is Atest1!!!') def test_2(self): print('this is Aest2!!!') def test_3(self): print('this is Atest3!!!') |
再新建一个类存放套件,文件名为TestSuite_demo.py,直接在UnitTest类中运行无法生效。
下面创建一个测试套件(unittest.TestSuite()),并分别用五种不同的方法给该测试套件添加测试用例。
(1)添加测试用例的第一种方法--单个添加(addTest)
# 导入unittest的包 import unittest # 导入存放测试用例的类 from unittest_demo.unit_for_testA import UnitForTestA # 创建一个测试套件 suite = unittest.TestSuite() # 添加测试用例的第一种方法 suite.addTest(UnitForTestA('test_1')) suite.addTest(UnitForTestA('test_2')) suite.addTest(UnitForTestA('test_3')) # 基于Ruunner来运行测试套件 runner = unittest.TextTestRunner() runner.run(suite) |
(2)添加测试用例的第二种方法--批量添加(addTests)
# 导入unittest的包 import unittest # 导入存放测试用例的类 from unittest_demo.unit_for_testA import UnitForTestA # 创建一个测试套件 suite = unittest.TestSuite() # 添加测试用例的第二种方法 cases = [UnitForTestA('test_1'), UnitForTestA('test_2'), UnitForTestA('test_3')] suite.addTests(cases) # 基于Ruunner来运行测试套件 runner = unittest.TextTestRunner() runner.run(suite) |
(3)添加测试用例的第三种方法--根据路径下的文件名匹配(defaultTestLoader.discover)
该添加测试用例的方法也为批量执行,代码中指定的目录下,如果文件名称满足筛选条件,则所有满足条件的文件中的所有测试用例都会被执行,为了看清效果,我们再建一个UnitTest类,编写测试用例,文件名为unit_for_testB.py,代码如下:
# 导包 import unittest class UnitForTestB(unittest.TestCase): # 前置条件 def setUp(self) -> None: print('this is BsetUp') # 后置条件 def tearDown(self) -> None: print('this is BtearDown') # 定义测试用例 def test_1(self): print('this is Btest1!!!') def test_2(self): print('this is Best2!!!') def test_3(self): print('this is Btest3!!!') |
目录结构如图:
此时在测试套件类(TestSuite_demo.py)中,根据路径下的文件名添加测试用例的代码为:
# 导入unittest的包 import unittest # 创建一个测试套件 suite = unittest.TestSuite() # 添加测试用例的第三种方法 test_dir = './' # 指定的路径下所有与文件名相匹配的文件下的测试用例(批量执行) discover = unittest.defaultTestLoader.discover(start_dir=test_dir, pattern='unit_for_test*.py') # 基于Ruunner来运行测试套件 runner = unittest.TextTestRunner() runner.run(discover) |
运行结果如下图,由图可见,在当前目录下的两个文件中的用例都执行了。
start_dir:需要执行的文件路径;
pattern:需要匹配的文件名称,其中unit_for_test*.py匹配所有以unit_for_test开头的python文件。
(4)添加测试用例的第四种方法--根据类名去读取(单个类)(TestLoader().loadTestsFromTestCase())
# 导入unittest的包 import unittest # 导入存放测试用例的类 from unittest_demo.unit_for_testA import UnitForTestA # 创建一个测试套件 suite = unittest.TestSuite() # 添加测试用例的第四种方法 suite.addTests(unittest.TestLoader().loadTestsFromTestCase(UnitForTestA)) # 基于Ruunner来运行测试套件 runner = unittest.TextTestRunner() runner.run(suite) |
(5)添加测试用例的第五种方法--根据名称去添加(TestLoader().loadTestsFromName())
# 导入unittest的包 import unittest # 创建一个测试套件 suite = unittest.TestSuite() # 添加测试用例的第五种方法 suite.addTests(unittest.TestLoader().loadTestsFromName('unit_for_testA.UnitForTestA')) # 基于Ruunner来运行测试套件 runner = unittest.TextTestRunner() runner.run(suite) |
五、跳过用例
在执行用例的时候,不是每个用例都必须跑一次,unittest提供了跳过一些跳过用例不执行的方法,在用例前加装饰器,具体有:
(1)@unittest.skip:直接跳过本条用例不执行;
(2)@unittest.skipUnless(1 > 2, '1>2是假的'):当条件为假时,跳过该用例不执行;
(3)@unittest.skipIf(1 < 2, '1<2是真的'):当条件为真时,跳过该用例不执行。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理