一个人学习不如和大家一起学习,群里有学习资料,欢迎你加入软件测试交流群,群号:1062843742。
很久没有写关于测试的随笔了,最近有空学习、整理一下关于unittest框架的知识。
unittest单元测试框架,不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行。
unittest常见的几个属性
unittest重要并且常用的属性:TestCase、TestSuite、TextTestRunner、TestFixture、TestLoader、main
unittest.TestCase:TestCase类,所有测试用例的继承的基本类。一个测试用例就是一个完整的测试流程,包括测试用例执行前的环境准备日(setUp),实现测试过程的代码(run),以及用例之后后的环境还原(tearDown)。一个测试用例就是一个完整的测试单元,通过运行这个测试单元,可以对某一个功能进行验证。
图中可以看到我使用的是setUpClass和tearDownClass方法,而不是setUp和tearDown。他们的区别setUp和tearDown是在每一个用例执行前后都会执行一次,setUpClass和tearDownClass方法只在本类所有用例执行之前执行一次和所有用例执行完成之后执行一次,并且如图必须加上@classmethod进行修饰
unittest.main():用他可以方便的讲一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该类中以test命名开头的测试方法,并执行他们。执行方法的默认顺序是:根据ASCII码的顺序加载测试用例,数字与字母的顺序为0-9,A-Z,a-z。所以以A开头的用例会比以a开头的用例优先执行。
如上图一般在用例最后会加上这段代码, 运行unittest.main()的时候,就会使用TestLoader类去搜索本类里面所有已test开头的用例来执行。
unittest.TestSuite():创建测试套件,就是多个测试用例集合在一起,而且TestSuite也可以嵌套TestSuite。testSuite()可以被看做是一个容器,通过addTest可以向测试套件里面增加用例
说明:
addTest(): addTest()方法是将测试用例添加到测试套件中,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。
suite = unittest.TestSuite() suite.addTest(test_baidu.BaiduTest('test_baidu'))
unittest.defaultTestLoader():defaultTestLoader()类,通过该类下面的discover()方法可自动更具测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件,因此可以直接通过run()方法执行discover。用法如下:
注意:上图我用的方式是HTMLTestRunner类是因为我需要执行完用例之后自动生成测试报告。
unittest.TextTextRunner():run()方法来执行suite(TestSuite/TestCase)所组装的用例套件,入参为suite测试套件,测试结果会保存到TextTestResult实例中。
unittest.TestLoader:加载TestCase到TestSuite中的,其中loadTestsFrom__()方法用于寻找TestCase,并创建它们的实例,然后添加到TestSuite中,返回TestSuite实例。
unittest.Fixture:一个测试用例的初始化准备及环境还原,主要是setUp() 和 setDown()方法;
总结:
1.TextTestRunner.run(TestSuite)方法执行的是TestSuite套件
2.DefultTestLoader.discover()是生成套件所以用run()方法执行
3.TestLoder也是将TestCase加载到TestSuite测试套件里面
3.main()方法是调用了TestLoader方法,那么也将生成测试套件,也是用run()方法执行用例