智一面的面试题提供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