智一面的面试题提供python的测试题
使用地址:http://www.gtalent.cn/exam/interview?token=99ef9b1b81c34b4e0514325e9bd3be54

TestSuite用法
3.1 使用TestSuite进行测试
使用TestSuite进行测试的步骤有三步:使用unittest.TestSuite()生成一个套件实例
使用TestSuite的 addTest() 或 addTests() 把测试用例加载到套件中。
其中前者每次只加载一个测试用例,后者可一次加载多个测试用例。
调用unittest.main() 方法选择对应套件执行测试。
除了使用unittest.main()方法执行之外,还可以使用 run() 方法。具体请看 3.2、3.3 小节。
3.1.1 使用unittest.main()方法执行套件

import unittest

class StudyUnittest(unittest.TestCase):

    def test01_case(self):
        print("test01_case")

    def test02_case(self):
        print("test02_case")

    def test03_case(self):
        print("test03_case")

if __name__ == '__main__':
    suite = unittest.TestSuite()     # 生成一个套件
    suite.addTest(StudyUnittest("test01_case"))  # 加载测试用例到套件
    suite.addTest(StudyUnittest("test02_case"))  # 加载测试用例到套件
    unittest.main(defaultTest='suite')     # 选择默认执行的测试用例为 suilt 套件



执行结果:

在这里插入图片描述
3.1.2 使用TextTestRunner().run()方法执行套件
除此之外,我们也可以使用测试运行器运行该套件。

if __name__ == '__main__':
    suite= unittest.TestSuite()     # 生成一个套件
    suite.addTest(StudyUnittest("test01_case"))  # 加载测试用例到套件
    suite.addTest(StudyUnittest("test02_case"))  # 加载测试用例到套件
    # unittest.main(defaultTest='suilt')     # 选择默认执行的测试用例为 suilt 套件
    # 使用运行器运行该套件
    unittest.TextTestRunner().run(suite)


因为调用 unittest.main() 方法,最终都将转为调用 unittest.TextTestRunner() 方法。

其中 unittest.main() 具体的步骤为:
编写TestCase,由TestLoader加载TestCase到TestSuite
然后由TextTestRunner来运行TestSuite
最后将运行的结果保存在TextTestResult中。
而在 TextTextRunner 中实际上调用的 run() 方法执行的。

由此,我们可以使用函数定义我们的测试套件,通过以下方式进行测试:

# 定义测试套件生成函数
def suite():
    suite = unittest.TestSuite()
    suite.addTest(StudyUnittest("test01_case"))  # 加载测试用例到套件
    suite.addTest(StudyUnittest("test02_case"))  # 加载测试用例到套件
    return suite

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(suite())



3.1.3 使用TestSuite的run()方法执行套件


在pytthon 开发文档中显示 unittest.TestSuite() 中也存在一个 run() 方法。

在这里插入图片描述

unittest.TestSuite().run()运行与此套件关联的测试,将结果收集到作为结果传递的测试结果对象中。 请注意,与TestCase.run()不同,TestSuite.run()要求传递结果对象。
同时我们可以查看TestCase类中,也有一个 run() 方法。


参考: unittest之TestSuite类详解 这篇文章
测试套件(TestSuite)的执行是通过它的run方法,而它的run方法又会去调用每一个用例(TestCase)的run方法。这样就实现了用例的执行
而我们之前提到的,unittest.main()的执行最终是调用了TextTestRunner.run()方法,而TextTestRunner.run()方法又根据每个suite去调用TestSuite.run()或TestCase.run() 去执行测试的。

if __name__ == '__main__':
    #实例化一个TextTestResult类
    result = unittest.TextTestResult(sys.stdout,'test result',1)
    suite = unittest.TestSuite(map(StudyUnittest,['test01_case']))
    '''
    上面语句等同于 创建一个TestSuite实例,并向其中添加一个estCase
    suite = unittest.TestSuite()
    suite.addTest(StudyUnittest('test01_case'))
    '''
    suite.run(result)

    # 使用TestCase实例的run()方法执行
    testcase = StudyUnittest('test02_case')
    testcase.run(result)


3.3.4 使用addTests()加载测试用例集
addTests() 接收的参数是一个列表类型,函数原型:def addTests(self, tests: Iterable[_TestType]) -> None:。

下面演示用法:

if __name__ == '__main__':
    suite = unittest.TestSuite()
    testcases = [                   # 测试用例集
        StudyUnittest("test01_case"),
        StudyUnittest("test02_case")
    ]
    suite.addTests( testcases)    # 加载测试用例集
    unittest.main(defaultTest='suite')


————————————————

我们的python技术交流群:941108876
智一面的面试题提供python的测试题
http://www.gtalent.cn/exam/interview?token=99ef9b1b81c34b4e0514325e9bd3be54