1. 程式人生 > >【python】學習筆記10-ddt數據驅動

【python】學習筆記10-ddt數據驅動

get args code imp content coo 文檔 AR ems

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=‘.‘)

【python】學習筆記10-ddt數據驅動