Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。
创新互联服务项目包括和静网站建设、和静网站制作、和静网页制作以及和静网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,和静网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到和静省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。
unittest有四个比较重要的概念是test fixture, test case, test suite, test runner, 。
在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
通过dir(unittest),我们可以看到unittest全部的属性和方法,他们的关系如下图所示。
unittest主要类关系
正常调用unittest的流程是,TestLoader 自动将测试用例TestCase中加载到TestSuite里,TextTestRunner调用TestSuite的run方法,顺序执行里面的TestCase中以test开头的方法,并得到测试结果TestResult。在执行TestCase过程中,先进行SetUp()环境准备,执行测试代码,最后tearDown()进行测试的还原。
其中TestLoader在加载过程中,进行添加的TestCase是没有顺序的。一个TestCase里如果存在多个验证方法的话,会按照方法中test后方首字母的ascii码从小到大排序后执行。
可以通过手动调用TestSuite的addTest、addTests方法来动态添加TestCase,这样既可以确定添加用例的执行顺序,也可避免TestCase中的验证方法一定要用test开头。
下面写一个简单的单元测试用例
import unittest class MyTest(unittest.TestCase): # 继承unittest.TestCase def tearDown(self): # 每个测试用例执行之后做操作 print('111') def setUp(self): # 每个测试用例执行之前做操作 print('22222') @classmethod def tearDownClass(self): # 必须使用 @ classmethod装饰器, 所有test运行完后运行一次 print('4444444') @classmethod def setUpClass(self): # 必须使用@classmethod 装饰器,所有test运行前运行一次 print('33333') def test_a_run(self): self.assertEqual(1, 1) # 测试用例 def test_b_run(self): self.assertEqual(2, 2) # 测试用例 if __name__ == '__main__': unittest.main()#运行所有的测试用例