AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

優(yōu)化自動(dòng)化接口測(cè)試:利用鉤子函數(shù)增強(qiáng)HTTP請(qǐng)求處理

來源: 責(zé)編: 時(shí)間:2023-09-18 21:41:57 263觀看
導(dǎo)讀在自動(dòng)化接口測(cè)試中,我們經(jīng)常需要發(fā)送HTTP請(qǐng)求來模擬用戶的操作并驗(yàn)證接口的正確性。夠靈活處理請(qǐng)求參數(shù)、添加認(rèn)證信息以及處理依賴參數(shù)。這正是鉤子函數(shù)的用武之地。下面勇哥將以一個(gè)實(shí)際的示例場(chǎng)景為例,詳細(xì)介紹如何

在自動(dòng)化接口測(cè)試中,我們經(jīng)常需要發(fā)送HTTP請(qǐng)求來模擬用戶的操作并驗(yàn)證接口的正確性。夠靈活處理請(qǐng)求參數(shù)、添加認(rèn)證信息以及處理依賴參數(shù)。這正是鉤子函數(shù)的用武之地。emO28資訊網(wǎng)——每日最新資訊28at.com

下面勇哥將以一個(gè)實(shí)際的示例場(chǎng)景為例,詳細(xì)介紹如何利用鉤子函數(shù)進(jìn)行自動(dòng)化接口測(cè)試,并展示如何設(shè)計(jì)和應(yīng)用這些鉤子函數(shù)。emO28資訊網(wǎng)——每日最新資訊28at.com

emO28資訊網(wǎng)——每日最新資訊28at.com

鉤子函數(shù)設(shè)計(jì)

遙想當(dāng)年,勇哥一開始對(duì)【鉤子】也是懵逼的!!鉤子函數(shù)就是在特定事件發(fā)生前后執(zhí)行的函數(shù)。通過鉤子我們可以在 HTTP 請(qǐng)求的不同階段執(zhí)行花里胡哨的自定義操作,如修改URL、更新請(qǐng)求頭、請(qǐng)求參數(shù)加密加簽、處理響應(yīng)結(jié)果...emO28資訊網(wǎng)——每日最新資訊28at.com

上代碼:emO28資訊網(wǎng)——每日最新資訊28at.com

```pythonclass Hooks:    def __init__(self):        self.before_request_funcs = {}        self.after_request_funcs = {}    def before_request(self, func):        """        注冊(cè) before_request 鉤子函數(shù)        """        self.before_request_funcs[func.__name__] = func        return func    def after_request(self, func):        """        注冊(cè) after_request 鉤子函數(shù)        """        self.after_request_funcs[func.__name__] = func        return func    def run_before_request_hooks(self, func_names, request, json_data):        """        執(zhí)行 before_request 鉤子函數(shù)        """        for func_name in func_names:            if func_name in self.before_request_funcs:                func = self.before_request_funcs[func_name]                json_data = func(request, json_data)        return json_data    def run_after_request_hooks(self, func_names, request, response):        """        執(zhí)行 after_request 鉤子函數(shù)        """        for func_name in func_names:            if func_name in self.after_request_funcs:                func = self.after_request_funcs[func_name]                response = func(request, response)        return response

場(chǎng)景:注冊(cè)用戶

模擬用戶注冊(cè),并驗(yàn)證注冊(cè)接口的正確性。同時(shí),在每個(gè)請(qǐng)求中自動(dòng)添加認(rèn)證信息和處理依賴參數(shù)。emO28資訊網(wǎng)——每日最新資訊28at.com

錢包: 封裝請(qǐng)求

有錢才能吃飯,所以我們看看怎么封裝代碼:emO28資訊網(wǎng)——每日最新資訊28at.com

def req(url, method, **kwargs):    """    發(fā)送請(qǐng)求并返回響應(yīng)對(duì)象    """    before_hooks = kwargs.pop('before_hooks', [])    after_hooks = kwargs.pop('after_hooks', [])    json_data = kwargs.pop('json', {})    request = requests.Request(method=method, url=url, **kwargs)    prepared_request = session.prepare_request(request)    json_data = hooks.run_before_request_hooks(before_hooks, prepared_request, json_data)    prepared_request.body = json.dumps(json_data)    response = session.send(prepared_request)    response = hooks.run_after_request_hooks(after_hooks, prepared_request, response)    return response

上述代碼中,勇哥先封裝一個(gè)http請(qǐng)求,在里面實(shí)現(xiàn)不同位置調(diào)用鉤子函數(shù)emO28資訊網(wǎng)——每日最新資訊28at.com

買菜:寫測(cè)試用例

常規(guī)玩法,干百度。emO28資訊網(wǎng)——每日最新資訊28at.com

def test_user_registration():    url = "http://www.baidu.com"    # url = "http://jsonplaceholder.typicode.com/posts"    data = {        "userId": "testuser",        "title": "password123",        "body": "測(cè)試玩家勇哥"    }    headers = {        "Content-Type": "application/json"    }    before_hooks = [add_authentication_headers.__name__, handle_dependent_parameters.__name__]    after_hooks = [after_dependent_parameters.__name__]    kwargs = {"json": data, "headers": headers}    return req(url, "post", before_hooks=before_hooks, after_hooks=after_hooks, **kwargs)

在上述測(cè)試用例中,我們使用req函數(shù)發(fā)送了一個(gè)POST請(qǐng)求來模擬用戶注冊(cè),并對(duì)返回的響應(yīng)進(jìn)行了斷言驗(yàn)證。emO28資訊網(wǎng)——每日最新資訊28at.com

切菜:注冊(cè)前置鉤子函數(shù)

寫N個(gè)前置鉤子函數(shù),發(fā)送注冊(cè)請(qǐng)求前自動(dòng)添加認(rèn)證信息:emO28資訊網(wǎng)——每日最新資訊28at.com

@hooks.before_requestdef add_authentication_headers(request, json_data):    """    添加認(rèn)證頭信息    """    print("前置鉤子函數(shù),添加認(rèn)證頭信息", request)    request.headers["Authorization"] = "Bearer YOUR_AUTH_TOKEN"    return json_data@hooks.before_requestdef handle_dependent_parameters(request, json_data):    """    處理依賴參數(shù)    """    print("前置鉤子函數(shù),處理依賴參數(shù)", request)    json_data["verification_code"] = get_verification_code()    return json_data

定義一個(gè)add_authentication_headers函數(shù),它是一個(gè)前置鉤子函數(shù)。在這個(gè)鉤子函數(shù)中,我們通過調(diào)用get_access_token函數(shù)獲取訪問令牌,并將其添加到請(qǐng)求的Authorization頭信息中。emO28資訊網(wǎng)——每日最新資訊28at.com

通過注冊(cè)該鉤子函數(shù),每次發(fā)送請(qǐng)求前都會(huì)自動(dòng)添加認(rèn)證信息,無需在每個(gè)測(cè)試用例中重復(fù)編寫。emO28資訊網(wǎng)——每日最新資訊28at.com

切菜前的工具箱:封裝公共方法

def get_verification_code():    # 實(shí)現(xiàn)獲取驗(yàn)證碼的邏輯    return "YOUR_VERIFICATION_CODE"

上述代碼是可以是一些公共函數(shù),以便全局使用,比如我們這里寫一些獲取驗(yàn)證碼的方法emO28資訊網(wǎng)——每日最新資訊28at.com

煮菜:處理依賴參數(shù)

處理一些依賴參數(shù),例如在注冊(cè)用戶之前需要獲取一個(gè)驗(yàn)證碼,并將驗(yàn)證碼添加到注冊(cè)請(qǐng)求中。emO28資訊網(wǎng)——每日最新資訊28at.com

@hooks.after_requestdef after_dependent_parameters(request, response):    """    處理后置    """    print("發(fā)送請(qǐng)求后執(zhí)行", request, "后置鉤子函數(shù),處理依賴參數(shù)", response)    return response

我們又定義了一個(gè)后置鉤子函數(shù)。在這個(gè)鉤子函數(shù)中,我們調(diào)用after_dependent_parameters函數(shù)處理一些依賴數(shù)據(jù),并返回任意結(jié)果。emO28資訊網(wǎng)——每日最新資訊28at.com

通過注冊(cè)該鉤子函數(shù),每次發(fā)送請(qǐng)求前以及發(fā)送請(qǐng)求后都會(huì)自動(dòng)處理依賴參數(shù),使我們的測(cè)試用例更加簡(jiǎn)潔和可維護(hù)。emO28資訊網(wǎng)——每日最新資訊28at.com

上菜:執(zhí)行測(cè)試用例

可以按照這種方式執(zhí)行測(cè)試用例,并觀察鉤子函數(shù)的作用。:emO28資訊網(wǎng)——每日最新資訊28at.com

if __name__ == "__main__":    res = test_user_registration  # 執(zhí)行測(cè)試    print("打印看看響應(yīng)結(jié)果",res)

輸出結(jié)果如下:emO28資訊網(wǎng)——每日最新資訊28at.com

emO28資訊網(wǎng)——每日最新資訊28at.com

執(zhí)行test_user_registration()函數(shù)來執(zhí)行我們的測(cè)試用例,但是這個(gè)測(cè)試用例在前面已經(jīng)被我們注冊(cè)了很多鉤子函數(shù),所以不需要額外處理,我們?cè)谫I菜這部分就已經(jīng)實(shí)現(xiàn)了,通過不同的函數(shù)名,執(zhí)行不同的鉤子函數(shù),非常靈活,擴(kuò)展性非常強(qiáng)。emO28資訊網(wǎng)——每日最新資訊28at.com

吃飽擦嘴

以上就是勇哥使用鉤子函數(shù)在自動(dòng)化接口測(cè)試中實(shí)現(xiàn)了對(duì)HTTP請(qǐng)求的增強(qiáng)和擴(kuò)展的示例和思路,希望能夠?yàn)楦魑辉谧詣?dòng)化接口測(cè)試中的工作帶來一些啟發(fā)和幫助。emO28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-10475-0.html優(yōu)化自動(dòng)化接口測(cè)試:利用鉤子函數(shù)增強(qiáng)HTTP請(qǐng)求處理

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: C語言操作寄存器和函數(shù)指針

下一篇: 別再用 “! = null” 做判空了!

標(biāo)簽:
  • 熱門焦點(diǎn)
Top