07-Httprunner-hook机制

简介: 07-Httprunner-hook机制

前言

  • HttpRunner 从 1.4.5 版本开始实现了全新的 hook 机制,可以在请求前和请求后调用钩子函数。
  • hook 机制分为两个层级:测试用例层面(testcase)和 测试步骤层面(teststep)

关键字

  • 在 YAML/JSON 测试步骤的 test 中新增关键字 setup_hooks 和 teardown_hooks。
  • setup_hooks: 在 HTTP 请求发送前执行 hook 函数,主要用于准备工作;也可以实现对请求的 request 内容进行预处理。
  • teardown_hooks: 在 HTTP 请求发送后执行 hook 函数,主要用于测试后的清理工作;也可以实现对响应的 response 进行修改,例如进行加解密等处理
  • hook 函数的定义放置在项目的 debugtalk.py 中,在 YAML/JSON 中调用 hook 函数仍然是采用 KaTeX parse error: Expected '}', got 'EOF' at end of input: {func(a, $b)} 的形式

编写hook函数

  • 在项目根目录新建debugtalk.py(固定名称,不要自定义)
def hook_print(msg):
    print(msg)

测试用例层面(testcase)

  • httprunner 3.x 版本在 config 中不支持setup_hook和teardown_hook

测试步骤层面(teststep)

  • 传递自定义参数

yaml

config:
    name: "request methods testcase with functions"
    variables:
        foo1: config_bar1
        foo2: config_bar2
        expect_foo1: config_bar1
        expect_foo2: config_bar2
    base_url: "https://postman-echo.com"
    verify: False
    export: ["foo3"]
teststeps:
-
    name: get with params
    variables:
        foo1: bar11
        foo2: bar21
    request:
        method: GET
        url: /get
        params:
            foo1: $foo1
            foo2: $foo2
        headers:
            User-Agent: HttpRunner
    setup_hooks:
        - ${hook_print(setup)}   #  使用hook
    teardown_hooks:
        - ${hook_print(teardown)}
    extract:
        foo3: "body.args.foo2"
    validate:
        - eq: ["status_code", 200]
        - eq: ["content.args.foo1", "bar11"]
        - eq: ["content.args.sum_v", "3"]
        - eq: ["content.args.foo2", "bar21"]
  • $request参数:在测试步骤层面的 setup_hooks 函数中,除了可传入自定义参数外,还可以传入 $request,该参数对应着当前测试步骤 request 的全部内容

示例

def setup_hook_prepare_kwargs(request):
    if request["method"] == "POST":
        content_type = request.get("headers", {}).get("content-type")
        if content_type and "data" in request:
            # if request content-type is application/json, request data should be dumped
            if content_type.startswith("application/json") and isinstance(request["data"], (dict, list)):
                request["data"] = json.dumps(request["data"])
            if isinstance(request["data"], str):
                request["data"] = request["data"].encode('utf-8')
def setup_hook_httpntlmauth(request):
    if "httpntlmauth" in request:
        from requests_ntlm import HttpNtlmAuth
        auth_account = request.pop("httpntlmauth")
        request["auth"] = HttpNtlmAuth(
            auth_account["username"], auth_account["password"])
  • $response参数:在测试步骤层面的 teardown_hooks 函数中,除了可传入自定义参数外,还可以传入 $response,该参数对应着当前请求的响应实例(requests.Response)
def teardown_hook_sleep_N_secs(response, n_secs):
    """ sleep n seconds after request
    """
    if response.status_code == 200:
        time.sleep(0.1)
    else:
        time.sleep(n_secs)


相关文章
|
iOS开发 开发者
iOS 上架报错:无法添加以供审核
iOS 上架报错:无法添加以供审核
|
运维 监控 安全
云计算MSP行业调研报告
# 1. 概述 ## 1.1 背景和概念 企业上云是当前的大势所趋,但企业上云并非坦途。随着业务、数据等向云端迁移,企业在上云过程中会各种复杂的问题,比如平台选择、系统迁移、多云管理、应用优化以及成本核算和安全管理等问题。要解决这些问题,就需要专业的团队来指导,因此诞生了云MSP。 云MSP即云管理服务提供商(Cloud Management Service Provider),通常是指对接
5115 0
云计算MSP行业调研报告
双T型振荡器主要特点和工作原理介绍
双T振荡器是另一种类型的RC振荡器,它产生正弦波输出,用于类似于电桥桥振荡器的固定频率应用。双T型振荡器在反相放大器的输出和输入之间的反馈回路(因此得名)中使用两个“Tee”形 RC 网络。
2820 0
双T型振荡器主要特点和工作原理介绍
|
12月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
机器学习/深度学习 数据可视化 算法
YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
2081 7
YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
|
存储 自然语言处理 搜索推荐
校园社交圈子系统网站 校园社交圈子系统用户注册与登录 校园社交圈子系统信息发布与审核 校园社交圈子系统搜索功能优化 校园社交圈子系统数据存储与处理
校园社交圈子系统网站是面向大学生的在线社交平台,提供用户注册与登录、信息发布与分享、搜索与发现、数据存储与处理等功能。用户可通过手机号、邮箱或第三方账号注册登录,发布多种信息并接受审核。平台优化了搜索功能,支持关键词和高级搜索,确保信息质量和安全性。数据存储采用分布式数据库和主从复制技术,保障数据安全与高效处理。
374 3
|
网络安全 数据安全/隐私保护
使用静态IP时出现“代理检测失败”的原因是什么?
随着数字化时代的加速发展,网络安全与隐私保护成为核心需求,HTTP凭借其独特优势成为新时代热门选择。本文分析了“代理检测失败,请确认代理IP的有效性”这一问题,主要原因包括:代理IP失效、配置错误、网络不稳定、类型不匹配及请求频率过高。解决建议为检查IP有效性、确保正确配置、选择合适代理类型并控制请求频率。希望这能帮助您解决问题!
1139 9
使用静态IP时出现“代理检测失败”的原因是什么?
|
安全 测试技术 API
如何实现API接口的自动化测试?
实现API接口的自动化测试涉及多个关键步骤:确定测试范围和目标、编写测试用例、选择自动化测试工具、搭建测试环境、编写测试脚本、执行测试、分析结果和回归测试。选择合适的工具和考虑团队熟悉度是成功的关键。常用工具包括Postman、JMeter和SoapUI。通过这些步骤和工具,可以有效提高测试效率和质量,确保API的稳定性和可靠性。
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:跨平台模型移植与部署
【7月更文挑战第10天】 使用Python实现深度学习模型:跨平台模型移植与部署
960 1
|
存储 缓存 负载均衡
基于C++的高性能分布式缓存系统设计
基于C++的高性能分布式缓存系统设计
631 1