在做自動化測試時,經常會對一整套業務流程進行一組介面上的測試,這時候介面之間經常會有資料依賴,那麼具體要怎麼實現這個依賴呢。
思路如下:
抽取之前介面的返回值儲存到全域性變數字典中。
初始化介面請求時,解析請求頭部、請求引數等資訊中的全域性變數並進行替換。
發出請求。
核心**實現:
抽取介面的返回值儲存到全域性變數字典中
if set_global_vars and isinstance(set_global_vars, list):
for set_global_var in set_global_vars:
if isinstance(set_global_var, dict) and isinstance(set_global_var.get('name'), str):
name = set_global_var.get('name') # name 代表全域性變數的名字
query = set_global_var.get('query') # query 代表全域性變數的查詢語句
value = common.dict_get(response_json, query) # response_json 代表介面的響應資料
self.global_vars[name] = value
其中set_global_vars代表的是當前測試用例的全域性變數設定列表, self.global_vars則代表測試類例項的全域性變數字典,common.dict_get方法的具體實現請移步方法具體實現
解析字串中全域性變數並進行替換
import re
def resolve_global_var(pre_resolve_var, global_var_dic, global_var_regex=』$』,
match2key_sub_string_start_index=2, match2key_sub_string_end_index=-1):
'''
:param pre_resolve_var: 準備進行解析的變數:param global_var_dic: 全域性變數字典:param global_var_regex: 識別全域性變數正規表示式:param match2key_sub_string_start_index: 全域性變數表示式擷取成全域性變數字典key值字串的開始索引:param match2key_sub_string_end_index: 全域性變數表示式擷取成全域性變數字典key值字串的結束索引: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(match2key_sub_string_start_index, int):
raise typeerror('match2key_sub_string_start_index must be int!')
if not isinstance(match2key_sub_string_end_index, int):
raise typeerror('match2key_sub_string_end_index must be int!')
re_global_var = re.compile(global_var_regex)
def global_var_repl(match_obj):
start_index = match2key_sub_string_start_index
end_index = match2key_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
複製**
這裡,首先先建立識別全域性變數的正則規則,然後運用re.sub方法進行替換。其中,re.sub中的repl引數可接受函式作為引數。global_var_repl方法中,使用global_var_dic字典去獲取匹配的值並返回。
預設引數中,將全域性變數做了這樣乙個識別: $, 用global_var_dic查詢並替換全域性變數時,則使用了預設預設的起止索引引數。這種寫法我感覺有些奇怪, 但是目前也沒想出更好的方法,如果大家有更好的實現思路的話歡迎討論:)
最佳實踐
我們來模擬一次全域性變數替換的效果:
if __name__ == '__main__':
pre_resolve_var = 'left $ right, left $ right'
global_var_dic =
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
可以看出輸出還是符合預期的,將字串中全域性變數成功解析。 介面自動化測試(一) 介面測試
介面測試是測試系統元件間介面的一種測試。介面測試主要用於檢測外部系統與系統之間以及內部各個子系統之間的互動點。測試的重點是要檢查資料的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。其中介面協議分為http,webservice,dubbo,thrift,socket等型別,測試型別又主要...
Excel介面自動化(8)介面測試自動化指令碼
介面測試自動化指令碼 整個流程的邏輯基本都是在這裡面實現,所需要的資料都是通過呼叫前面的封裝來獲取 第一步 新建乙個解析excel工具類的例項物件並且獲取 api 的sheet物件 parsee parseexcel parsee.loadworkbook filepath sheetobj par...
python介面自動化測試
為了監控線上的介面是否正常執行,所以想寫乙個smoke test.這個檔案希望能夠實現從檔案讀取url和引數,然後傳送請求,校驗返回code 200的功能。1.首先採取哪種方式存放url和請求引數 excel?csv?ini?用csv比較好,相容性也比較好 那我們使用csv吧。todo 考慮放在資料...