網(wǎng)站怎么做流量2022國內(nèi)外重大新聞事件10條
在實際的測試工作中,在做接口自動化測試時往往會遇到接口間數(shù)據(jù)依賴問題,即API_03的請求參數(shù)來源于API_02的響應數(shù)據(jù),API_02的請求參數(shù)又來源于API_01的響應數(shù)據(jù)。
因此通過自動化方式測試API_03接口時,需要預先請求API_02接口,獲取到API_03的請求參數(shù),而獲取API_02的響應又需要預先對API_01發(fā)起請求,從響應中提取API_02的請求參數(shù)。
而下面的自動化框架設計便解決了這一問題:
用于數(shù)據(jù)驅(qū)動的Excel表格設計
框架代碼實現(xiàn)邏輯
當測試 id 為 shop-03 的接口時,首先判斷【是否運行】。如果為 ‘yes’ 則判斷該接口請求類型, ‘POST’ OR ‘GET’ 走不同的邏輯分支。
POST請求的話判斷是否有【case依賴】,【case依賴】為空則無依賴,不為空則獲取依賴的case id。
上述表格中,shop-03的case依賴為shop-02,獲取到依賴的id后,代碼邏輯主動去判斷shop-02接口的相關字段參數(shù)(【是否運行】/【請求類型】/【case依賴】),如果shop-02也存在依賴接口shop-01,則代碼繼續(xù)判斷shop-01接口對應字段參數(shù)。
shop-01接口【case依賴】字段為空時,獲取【請求數(shù)據(jù)】根據(jù)請求數(shù)據(jù)這個字段獲取單獨存儲在字典中的完整的請求參數(shù),發(fā)起請求,獲得shop-01的響應后根據(jù)shop-01對應的【被依賴接口的返回數(shù)據(jù)】提取下游接口。
即shop-02的所需要的依賴參數(shù),存入一個依賴參數(shù)列表中,shop-02接口把獲取到的參數(shù)代入到請求參數(shù)中進行請求,獲取到shop-02的響應后同樣根據(jù)【被依賴接口的返回數(shù)據(jù)】提取下游接口shop-03所需要的依賴參數(shù),存入依賴參數(shù)列表,shop-03接口從列表中獲取這個參數(shù)代入請求參數(shù),進入請求,獲取響應,根據(jù)【實際結(jié)果取值字段】獲取要斷言的字段,并對比預期結(jié)果完成該接口的測試。
# 主邏輯模塊部分代碼示例
'''判斷是否有case依賴,如果有case依賴則執(zhí)行depend_data.py中的depend_response_data(self,caseid)方法,該方法返回該接口發(fā)起請求的依賴參數(shù)'''elif method == 'Post':if depend_caseid:params_data_list = self.depend_result.depend_response_data(depend_caseid)log_info('main_logic.requests_api::根據(jù)依賴的caseid={},''調(diào)用depend_data.depend_response_data獲取到的依賴數(shù)據(jù)為:{}'.format(depend_caseid, params_data_list))for j in range(len(depend_key_list)):params[depend_key_list[j]] = params_data_list[j][0]header = rquests_headers()log_info('main_logic.requests_api::執(zhí)行的用例{}請求url為:{},入?yún)?#xff1a;{},請求頭為:{}'.format(caseid,url,params,header))response = self.post_requests(url, params, header)# print(response)self.results_list.append(response)else:header = rquests_headers()response =self.post_requests(url, params, header)# print(response)self.results_list.append(response)
#數(shù)據(jù)依賴模塊部分代碼示例
'''通過excel表中【case依賴】字段一層層向上游接口請求,結(jié)果儲存在一個結(jié)果列表中供下游接口調(diào)用,最后返回測試接口所需要的依賴數(shù)據(jù)'''
def depend_response_data(self,caseid):depend_caseid_t = self.excel_case_data.get_depend_caseid(caseid)depend_caseid_list = []#如果case依賴字段不為空if depend_caseid_t:#獲取接口串聯(lián)依賴caseid列表while depend_caseid_t:depend_caseid_list.append(depend_caseid_t)depend_caseid_t = self.excel_case_data.get_depend_caseid(depend_caseid_t)depend_caseid_list.reverse()depend_caseid_list.append(caseid)march_result_list = []num_caseid = len(depend_caseid_list)#迭代獲取列表中的caseidfor i in range(num_caseid):depend_caseid_s = self.excel_case_data.get_depend_caseid(depend_caseid_list[i])depend_key_list = self.excel_case_data.get_depend_key(depend_caseid_list[i]).split(",")params_key = self.excel_case_data.get_request_key(depend_caseid_list[i])params = self.requests_data[params_key]url = self.excel_case_data.get_url(depend_caseid_list[i])#判斷該caseid的測試用例中case依賴是否為空if depend_caseid_s:#獲取上一個依賴接口返回的依賴參數(shù)params_data_list = march_result_list[i-1]#根據(jù)該caseid數(shù)據(jù)依賴字段構(gòu)造該接口的傳參for k in range(len(depend_key_list)):params[depend_key_list[k]] = params_data_list[k][0]#對該接口發(fā)起請求header = rquests_headers()result = post_requests(url, params, header)getdata = GetExcelDate()is_depend_response = getdata.get_depend_response(depend_caseid_list[i])#判斷該接口是否需要為下一接口返回依賴參數(shù)if is_depend_response:depend_response_list = is_depend_response.split(",")results = resultmatchlist = depend_response_listmatchparams = match_params(results, matchlist)march_result_list.append(matchparams)else:print("caseid={}不需要返回被依賴的字段".format(depend_caseid_list[i]))#當該caseid測試用例中case依賴為空時直接請求該接口,返回匹配到的下一關聯(lián)接口的請求參數(shù)else:result = self.depend_response(depend_caseid_list[i])getdata = GetExcelDate()is_depend_response = getdata.get_depend_response(depend_caseid_list[i])if is_depend_response:depend_response_list = is_depend_response.split(",")results = resultmatchlist = depend_response_listmatchparams = match_params(results, matchlist)march_result_list.append(matchparams)else:print("caseid={}不需要返回被依賴的字段".format(depend_caseid_list[i]))return matchparams
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰(zhàn)倉庫,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰(zhàn)倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!?