当写好一个测试类后,调用unittest.main()将执行所有的测试用例,为了只执行需要的用例,可以使用TestSuite套件,将指定的单条/多条用例加进来一起执行。
关于TestSuite.addTest()加入用例的方法或者说写法非常的多,这里做一个小总结。
先是简单的测试类,只包含了两个测试用例供一会加载
没有加断言,所以在pycharm下不能以test的方式跑
import unittest
class Unittest_addTest(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass
def test_one(self):
print('-----one-----')
def test_two(self):
print('-----two-----')
if __name__ == '__main__':
# 执行全部用例
unittest.main()
1、TestSuite与TestResult结合
我个人不太喜欢这种,感觉不是很清晰,TestResult是存测试结果的,TestSuite还提供了需要TestResult参数的run方法。总之正常执行是没有问题的
suite = unittest.TestSuite()
# 格式:类命(用例名)
suite.addTest(Unittest_addTest('test_one'))
suite.addTest(Unittest_addTest('test_two'))
result = unittest.TestResult()
suite.run(result)
运行结果:
2、TestSuite与TextTestRunner运行器结合
这个就比前一个方法清晰些了,一眼就能看出在跑套件中的用例
runner = unittest.TextTestRunner()
suite = unittest.TestSuite()
# 格式:类命(用例名)
suite.addTest(Unittest_addTest('test_one'))
suite.addTest(Unittest_addTest('test_two'))
result = runner.run(suite)
也可以写成这种形式:(不太推荐,每个都进行实例化比较麻烦
#用例加载
case1 = Unittest_addTest("test_one")
case2 = Unittest_addTest("test_two")
suite.addTest(case1)
suite.addTest(case2)
3、TestSuite与TextTestRunner、Testloader加载器结合
基本框架如下:
suite = unittest.TestSuite()
loader = unittest.TestLoader()
runner = unittest.TextTestRunner()
#中间加载指定用例
runner.run(suite)
①通过方法名来加载
# 模块名.类名.方法名
suite.addTest(loader.loadTestsFromName("UnitTest_addTests.Unittest_addTest.test_one"))
前面用的方法都可以细到类中的某条用例,下面是以模块/类名的方式一次性加载各个测试类
②通过测试用例类进行加载
suite.addTest(loader.loadTestsFromTestCase(Unittest_addTest))
③通过路径加载
path指定用例所在的目录
pattern指定文件名,可以按名字前缀等查找,比如
UnitTest*.py, 就是加入所有开头能与UnitTest匹配上的py文件中的测试用例
path = os.path.dirname(os.path.abspath(__file__))
suite.addTest(loader.discover(path, pattern='UnitTest_addTests.py'))
深入的原理在以后有时间的情况下会继续补充。