在编写接口自动化用例时,我们一般针对一个接口建立一个.py文件,一条接口测试用例封装为一个函数(方法),但是在批量执行的过程中,如果其中一条出错,后面的用例就无法执行,还有在运行大量的接口测试用例时测试数据如何管理和加载。针对测试用例加载以及执行控制,python语言提供了unittest单元测试框架,将测试用例编写在unittest框架下,使用该框架可以单个或者批量加载互不影响的用例执行及更灵活的执行控制,对于更好的进行测试数据的管理和加载,这里我们引入数据驱动的模块:ddt,测试数据和测试脚本的分离,通过ddt数据驱动来加载测试数据到测试用例脚本中,通常在接口自动化测试中会将unittest和ddt结合起来使用,从而实现测试用例脚本和测试数据的载入来完成测试的执行。下面来看看unittest框架和ddt这两个模块具体的应用。
一、unittest测试框架unittest单元测试框架是python语言的一套标准模块,封装提供了诸多操作测试用例和用例加载、测试前置和场景恢复以及测试结果输出等一系列类和方法。
1.unittest框架中最核心四个组件概念:
(1)TestCase:测试用例类,编写测试用例脚本时需要继承该类,从而具有该类的属性和方法,一个TestCase实例就是一个测试用例,其中测试用例方法都以test开头。
(2)TestSuite:测试集,也就是测试用例的集合,用来组织用例。
(3)testrunner:用来执行测试用例,并返回测试用例的执行结果,可以用图形或者文本将测试结果形象地展现出来,HTMLTestRunner用来生成图形化的报告,TextTestRunner用来生成简单的文本测试结果。
(4)testfixure:测试夹件,主要用于测试用例的前置初始化和执行后的销毁。
2.testcase----测试用例
新建一个的.py测试用例文件必须是test开头,如test_login.py,主要后续用于识别测试用例文件
编写测试用例的类,必须继承unittest.TestCase,做为测试类
测试类中用例的方法名称必须以test开头,用于识别测试用例数
测试类中的用例执行顺序,按照以test开头的方法后的Ascill码顺序执行(0~9,A~Z,a~z)
3.testfixure----测试夹件
也叫测试夹具,主要是用例前置的初始化以及执行后的销毁
测试夹件提供两种方法,一种是类级别的:setup()和teardown(),一种是方法级别的:setUpClass()和tearDownClass()
类级别的测试夹件,每一条测试用例执行之前与之后都要运行一次setup()和teardown();方法级别的测试夹件,所有测试用例执行之前到执行完成只运行一次setUpClass()和tearDownClass()
下面通过简单的代码示例看看TestCase与TestFixure的使用
(1)使用setup()和teardown(),创建test_666.py文件编辑如下代码:
import unittest class test_unittest(unittest.TestCase): def setUp(self): print("测试环境初始化,开始执行setup") def tearDown(self): print("测试执行完成,运行teardown") print("------------------------------") def test_a(self): print("开始执行test_a用例") def test_A(self): print("开始执行test_A用例") def test_1(self): print("开始执行test_1用例") def notest_1(self): print("不执行notest_1用例") if __name__ == "__main__": unittest.main()