Python unittest单元测试

最近在搭建一套Python自动化的UI框架,就去寻找一个类似于java里面的testNg的插件,于是就找到了unittest,功能和testNg都大同小异,框架搭建完后就决定再单独罗列一下unittest的部分知识

简介:Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起,就是TestSuite

TestLoader是用来加载TestCase到TestSuite中的

TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

接着看一张图,盗用了网友的

Python unittest单元测试_第1张图片

一个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是一样的,从名字就能看出来,这个我们后面再说)

接着看下实例:

第一步:新建一个测试用的函数文件,如图所示:

Python unittest单元测试_第2张图片

第二步:新建一个用于测试上面函数的测试用例文件

Python unittest单元测试_第3张图片

注意:测试用例必须以test_开头,不然unittest无法识别,默认执行顺序是按字符的排序执行

3、再新建一个文件,用于运行测试用例

Python unittest单元测试_第4张图片

unittest.makeSuite(MyTest)表示加载这个个类下的所有测试用例,这时的运行顺序是按asci排序运行的

如果要按自己想要的顺序就用这种方式

#suite.addTest(myTest('test_minus'))

#suite.addTest(myTest('test_add'))

其中verbosity 参数可以控制输出的错误报告的详细程度,默认是 1,如果设为 0,则不输出每一用例的执行结果,如果设为 2,则输出详细的执行结果

其中HTMLTestRunner需要下载后导入使用

最后看下执行结果:

Python unittest单元测试_第5张图片

还有一种方式是批量调用测试文件

discover = unittest.defaultTestLoader.discover(case_path,

                                                    pattern="test*.py",

                                                    top_level_dir=None)


最后附上软件测试交流群


Python unittest单元测试_第6张图片

你可能感兴趣的:(Python unittest单元测试)