十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
小編給大家分享一下python接口自動化測試之接口數(shù)據(jù)依賴如何實(shí)現(xiàn),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在做自動化測試時,經(jīng)常會對一整套業(yè)務(wù)流程進(jìn)行一組接口上的測試,這時候接口之間經(jīng)常會有數(shù)據(jù)依賴,那么具體要怎么實(shí)現(xiàn)這個依賴呢。
思路如下:
抽取之前接口的返回值存儲到全局變量字典中。
初始化接口請求時,解析請求頭部、請求參數(shù)等信息中的全局變量并進(jìn)行替換。
發(fā)出請求。
核心代碼實(shí)現(xiàn):
抽取接口的返回值存儲到全局變量字典中
# 抽取接口的返回值存儲到全局變量字典中 if set_global_vars and isinstance(set_global_vars, list): for set_global_var in set_global_vars: if isinstance(set_global_var, dict): name = set_global_var.get('name') # name 代表全局變量的名字 query = set_global_var.get('query') # query 代表全局變量的查詢語句 value = common.dict_get(response_json, query) # response_json 代表接口的響應(yīng)數(shù)據(jù) self.global_vars[name] = value
其中set_global_vars代表的是當(dāng)前測試用例的全局變量設(shè)置列表, self.global_vars則代表測試類實(shí)例的全局變量字典,common.dict_get方法的具體實(shí)現(xiàn)請移步方法具體實(shí)現(xiàn)
解析字符串中全局變量并進(jìn)行替換
import re # 解析字符串中全局變量并進(jìn)行替換 def resolve_global_var(pre_resolve_var, global_var_dic, global_var_regex='\${.*?}', match3key_sub_string_start_index=2, match3key_sub_string_end_index=-1): ''' :param pre_resolve_var: 準(zhǔn)備進(jìn)行解析的變量:param global_var_dic: 全局變量字典 :param global_var_regex: 識別全局變量正則表達(dá)式 :param match3key_sub_string_start_index: 全局變量表達(dá)式截取成全局變量字典key值字符串的開始索引 :param match3key_sub_string_end_index: 全局變量表達(dá)式截取成全局變量字典key值字符串的結(jié)束索引 :return: 解析后的變量 ''' if not isinstance(pre_resolve_var, str): raise TypeError('pre_resolve_var must be str!') if not isinstance(global_var_dic, dict): raise TypeError('global_var_dic must be dict!') if not isinstance(global_var_regex, str): raise TypeError('global_var_regex must be str!') if not isinstance(match3key_sub_string_start_index, int): raise TypeError('match3key_sub_string_start_index must be int!') if not isinstance(match3key_sub_string_end_index, int): raise TypeError('match3key_sub_string_end_index must be int!') re_global_var = re.compile(global_var_regex) def global_var_repl(match_obj): start_index = match3key_sub_string_start_index end_index = match3key_sub_string_end_index match_value = global_var_dic.get(match_obj.group()[start_index:end_index]) return match_value if match_value else match_obj.group() resolved_var = re.sub(pattern=re_global_var, string=pre_resolve_var, repl=global_var_repl) return resolved_var
這里,首先先創(chuàng)建識別全局變量的正則規(guī)則,然后運(yùn)用re.sub方法進(jìn)行替換。其中,re.sub中的repl參數(shù)可接受函數(shù)作為參數(shù)。global_var_repl方法中,使用global_var_dic字典去獲取匹配的值并返回。
默認(rèn)參數(shù)中,將全局變量做了這樣一個識別: ${GLOBALVAR_NAME}, 用global_var_dic查找并替換全局變量時,則使用了默認(rèn)預(yù)設(shè)的起止索引參數(shù)。這種寫法我感覺有些奇怪, 但是目前也沒想出更好的方法,如果大家有更好的實(shí)現(xiàn)思路的話歡迎討論:)
最佳實(shí)踐
我們來模擬一次全局變量替換的效果:
if __name__ == '__main__': pre_resolve_var = 'left ${status} right, left ${data} right' global_var_dic = {'status': 'STATUS', 'data': 'DATA'} resolved_str = resolve_global_var(pre_resolve_var=pre_resolve_var, global_var_dic=global_var_dic) print(resolved_str)
下面是控制臺輸出:
left STATUS right, left DATA right
Process finished with exit code 0
可以看出輸出還是符合預(yù)期的,將字符串中全局變量成功解析。
以上是“python接口自動化測試之接口數(shù)據(jù)依賴如何實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。