ddt是处理数据的模型,配合unittest使用
一、@data使用方法,一个参数接收
#coding=utf-8
import unittest
from ddt import ddt,data,unpack
b = [{"i":"[1,2,3,4]"},{"j":"[1,2,3,5]"}]
@ddt # 装饰测试类
class Test_ddt(unittest.TestCase):
@data(*b) ''' 脱一层外套操作,装饰测试方法,拿到几条数据则执行几条用例
这时类方法就可以接收参数了‘’‘
def test_print_args(self,item): # @ddt只能放一个参数接收
print("item",item)
if __name__ == '__main__':
unittest.main()
item {'i': '[1,2,3,4]'}
item {'j': '[1,2,3,5]'}
二、@unpack使用方法,大于一个参数接收
#coding=utf-8
import unittest
from ddt import ddt,data,unpack
i = [[1,2,3],[4,5,6]]
@ddt # 装饰测试类
class Test_ddt(unittest.TestCase):
@data(*i) ''' 脱一层外套操作,装饰测试方法,拿到几条数据则执行几条用例
这时类方法就可以接收参数了‘’‘
@unpack # 将@data处理后的数据以逗号间隔为一个新数据
def test_print_args(self,a,b,c): # @unpack必须放对应个数的参数接收
print("a",a)
print("b",b)
print("c",c)
if __name__ == '__main__':
unittest.main()
a 1
b 2
c 3
a 4
b 5
c 6
三、实际应用
#coding=utf-8
import unittest
from ddt import ddt,data
from tools.http_requests import HttpRequests
from tools.do_excel import DoExcel
from tools.get_cookies import GetCookies
test_data = DoExcel('/Users/lucky/PycharmProjects/api/api.xlsx', "Sheet1").get_data()
@ddt # 装饰测试类
class Test_ddt(unittest.TestCase):
@data(*test_data) # 脱一层外套操作,装饰测试方法,拿到几条数据则执行几条用例
def test_print(self,item):
res = HttpRequests().run(method=item['method'],url=item['url'],data=item['data'],cookies=getattr(GetCookies,'cookies'))
#print(type(['method']))
#if res.cookies:
#setattr(GetCookies,'cookies',res)
try:
self.assertEqual(item['expected'],res['code'])
except AssertionError as e:
raise e
if __name__ == '__main__':
unittest.main()