python的unittest框架理论基础
Unittest核心工作原理
最核心的四个概念:test case ,test suite,test runner,test fixture
一个TestCase实例就是一个测试用例
测试用例:指一个完成的测试流程,包括测试前环境搭建(setup),执行测试代码(run),测试后环境还原(tearDown)。
一个测试用例是一个完整的测试单元,执行这个单元,验证某个问题
多个测试用例集合在一起就是TestSuite,并且TestSuite可以嵌套TestSuite
TestLoader用来加载TestCase到TestSuite中,loadTestsFrom_()方法,是从各个地方查找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例
TextTestRunner用来执行测试用例,其中run(test)会执行TestSuite/TestCase中的run(result)方法。测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功和失败各有多少等信息
对一个测试用例环境的搭建和销毁是一个fixture
一个class继承了unittest.TestCase,就是一个测试用例,如果有很多以test开头的方法,每个方法在load的时候便会生成一个TestCase实例,如:一个class中有四个test_xxx方法,最后在load到suite中也会有四个测试用例
整个流程如下:
写好TestCase,然后由Testloader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中
通过命令或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者直接通过TextTestRunner来执行用例
说明:在runner执行时,默认将结果输出到控制台,可以设置输出到文件中,然后在文件中查看;另外HTMLTestRunner也同样是执行用的,它可以将结果输出到html中,它跟TextTestRunner是一样的,但是它生成的报告更清晰好看
注意:1.运行时不要把文件放在中文目录下 2.编码缩进格式要注意否则会有错误,该缩进的要缩进,该顶格的要顶格写
关键字解释
TestLoader:测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件
loadTestsFromModule(self,module)--根据给定的模块实例来获取测试用例套件
loadTestsFromTestCase(self,testCaseClass)--根据给定的测试类,获取其中的所有测试方法,并返回一个测试套件
loadTestsFromName(self,name,module=None)
--根据给定的字符串来获取测试用例套件,字符串可以是模块名,测试类名,测试类中的测试方法名,或者一个可调用的是实例对象
这个实例对象返回一个测试用例或一个测试套件
loadTestsFromNames(self,names,module=None) --和上面功能相同,只不过接受的是字符串列表
setUp()和tearDown()两个方法(其实是重写了TestCase的这两个方法),这两个方法在每个测试方法执行前以及执行后执行一次,setUp用来为测试准备环境,tearDown用来清理环境,已备之后的测试。
setUpClass()与tearDownClass():如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用setUpClass()与tearDownClass():
关键字的关系图
总结如下:
1.unittest是Python自带的单元测试框架,我们可以用其来作为我们自动化测试框架的用例组织执行框架。
2.unittest的流程:写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。
3.一个class继承unittest.TestCase即是一个TestCase,其中以test开头的方法在load时被加载为一个真正的TestCase。
4.verbosity参数可以控制执行结果的输出,0是简单报告、1是一般报告、2是详细报告。
5.可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。
6.用setUp()、tearDown()、setUpClass()以及tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境
7.我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。
8.参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。