DDT的使用
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据)
只有yaml和yml结尾的文件以yaml形式上传,其他情况下默认为json
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有unpack,那么[a,b]当成一个参数传入用例运行
如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递
@file_data(filename)
对于json的文件,每一个json元素按照一个用例运行,可以依照python分解元组,列表或者字典的方式分解传入
import ddt,requests import unittest,BeautifulReport #参数化,一次执行多条用例,传入不同的值 @ddt.ddt class MyCase(unittest.TestCase): # @ddt.data(1,2,3)# 1、函数参数是一个,同时执行3条用例 # def testa(self,num): # self.assertTrue(num>2) @ddt.data([8,2],[1,3],[5,4],[6,4])# 2、函数参数是多个,同时执行3条用例 @ddt.unpack #多个参数,有unpack,[8,2]作为两个参数传递 def testb(self,num,num2): self.assertTrue(num > num2) # def testc(self,num): #不加unpack时,[8,2]不分解,作为一个参数传递 # print(num) # print(‘w‘) # @ddt.file_data(‘login.yml‘) # @ddt.unpack # def test_run(self,**kwargs):#返回 file_data对应文档中的值,以list的形式,lisg每个元素的值是字典 # print(‘这个是kwargs。。。。‘,kwargs) # ‘‘‘ # {‘method‘: ‘post‘, ‘data‘: {‘passwd‘: ‘aA123456‘, ‘username‘: ‘‘}, ‘check‘: [‘sign‘, ‘userId‘], # ‘url‘: ‘‘, ‘header‘: {‘content_type‘: ‘application/json‘}} # ‘‘‘ # method = kwargs.get(‘method‘) # url = kwargs.get(‘url‘) # data = kwargs.get(‘data‘,{}) # header = kwargs.get(‘header‘,{})#如果没有的话,默认{} # is_json = kwargs.get(‘is_json‘,0)#如果没有的话,默认0 # cookie = kwargs.get(‘cookie‘,{})#如果没有的话,默认{} # check = kwargs.get(‘check‘,{})#如果没有的话,默认{} # if method == ‘post‘: # if is_json: # r = requests.post(url,json= data,headers =header,cookies= cookie) # else: # r = requests.post(url,data= data,headers =header,cookies= cookie) # print(r.text) # else: # requests.get(url,params=data,headers=header,cookies= cookie)#params把url拼到请求里面 # self.assertEqual(check.get(‘error_code‘),r.json().get(‘error_code‘)) #只判断error_code # # for c in check:#第二种判断结果的方法,核对结果中是否有参数值 # # print(c) # # self.assertIn(c,r.text) # # # for c in check:#第三种判断方式,判断请求结果中每个key的值是否等于check中每个key的值 # # for k, v in c.items(): # # self.assertEqual(r.json().get(k), v) if __name__ == ‘__main__‘: unittest.main() # suite = unittest.TestSuite() # suite.addTests(unittest.makeSuite(MyCase)) # result_html = BeautifulReport.BeautifulReport(suite) # result_html.report(filename=‘测试报告‘, description=‘描述‘, log_path=‘.‘)