当前位置:首页 > 科技  > 软件

优化自动化接口测试:利用钩子函数增强HTTP请求处理

来源: 责编: 时间:2023-09-18 21:41:57 454观看
导读在自动化接口测试中,我们经常需要发送HTTP请求来模拟用户的操作并验证接口的正确性。够灵活处理请求参数、添加认证信息以及处理依赖参数。这正是钩子函数的用武之地。下面勇哥将以一个实际的示例场景为例,详细介绍如何

在自动化接口测试中,我们经常需要发送HTTP请求来模拟用户的操作并验证接口的正确性。够灵活处理请求参数、添加认证信息以及处理依赖参数。这正是钩子函数的用武之地。bOW28资讯网——每日最新资讯28at.com

下面勇哥将以一个实际的示例场景为例,详细介绍如何利用钩子函数进行自动化接口测试,并展示如何设计和应用这些钩子函数。bOW28资讯网——每日最新资讯28at.com

bOW28资讯网——每日最新资讯28at.com

钩子函数设计

遥想当年,勇哥一开始对【钩子】也是懵逼的!!钩子函数就是在特定事件发生前后执行的函数。通过钩子我们可以在 HTTP 请求的不同阶段执行花里胡哨的自定义操作,如修改URL、更新请求头、请求参数加密加签、处理响应结果...bOW28资讯网——每日最新资讯28at.com

上代码:bOW28资讯网——每日最新资讯28at.com

```pythonclass 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

场景:注册用户

模拟用户注册,并验证注册接口的正确性。同时,在每个请求中自动添加认证信息和处理依赖参数。bOW28资讯网——每日最新资讯28at.com

钱包: 封装请求

有钱才能吃饭,所以我们看看怎么封装代码:bOW28资讯网——每日最新资讯28at.com

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请求,在里面实现不同位置调用钩子函数bOW28资讯网——每日最新资讯28at.com

买菜:写测试用例

常规玩法,干百度。bOW28资讯网——每日最新资讯28at.com

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请求来模拟用户注册,并对返回的响应进行了断言验证。bOW28资讯网——每日最新资讯28at.com

切菜:注册前置钩子函数

写N个前置钩子函数,发送注册请求前自动添加认证信息:bOW28资讯网——每日最新资讯28at.com

@hooks.before_requestdef add_authentication_headers(request, json_data):    """    添加认证头信息    """    print("前置钩子函数,添加认证头信息", request)    request.headers["Authorization"] = "Bearer YOUR_AUTH_TOKEN"    return json_data@hooks.before_requestdef 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头信息中。bOW28资讯网——每日最新资讯28at.com

通过注册该钩子函数,每次发送请求前都会自动添加认证信息,无需在每个测试用例中重复编写。bOW28资讯网——每日最新资讯28at.com

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

def get_verification_code():    # 实现获取验证码的逻辑    return "YOUR_VERIFICATION_CODE"

上述代码是可以是一些公共函数,以便全局使用,比如我们这里写一些获取验证码的方法bOW28资讯网——每日最新资讯28at.com

煮菜:处理依赖参数

处理一些依赖参数,例如在注册用户之前需要获取一个验证码,并将验证码添加到注册请求中。bOW28资讯网——每日最新资讯28at.com

@hooks.after_requestdef after_dependent_parameters(request, response):    """    处理后置    """    print("发送请求后执行", request, "后置钩子函数,处理依赖参数", response)    return response

我们又定义了一个后置钩子函数。在这个钩子函数中,我们调用after_dependent_parameters函数处理一些依赖数据,并返回任意结果。bOW28资讯网——每日最新资讯28at.com

通过注册该钩子函数,每次发送请求前以及发送请求后都会自动处理依赖参数,使我们的测试用例更加简洁和可维护。bOW28资讯网——每日最新资讯28at.com

上菜:执行测试用例

可以按照这种方式执行测试用例,并观察钩子函数的作用。:bOW28资讯网——每日最新资讯28at.com

if __name__ == "__main__":    res = test_user_registration  # 执行测试    print("打印看看响应结果",res)

输出结果如下:bOW28资讯网——每日最新资讯28at.com

bOW28资讯网——每日最新资讯28at.com

执行test_user_registration()函数来执行我们的测试用例,但是这个测试用例在前面已经被我们注册了很多钩子函数,所以不需要额外处理,我们在买菜这部分就已经实现了,通过不同的函数名,执行不同的钩子函数,非常灵活,扩展性非常强。bOW28资讯网——每日最新资讯28at.com

吃饱擦嘴

以上就是勇哥使用钩子函数在自动化接口测试中实现了对HTTP请求的增强和扩展的示例和思路,希望能够为各位在自动化接口测试中的工作带来一些启发和帮助。bOW28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10475-0.html优化自动化接口测试:利用钩子函数增强HTTP请求处理

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C语言操作寄存器和函数指针

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

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,“7
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
Top