目录
一. unittest及其五个概念
一. unittest及其五个概念
unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件。类似于Java的Junit、TestNG。相关概念转载自https://blog.51cto.com/2681882/2123613
五个概念:test case,test suite,testLoader,test runner,test fixture
- 1.test case :一个完整的测试单元,执行该测试单元可以完成对某一个问题的验证,完整体现在:测试前环境准备(setUp),执行测试代码(run),以及测试后环境还原(tearDown);
- 2.test suite :多个测试用例的集合,测试套件或测试计划;
- 3.testLoader :加载TestCase到TestSuite中的,其中loadTestsFrom__()方法用于寻找TestCase,并创建它们的实例,然后添加到TestSuite中,返回TestSuite实例;
- 4.test runner :执行测试用例,并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
- 5.test fixture:一个测试用例的初始化准备及环境还原,主要是setUp() 和 tearDown()方法;
二. test case
1. 测试用例初识
首先编写测试用例如下
import unittest
def func_1(x):
return x+1
def func_2(x):
return x+2
def func_3(x):
return x+3
class FuncTest(unittest.TestCase):
def test_func(self):
self.assertEqual(func_1(3),4)
if __name__ == '__main__':
unittest.main()
使用unittest编写测试用例,首先需要同时导入unittest模块和待测试功能模块,第二步自定义测试模块,该测试模块需继承自unittest.TestCase,第三步定义测试用例方法,且测试用例方法是以test_开头的,用例以断言的结果作为输出,上述代码运行结果如下:
修改断言为assertNotEqual则会运行失败,失败时结果如下:
注意:
1).上述两个结果截图中,第一排的字符.和F为每一个用例执行的结果的标识,其中成功是 .,失败是F,出错是E,跳过是S。
2).测试的执行跟方法的顺序没有关系。
3).unittest的入口main():
init文件参数(self, module=‘main’, defaultTest=None, argv=None,testRunner=None, testLoader=loader.defaultTestLoader,exit=True,verbosity=1,failfast=None,catchbreak=None,buffer=None)
verbosity参数:
(1)为0时:不显示结果标识
(2)为1时(默认):如此前展示结果显示结果标识
(3)为2时:输出详细用例测试过程
入口main()详见https://blog.youkuaiyun.com/fengguangke/article/details/81711981
4).更多断言详见官方文档:
2. skip跳过某个case
有两个方法:
- 方法一:使用装饰器(@unittest.skip,@unittest.skipIf,@unittest.skipUnless,@unittest.expectedFailure)
@unittest.skip(reason):强制跳过。reason是跳过原因
@unittest.skipIf(condition, reason):condition为True的时候跳过
@unittest.skipUnless(condition, reason):condition为False的时候跳过
@unittest.expectedFailure:如果test失败了,这个test不计入失败的case数目
示例: