单元测试语法介绍
所谓单元测试,就是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。对于我们测试来说,单元测试就是为了执行测试用例。
编写mathMethod.py代码如下:
import unittestclass mathMethod: def add(self,a,b): return a+b def sub(self,a,b): return a-b
如下是一个TestMathMethod.py文件,用来测试mathMethod.py中的函数。
import unittest #引入python自带的单元测试类unittestfrom test_01.mathMethod import mathMethod #引入要测试的代码模块或类名#定义测试用例类,继承父类为unittest.TestCaseclass TestMathMethod(unittest.TestCase): #测试前的初始化工作,如建立数据库连接并进行初始化 #注意,所有类中方法的入参为self,定义方法的变量也要“self.变量” def setUp(self): print "Test start!" #创建单元测试用例来对测试目标进行测试,以“test_”开头命名的方法 def test_add(self): t = mathMethod() return = t.add(3,7) print(return) self.assertEqual(return,10,"加法运算错误!") #引入断言,对测试结果进行判断处理 def test_sub(self): t = mathMethod() return = t.sub(9,6) print(return) self.assertEqual(return,3,"减法运算错误!") #测试后的收尾工作,如关闭文件、关闭数据库连接、关闭浏览器等 def tearDown(self): print "Test end!"
运行单元测试
(1)最简单的运行方式是在TestMathMethod.py的最后加上两行代码:
if __name__ == "__main__": #执行所有以test_开头的测试用例 unittest.main()
(2)事实上,完整的单元测试很少只执行一个测试用例,测试人员通常需要编写多个用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,用TestSuite类来表示的。
如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行。
if __name__ == "__main__": #先构造测试集 suite = unittest.TestSuite() #将测试用例加载到测试套件中 #执行顺序是安装加载顺序:先执行test_add,再执行test_sub suite.addTest(TestMathMethod("test_add")) suite.addTest(TestMathMethod("test_sub")) #引入测试集,方便批量单元测试 runner = unittest.TextTestRunner() #实例化TextTestRunner类 runner.run(suite) #使用run()方法运行测试套件(即运行测试套件中的所有用例)
附注:unittest模块的各属性说明:
unittest中最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture
unittest.TestCase(): 用于构造测试集
SetUp(): #用于测试用例执行前的初始化工作,如建立数据库连接并进行初始化 tearDown(): #用于测试用例执行后的善后工作。如关闭数据库连接,关闭浏览器 assert*(): #断言方法,判断实际结果和预期结果是否相等,常用的如:assertEqual()、assertTrue()、assertIs()、assertIn()等
2. unittest.TestSuite(): 用来创建测试集
addTest(): #用于将测试用例添加到测试测试集中
3.unittest.TextTestRunner(): 通过该类下的run()方法来运行所组装的测试用例,入参为suite测试套件
run(): #运行测试集中的测试用例,入参为suite测试套件
4. unittest.skip(): 装饰器,当运行用例时,有些用例不想执行等,可用装饰器暂时屏蔽该条用例。
5. unittest.main(): 使用它可以方便的将一个单元测试模块变为可直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在该模块中以“test”命名开头的测试方法,并自动执行他们。
睿江云官网链接:https://www.eflycloud.com/home?from=RJ0032