一, 摘要
前边的文章我们看到执行测试用例的是通过调用 unittest.mian() 函数, 它会将模块的测试用例收集起来并执行, 然而当我们的测试用例增多了以后, 这样的执行非常不灵活而且没有效率, 我们更愿意看到自由组合的一组用例, 只执行这组用例的方式, unittest.TestSuite 能够满足我们这个需求, 笔者将一 random 类作为被测试类来详细展示 unittest.TestSuite
二, 代码示例
以前的执行方式
- # encoding = utf-8
- import random
- import unittest
- class TestRandomFunction(unittest.TestCase):
- def setUp(self):
- self.str = "abcdef!@#$%"
- def tearDown(self):
- pass
- def test_randomchoice(self):
- var = random.choice(self.str)
- self.assertTrue(var in self.str)
- print(var)
- def test_randomsample(self):
- with self.assertRaises(ValueError):
- random.sample(self.str, 100)
- for var in random.sample(self.str, 6):
- self.assertTrue(var in self.str)
- print(var)
- class TestRandomShuffleFunction(unittest.TestCase):
- def setUp(self):
- self.list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13]
- def tearDown(self):
- pass
- def test_randomshuffle(self):
- random.shuffle(self.list)
- print(self.list)
- self.list.sort()
- self.assertEqual(self.list, [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13])
- if __name__ == '__main__':
- unittest.main()
方式一 使用 unittest.TestLoader, 它可以通过传给他的参数获取测试用例的测试方法, 然后再组合成 TestSuite, 最后在将 TestSuite 传递给 TestRunner 完成我们所期望的执行组合
- # encoding = utf-8
- import random
- import unittest
- class TestRandomFunction(unittest.TestCase):
- def setUp(self):
- self.str = "abcdef!@#$%"
- def tearDown(self):
- pass
- def test_randomchoice(self):
- var = random.choice(self.str)
- self.assertTrue(var in self.str)
- print(var)
- def test_randomsample(self):
- with self.assertRaises(ValueError):
- random.sample(self.str, 100)
- for var in random.sample(self.str, 6):
- self.assertTrue(var in self.str)
- print(var)
- class TestRandomShuffleFunction(unittest.TestCase):
- def setUp(self):
- self.list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13]
- def tearDown(self):
- pass
- def test_randomshuffle(self):
- random.shuffle(self.list)
- print(self.list)
- self.list.sort()
- self.assertEqual(self.list, [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13])
- if __name__ == '__main__':
- # unittest.main()
- testcase1 = unittest.TestLoader().loadTestsFromTestCase(TestRandomFunction)
- testcase2 = unittest.TestLoader().loadTestsFromTestCase(TestRandomShuffleFunction)
- suite = unittest.TestSuite([testcase1, testcase2])
- unittest.TextTestRunner(verbosity=2).run(suite)
方式二 另创建一个. py 文件, 定义 suite 方法, 使用 unittest.TestSuite().addTest(测试类 (测试方法))
- # encoding = utf-8
- import unittest
- from unittest3.TestSuiteDemo2 import *
- def suite():
- suite = unittest.TestSuite()
- suite.addTest(TestRandomFunction("test_randomchoice"))
- suite.addTest(TestRandomShuffleFunction("test_randomshuffle"))
- return suite
- if __name__ == '__main__':
- runner = unittest.TextTestRunner()
- runner.run(suite())
方式三 另创建一个. py 文件, 使用 unittest.TestLoader().discover("路径","匹配文件名")
- # encoding = utf-8
- import unittest
- if __name__ == '__main__':
- suite = unittest.TestLoader().discover('.', pattern='TestSuiteDemo1.py')
- unittest.TextTestRunner(verbosity=2).run(suite)
来源: https://www.cnblogs.com/davieyang/p/10162469.html