一、简介:
suite 测试套件: 相当于测试用例的集合
runner 执行器:相当于 测试执行器,用于去执行测试用例(套件)
二、直接上例子
1、执行某个测试类的普通用法
在一个模块中,在主函数 中直接执行执行,执行的是这个测试类下面的所有测试方法
import unittest # 测试类继承unittest.TestCase class MytestCase1(unittest.TestCase): # 测试方法,以test开头 def test_1(self): print('test1-1') b = 0 self.assertTrue(b) def test_2(self): print('test1-2') b = 1 self.assertTrue(b) if __name__ == '__main__': unittest.main()
2、执行测试类方法除了上面 通过主函数去执行,还可以通过,suite 套件去执行,
测试类1: demo1.py
import unittest # 测试类继承unittest.TestCase class MytestCase1(unittest.TestCase): def test_1(self): print('test1-1') b = 0 self.assertTrue(b) def test_2(self): print('test1-2') b = 1 self.assertTrue(b)
测试类2 demo2.py
import unittest # 测试类继承unittest.TestCase class MytestCase2(unittest.TestCase): def test_1(self): print('test2-1') b = 1 self.assertTrue(b) def test_2(self): print('test2-2') b = 0 self.assertTrue(b) def test_3(self): print('test2-3') b = 1 self.assertTrue(b) def test_4(self): print('test2-4') b = 0 self.assertTrue(b)
通过测试套件 指定执行某个测试类下的某一个测试方法(一次添加一个):
suit_demo1.py
# ''' # 通过测试套件suite 的方式指定 具体执行哪些类方法 # 注意测试套件必须,必须编写在单独的某块中,通过在这个模块中导入测试类和测试方法,再去执行 # ''' import unittest from demo1 import MytestCase1 from demo2 import MytestCase2 # 实例化测试套件 suite = unittest.TestSuite() # 指定执行某个模块中的测试方法,单个单个添加 suite.addTest(MytestCase1('test_1')) suite.addTest(MytestCase2('test_1')) suite.addTest(MytestCase2('test_2')) # 实例化执行器 runner = unittest.TextTestRunner() runner.run(suite)
通过测试套件 指定执行某个测试类下的某些2测试方法(一次添加多个):
suit_demo2.py
''' 将用例定义成一个 list传入测试套件去执行 注意: list tuple 是有序的 set dict 是无序的 ''' import unittest from demo1 import MytestCase1 from demo2 import MytestCase2 # 实例化测试套件 suite = unittest.TestSuite() ''' 测试类的测试方法作为参数''' # 指定执行某个模块中的测试方法,addTests 添加多个 suite.addTests([MytestCase1('test_1'),MytestCase1('test_2'),MytestCase2('test_3'),MytestCase2('test_4')]) # 实例化执行器 runner = unittest.TextTestRunner() runner.run(suite)
简化代码,将测试方法封装到一个变量中,便于阅读:
''' 将用例定义成一个 list变量 传入测试套件去执行 注意: list tuple 是有序的 set dict 是无序的 ''' import unittest from demo1 import MytestCase1 from demo2 import MytestCase2 # 实例化测试套件 suite = unittest.TestSuite() # 将用例定义 成一个list变量,使代码更加清晰 # 在python 中 list 和tuple 是有序的, # case = [ # MytestCase1('test_1'), # MytestCase1('test_2'), # MytestCase2('test_3'), # MytestCase2('test_4') # ] # 在python 中 集合 和dict 是无序的 case1 = { MytestCase1('test_1'), MytestCase1('test_2'), MytestCase2('test_3'), MytestCase2('test_4') } # 指定执行某个模块中的测试方法,addTests 添加多个 suite.addTests(case1) # 实例化执行器 runner = unittest.TextTestRunner() runner.run(suite)
执行某个测试类下的所有测试方法 装载器--loadTestsFromTestCase
''' 使用装载器,指定执行某个测试类下的所有测试方法 ''' import unittest from demo1 import MytestCase1 from demo2 import MytestCase2 # 实例化测试套件 suite = unittest.TestSuite() '''通过装载器 ,类名作为参数,执行这个测试类的所有测试方法 ''' # 传入某个模块中的测试类,执行这个测试类的所有类方法 suite.addTests(unittest.TestLoader().loadTestsFromTestCase(MytestCase1)) # 实例化执行器 runner = unittest.TextTestRunner() runner.run(suite)
执行某个测试模块下的某个测试类方法 装载器 --loadTestsFromName() --loadTestsFromName()
''' 使用装载器,指定执行某个模块下的测试类的测试方法 ''' import unittest from unittestsuite_demo.demo1 import MytestCase1 from unittestsuite_demo.demo2 import MytestCase2 # 实例化测试套件 suite = unittest.TestSuite() # 传入模块.类名,执行这个测试类的所有类方法-单数 suite.addTests(unittest.TestLoader().loadTestsFromName('demo2.MytestCase2')) # 传入模块.类名,执行这个测试类的所有类方法-复数 suite.addTests(unittest.TestLoader().loadTestsFromNames(['demo2.MytestCase2','demo1.MytestCase1'])) # 实例化执行器 runner = unittest.TextTestRunner() runner.run(suite)
执行某个模块下的所有测试类方法 装载器--loadTestsFromModule()
''' 使用装载器,指定执行某个模块下的所有测试类方法''' import unittest import demo1 # 实例化测试套件 suite = unittest.TestSuite() '''通过装载器 ,模块作为参数,执行这个模块下的所有测试类方法 ''' #传入模块,直接执行这个模块下的所有测试类的测试方法 suite.addTests(unittest.TestLoader().loadTestsFromModule(demo1)) # 实例化执行器 runner = unittest.TextTestRunner() runner.run(suite)
执行指定目录下 去执行某些模块 (注意模块名字命名符合一定的规则)
''' 通过装载器指定执行某个文件夹下的所有模块(.py文件) ''' import unittest,os # 定义当前模块所在目录,用于后面从当前模块所处目录下去查找模块 # module_path = os.getcwd() module_path='./' discover= unittest.defaultTestLoader.discover(start_dir=module_path,pattern='demo*.py') # 实例化执行器 runner = unittest.TextTestRunner() runner.run(discover)