Unittest属于是一种单元测试框架,主要用于对代码中写好的单元内容进行验证,比如写好一个函数,可以使用unittest去进行验证该函数的代码逻辑是否有问题,对于自动化来说,可以去检验每条用例的内容是否符合预期。
Unittest是python的一个内置库,我们在使用时直接导入该库即可,在Unittest中主要由4部分组成,分别为:TestCase(测试用例)、Test Fixture(可以用来设置用例的前置条件和结束时做一些清理工作,保证不影响其他的用例)、Test Suit(测试集合,在一个测试用例集中可能存在很多用例,Test Suit可以指定我们要执行那几条,或者确定每条用例的执行顺序)、Test Runner(用例执行器,通常用于执行Test Suit中指定好的用例)。
这里简单随便写一个Unittest的运行框架,说明下简单的运行流程和基本规则。
1、首先第一步我们要导入unittest的库
2、我们需要使用class定义一个类,这里类的名称我们随便填就行,一般就是我们的测试用例集合的名称,比如我们要测登录,这里就可以命名成Login,然后再后面的括号里去填写(unittest.TestCase)来继承unittest类。
3、然后就可以开始写测试用例了,这个就需要再class里在写函数,这里在def后我们的名称必须用小写的test开头来命名才可以
4、然后在def里写测试用例就行
5、然后我们可以在测试用例里加上断言
7、设置需要执行的用例
8、运行用例
import unittest #导入unittest的框架
class Atmunit_case(unittest.TestCase): #定义一个class类的名称,并且继承unittest的框架
def setUp(self):
print("用例开始了")
def test_111(self): #只能以小写test开头,一个def就可以理解成一个测试用例,但是这里的命名必须是以test开头,这个会区分大小写,必须是全部小写的test
a = 1 #测试用例内容
b = 2
c = a+b
print("用例1")
self.assertEqual(c,3) #这里是断言,括号里填实际结果与预期结果
def test_222(self): #定义第二个测试用例
a = 1 #用例内容
b = 2
print("用例2")
self.assertEqual(a+b,4) #断言
def tearDown(self):
print("执行结束了")
if __name__ == '__main__': #运行unittest框架
suite = unittest.TestSuite() #把TestSuite实例化
suite.addTest(Atmunit_case('test_222')) #调整执行顺序,优先执行test_222用例,括号里需要填写类名(class后面的名字)和对应的函数名(def后面的名字)
suite.addTest(Atmunit_case('test_111')) #然后执行test_11用例
runner = unittest.TextTestRunner() #实例化TextTestRunner()
runner.run(suite) #执行上述用例
下面这里正好说下unittest的运行方式和对应的不同结果,如果使用的是pycharm工具,代码中有unittest,会默认使用unitest的方式去执行的,这时候在直接执行上述代码时,顺序还是按着先执行test_111再执行test_222,这时候可以编辑下pycharm的python执行方式,不要使用unittest的执行方式,改为使用python的执行方式就行,或者直接点击calss位置的绿色小箭头去运行,具体设置操作见下图,下面可以看下对应的执行结果。
使用python的正常方式操作及运行结果:
或者改为直接点击class前面的小箭头去运行:
使用正常的python方式执行结果:
使用unittest的方式操作及运行结果:
操作方式:
直接运行项目
或者使用下图的操作方式:
使用unittest的方式的运行结果:
这个就是一个基本的unittest结构和操作方式了,然后里面的每一步都有更多详细的内容,比如下面实例里的setUp()和tearDown()这个就是流程相关的,setUp()相当于是前置操作,每条用例执行前都需要先执行下,tearDown()是结束操作,每条用例执行完会再执行下tearDown()里的内容,这个就是上面说到的Test Fixture的内容,里面还有些其他的方法后面会专门说到,还有断言下面例子里说的是assertEqual(),是判断两个条件是否相等的方法,这个还有其他的断言方法比如assertIn()、assertTrue()等,这些后面也会专门说到,还有就是最后的执行方式,使用TestSuite()类设置需要执行的用例及顺序,最后使用run()去执行,关于执行顺序这里还有一种方法是直接执行使用unittest.main()执行,这个执行顺序是按着用例名称的ASCII排序运行的,这个后面也会专门说到,大家可以先看下上面的代码,简单了解下unittest的结构和运行的模式,这篇的目的就是对unittest有个大概的了解就行。