python ddt数据驱动最简实例代码
在接口自动化测试中,往往一个接口的用例需要考虑正确的、错误的、异常的、边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例。如果测试接口很多,不但需要写大量的代码,测试数据和代码柔合在一起,可维护性也会变的很差。数据驱动可以完美的将代码和测试数据分开,将代码进行分装,提高复用性,测试数据维护在本地文件或数据库。
使用python做接口自动化,首要任务是搭建一个自动化测试框架,其中unittest+ddt是一个不错的选择,下文主要介绍ddt在unittest下的使用。
ddt包含两个方法装饰器ddt.data和ddt.file_data
一、ddt.data(直接输入测试数据)
ddt.unpack的作用是把参数中元祖或者列表的元素对应到多个参数上,没有加ddt.unpack表示把元祖或者列表本身当成一个参数传入。
下面这段代码,ddt.data()有三组测试数据,每组测试数据都会执行一次test_login()。
importjson importunittest fromcommon.readConfigimportreadConfig importrequests fromddtimportddt,data,file_data,unpack @ddt#在测试类前必须首先声明使用ddt.ddt classMytest(unittest.TestCase): defsetUp(self): #获取测试接口的url self.url=readConfig().getHttp('usercenter')+readConfig().get_UC('login')print('setup') @data(({"isRememberMe":True,"password":"111111","username":"root"},200), ({"isRememberMe":True,"password":"1111111","username":"root"},406), ({"isRememberMe":True,"password":"111111","username":"rot"},406)) @unpack #后台人员登录 deftest_login(self,data,status): body=json.dumps(data) header={"Content-Type":"application/json","Accept":"application/json","token":"1231"} re=requests.post(self.url,data=body,headers=header,verify=False) code=re.status_code print(re.text,re.status_code) #断言 self.assertEqual(int(status),int(code)) deftearDown(self): print('tearDown') if__name__=='__main__': unittest.main()
二、ddt.file_data(参数是文件名。文件可以是json或者yaml类型)
如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。下文两种类型的文件分别举一个例子。
新建文件testdata.json:
{ "first":["{'isRememberMe':True,'password':'111111','username':'root'}","200"], "second":["{'isRememberMe':True,'password':'1111111','username':'root'}","406"], "third":["{'isRememberMe':True,'password':'111111','username':'rot'}","406"] }
新建文件testdata.yaml:
first:["{'isRememberMe':True,'password':'111111','username':'root'}","200"] second:["{'isRememberMe':True,'password':'1111111','username':'root'}","406"] third:["{'isRememberMe':True,'password':'111111','username':'rot'}","406"]
新建测试脚本:
importjson importunittest fromcommon.readConfigimportreadConfig importrequests fromddtimportddt,data,file_data,unpack @ddt#在测试类前必须首先声明使用ddt.ddt classMytest(unittest.TestCase): defsetUp(self): #获取测试接口的url self.url=readConfig().getHttp('usercenter')+readConfig().get_UC('login')print('setup') @file_data('D:\\automation--interface\\testcase\\UC\\testdata.json') #@file_data('D:\\automation--interface\\testcase\\UC\\testdata.yaml') #后台人员登录 deftest_login(self,data): body=json.dumps(eval(data[0])) status=data[1] header={"Content-Type":"application/json","Accept":"application/json","token":"1231"} re=requests.post(self.url,data=body,headers=header,verify=False) code=re.status_code print(re.text,re.status_code) #断言 self.assertEqual(int(status),int(code)) deftearDown(self): print('tearDown') if__name__=='__main__': unittest.main()
以上代码大家可以本地测试下,感谢同学们的学习和对毛票票的支持。