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()
以上代码大家可以本地测试下,感谢同学们的学习和对毛票票的支持。