成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

優化自動化接口測試:利用鉤子函數增強HTTP請求處理

開發
本文將以一個實際的示例場景為例,詳細介紹如何利用鉤子函數進行自動化接口測試,并展示如何設計和應用這些鉤子函數。

在自動化接口測試中,我們經常需要發送HTTP請求來模擬用戶的操作并驗證接口的正確性。夠靈活處理請求參數、添加認證信息以及處理依賴參數。這正是鉤子函數的用武之地。

下面勇哥將以一個實際的示例場景為例,詳細介紹如何利用鉤子函數進行自動化接口測試,并展示如何設計和應用這些鉤子函數。

鉤子函數設計

遙想當年,勇哥一開始對【鉤子】也是懵逼的!!鉤子函數就是在特定事件發生前后執行的函數。通過鉤子我們可以在 HTTP 請求的不同階段執行花里胡哨的自定義操作,如修改URL、更新請求頭、請求參數加密加簽、處理響應結果...

上代碼:

```python
class Hooks:
    def __init__(self):
        self.before_request_funcs = {}
        self.after_request_funcs = {}

    def before_request(self, func):
        """
        注冊 before_request 鉤子函數
        """
        self.before_request_funcs[func.__name__] = func
        return func

    def after_request(self, func):
        """
        注冊 after_request 鉤子函數
        """
        self.after_request_funcs[func.__name__] = func
        return func

    def run_before_request_hooks(self, func_names, request, json_data):
        """
        執行 before_request 鉤子函數
        """
        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):
        """
        執行 after_request 鉤子函數
        """
        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

場景:注冊用戶

模擬用戶注冊,并驗證注冊接口的正確性。同時,在每個請求中自動添加認證信息和處理依賴參數。

錢包: 封裝請求

有錢才能吃飯,所以我們看看怎么封裝代碼:

def req(url, method, **kwargs):
    """
    發送請求并返回響應對象
    """
    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

上述代碼中,勇哥先封裝一個http請求,在里面實現不同位置調用鉤子函數

買菜:寫測試用例

常規玩法,干百度。

def test_user_registration():
    url = "http://www.baidu.com"
    # url = "http://jsonplaceholder.typicode.com/posts"
    data = {
        "userId": "testuser",
        "title": "password123",
        "body": "測試玩家勇哥"
    }
    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)

在上述測試用例中,我們使用req函數發送了一個POST請求來模擬用戶注冊,并對返回的響應進行了斷言驗證。

切菜:注冊前置鉤子函數

寫N個前置鉤子函數,發送注冊請求前自動添加認證信息:

@hooks.before_request
def add_authentication_headers(request, json_data):
    """
    添加認證頭信息
    """
    print("前置鉤子函數,添加認證頭信息", request)
    request.headers["Authorization"] = "Bearer YOUR_AUTH_TOKEN"
    return json_data


@hooks.before_request
def handle_dependent_parameters(request, json_data):
    """
    處理依賴參數
    """
    print("前置鉤子函數,處理依賴參數", request)

    json_data["verification_code"] = get_verification_code()
    return json_data

定義一個add_authentication_headers函數,它是一個前置鉤子函數。在這個鉤子函數中,我們通過調用get_access_token函數獲取訪問令牌,并將其添加到請求的Authorization頭信息中。

通過注冊該鉤子函數,每次發送請求前都會自動添加認證信息,無需在每個測試用例中重復編寫。

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

def get_verification_code():
    # 實現獲取驗證碼的邏輯
    return "YOUR_VERIFICATION_CODE"

上述代碼是可以是一些公共函數,以便全局使用,比如我們這里寫一些獲取驗證碼的方法

煮菜:處理依賴參數

處理一些依賴參數,例如在注冊用戶之前需要獲取一個驗證碼,并將驗證碼添加到注冊請求中。

@hooks.after_request
def after_dependent_parameters(request, response):
    """
    處理后置
    """
    print("發送請求后執行", request, "后置鉤子函數,處理依賴參數", response)

    return response

我們又定義了一個后置鉤子函數。在這個鉤子函數中,我們調用after_dependent_parameters函數處理一些依賴數據,并返回任意結果。

通過注冊該鉤子函數,每次發送請求前以及發送請求后都會自動處理依賴參數,使我們的測試用例更加簡潔和可維護。

上菜:執行測試用例

可以按照這種方式執行測試用例,并觀察鉤子函數的作用。:

if __name__ == "__main__":
    res = test_user_registration  # 執行測試
    print("打印看看響應結果",res)

輸出結果如下:

執行test_user_registration()函數來執行我們的測試用例,但是這個測試用例在前面已經被我們注冊了很多鉤子函數,所以不需要額外處理,我們在買菜這部分就已經實現了,通過不同的函數名,執行不同的鉤子函數,非常靈活,擴展性非常強。

吃飽擦嘴

以上就是勇哥使用鉤子函數在自動化接口測試中實現了對HTTP請求的增強和擴展的示例和思路,希望能夠為各位在自動化接口測試中的工作帶來一些啟發和幫助。

責任編輯:趙寧寧 來源: 測試玩家勇哥
相關推薦

2011-01-20 10:17:25

ibmdwWeb

2010-09-27 09:13:36

Visual Stud

2017-12-17 21:58:18

2024-04-30 08:00:00

人工智能自動化文件處理

2023-06-19 08:23:28

kubernetes容器

2021-05-24 11:55:55

網絡安全Windows鉤子函數

2023-09-13 11:40:12

2022-12-26 12:30:28

接口測試

2011-05-20 17:59:06

回調函數

2024-09-29 15:32:13

自動化測試開發

2012-02-27 17:34:12

Facebook自動化

2021-09-03 09:56:18

鴻蒙HarmonyOS應用

2022-02-17 10:37:16

自動化開發團隊預測

2013-05-16 10:58:44

Android開發自動化測試

2014-04-16 14:15:01

QCon2014

2018-05-11 08:29:10

Python自動化測試數據驅動

2018-05-11 13:39:05

PythonCSV接口測試

2021-12-30 07:33:03

數據庫

2011-12-23 17:09:57

自動化測試

2021-06-30 19:48:21

前端自動化測試Vue 應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩网站在线观看 | 国产亚洲欧美日韩精品一区二区三区 | 久草精品在线 | 国产真实乱对白精彩久久小说 | 99精品99 | 91精品91久久久 | 欧美久久视频 | 亚洲精品在线免费 | 免费网站国产 | 亚洲美女网站 | 91久操网| 免费观看www7722午夜电影 | 国内自拍偷拍 | 欧美日韩国产一区二区三区 | 91在线免费观看网站 | 剑来高清在线观看 | 国产精品国产精品国产专区不蜜 | www.日日干| 91九色视频 | 色爱区综合| 一区二区三区在线播放 | 国产精品亚洲成在人线 | 欧美日韩在线一区二区三区 | 亚洲视频在线观看一区二区三区 | 国产欧美精品区一区二区三区 | 国产毛片久久久久久久久春天 | 国产成人免费视频网站高清观看视频 | 国产欧美精品一区 | 玖玖视频国产 | 亚洲大片一区 | 亚洲精品久久久久久久久久吃药 | 国产有码 | 午夜精品福利视频 | 久久精品手机视频 | 免费视频一区二区 | 亚洲精品日韩一区二区电影 | 91精品国产高清久久久久久久久 | 91精品久久久久久久久 | 午夜视频一区 | 欧美日韩久| 亚洲一区国产 |