HttpRunner3.x(7) hook函数

目录

调用 hook 函数

测试用例层面(testcase)-3.1.11不支持

测试步骤层面(teststep)

编写hook函数

请求request预处理

返回 response 处理


HttpRunner 从 1.4.5 版本开始实现了全新的 hook 机制,可以在请求前和请求后调用钩子函数。

调用 hook 函数

hook 机制分为两个层级:

  • 测试用例层面(testcase)
  • 测试步骤层面(teststep)

测试用例层面(testcase)-3.1.11不支持

在 YAML/JSON 测试用例的 config 中新增关键字 setup_hooks 和 teardown_hooks。

  • setup_hooks: 在整个用例开始执行前触发 hook 函数,主要用于准备工作。
  • teardown_hooks: 在整个用例结束执行后触发 hook 函数,主要用于测试后的清理工作。
- config:
    name: basic test with httpbin
    base_url: http://127.0.0.1:3458/
    setup_hooks:
        - ${hook_print(setup)}
    teardown_hooks:
        - ${hook_print(teardown)}

这里看3.1.11源码,发现config中的setup_hooks和teardown_hooks被注释掉了,所以不起作用。 

测试步骤层面(teststep)

在 YAML/JSON 测试步骤的 test 中新增关键字 setup_hooks 和 teardown_hooks。

  • setup_hooks: 在 HTTP 请求发送前执行 hook 函数,主要用于准备工作;也可以实现对请求的 request 内容进行预处理。
  • teardown_hooks: 在 HTTP 请求发送后执行 hook 函数,主要用于测试后的清理工作;也可以实现对响应的 response 进行修改,例如进行加解密等处理。

config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password: ${get_account()}
#    setup_hooks:
#        - ${testcase_set_up(setup)}
#    teardown_hooks:
#        - ${testcase_tear_down(teardown)}
teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    setup_hooks:
        - ${teststep_set_up()}
    teardown_hooks:
        - ${teststep_tear_down()}
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

编写hook函数

hook 函数的定义放置在项目的 debugtalk.py 中,在 YAML/JSON 中调用 hook 函数仍然是采用 ${func($a, $b)} 的形式。

对于测试用例层面的 hook 函数,与 YAML/JSON 中自定义的函数完全相同,可通过自定义参数传参的形式来实现灵活应用。


def teststep_set_up():
    logging.info("开始执行测试步骤")
    print("开始")
def teststep_tear_down():
    logging.info("测试步骤执行结束")
    print("结束")

 

 

对于单个测试用例层面的 hook 函数,除了可传入自定义参数外,还可以传入与当前测试用例相关的信息,包括请求的 $request 和响应的 $response,用于实现更复杂场景的灵活应用。

请求request预处理

针对请求request 发出去的参数预处理,也可以用到 setup_hooks,需传一个内置 request 参数

在测试步骤层面的 setup_hooks 函数中,除了可传入自定义参数外,还可以传入 $request,该参数对应着当前测试步骤 request 的全部内容。因为 request 是可变参数类型(dict),因此该函数参数为引用传递,当我们需要对请求参数进行预处理时尤其有用。

示例:

def get_request(request):
    """输出请求body"""
    print("请求body:",request.get("req_json"))

 

 

返回 response 处理

在测试步骤层面的 teardown_hooks 函数中,除了可传入自定义参数外,还可以传入 $response,该参数对应着当前请求的响应实例(requests.Response)。

示例:

def get_reponse(response):
    print("返回response status_code:", response.status_code)

config:
    name: "登录成功"
    variables:
        password: tester
        expect_foo2: config_bar2
    base_url: "https://api.pity.fun"
    verify: False
    export:
        - token
    parameters:
        username-password: ${get_account()}
#    setup_hooks:
#        - ${testcase_set_up(setup)}
#    teardown_hooks:
#        - ${testcase_tear_down(teardown)}
teststeps:
-
    name: 登录成功
    variables:
        foo1: bar1
    setup_hooks:
        - ${get_request($request)}
    teardown_hooks:
        - ${get_reponse($response)}
    request:
        method: POST
        url: /auth/login
        headers:
            Content-Type: "application/json"
        json:
            {"username":"$username","password":"$password"}
    extract:
        token: body.data.token
    validate:
        - eq: ["status_code", 200]
        - eq: [body.code,0]
        - eq: [body.msg,"登录成功"]

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6074.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE——方法的使用

目录 一、方法的概念及使用 1、什么是方法(method) 2、方法定义 3、方法调用的执行过程 4、实参和形参的关系 二、方法重载 1、为什么需要方法重载 2、方法重载概念 3、方法签名 三、递归 1、递归的概念 2、递归执行过程分析 3、递归练习 一、方法的概念及使用 1、…

Java 你还在用lsit.contain做去重? 你是故意的还是不小心的?

前言 最近又是一轮代码review , 发现了一些实现去重的代码,在使用 lsit.contain ...... 如: 我沉思,是不是其实很多初学者也存在这种去重使用问题? 所以我选择把这个事情整出来,分享一下。 正文 首先是造出一个 List&l…

Linux基础教程

Linux 目标 ​ Linux概述【了解】 ​ Linux网络连接三种模式【了解】 Linux目录结构【掌握】 Linux常用命令【掌握】 Linux操作目录的命令【掌握】 Linux操作文件的命令【掌握】 Linux的Vi编辑器【会用】 Linux打包与解压命令【掌握】 一、Linux概述 1、Linux的概述…

动力节点王鹤SpringBoot3学习笔记——第五章 说说Web服务

目录 第五章 说说Web服务 5.1 高效构建Web应用 5.1.1 html页面视图 5.1.2 JSON视图 5.1.3 给项目加favicon 5.2 Spring MVC 5.2.1 控制器Controller 5.2.1.1 匹配请求路径到控制器方法 5.2.1.2 RequestMapping 5.2.1.3 控制器方法参数类型与可用返回值类型 5…

HashMap底层数据结构

TreeMap TreeMap的底层是红黑树,是自平衡的二叉查找树。 在查找元素时会从左子树或右子树查找,和元素一个一个进行比较,对于大数量的查找的场景TreeMap不适合(HashMap解决了这个问题)。 TreeMap的好处,是…

隐私计算 FATE - 多分类神经网络算法测试

一、说明 本文分享基于 Fate 使用 横向联邦 神经网络算法 对 多分类 的数据进行 模型训练,并使用该模型对数据进行 多分类预测。 二分类算法:是指待预测的 label 标签的取值只有两种;直白来讲就是每个实例的可能类别只有两种 (0 或者 1)&…

两个数组的交集(力扣刷题)

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/intersection-of-two-arrays 说…

人大女王金融硕士——站在一个更高的起点,拓宽自己的眼界

俗话说:“视野所及,心之所止”。做任何事情,最重要的是眼光。眼界不一样,就会有不一样的人生。站得更高才能看得更远,看得更远才能收获更多。人民大学与加拿大女王大学金融硕士项目为我们提供在职读研平台,…

Python机器学习:最大熵模型

信息论里,熵是可以度量随机变量的不确定性的,已经证明的:当随机变量呈均匀分布的时候,熵值最大,一个有序的系统有着较小的熵值,无序系统的熵值则较大。 机器学习里面,最大熵原理假设&#xff1…

【HAL库】HAL库STM32cubemx快速使用

文章目录整体框图一、基础工程1 新建工程2 配置RCC3 配置SYS4 工程设置5 生成代码6 keil设置下载&复位二、必备外设1 目录规范2 LED2 RTC3 USART4 KEY三、其他外设1 OLED(模拟IIC、模拟SPI)2 BH1750光强检测3 MQ2烟雾检测3 MQ4甲醛检测4 DHT11温湿度…

基于蓄电池进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…

第04章_运算符

第04章_运算符 🏠个人主页:shark-Gao 🧑个人简介:大家好,我是shark-Gao,一个想要与大家共同进步的男人😉😉 🎉目前状况:23届毕业生,目前在某公…

该不该放弃嵌入式,单片机这条路?

本文几乎浓缩了我从业10几年的精华,内容涵盖我转行、打工、创业的经历。 建议从头到尾不要错过一字一句,因为字里行间的经验之谈,或许能成为你人生重要转折点。 全文3700多字,写了6个多小时,如果你赶时间,建…

【17】核心易中期刊推荐——深度学习 | 遥感图像处理

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

【学会这几个VSCode插件,让你的Python代码更优秀】

VSCode(Visual Studio Code)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器,一般主要用于轻量级的编程代码工作,就非常适合Python,同时在前端开发方面也有举足轻重的地位。但如果想用于…

蓝桥杯集训·每日一题Week3

Trie AcWing 835. Trie字符串统计(算法基础课) 思路: Trie是一种高效地存储和查找字符串集合的数据结构,适用于字符串不太复杂的情况。其形状是一个以0为根节点的树,查询和插入的效率都比较高,有插入和查询两种操作。…

制造业的寒冬真的要来了吗?

制造业的寒冬真的要来了吗?其实当前,我国制造业发展水平是处于全球第三阵列,排名第四的: 但能处第三序列靠前,还是因为“规模发展”起了重要支撑——依靠规模拉动发展。所以如果从“质量效益”、“结构优化”、“持续发…

【AI探索】我问了ChatGPT几个终极问题

终于尝试了一把ChatGPT的强大之处,问了一下关心的几个问题: chatGPT现在在思考吗?有没有什么你感兴趣的问题? 你认为AI会对人类产生哪些方面的影响? 你对人类所涉及到的学科有了解吗?你认为在哪些方面与人类…

JetPack Compose之Modifier修饰符

前言 在Compose中,每一个组件都是带有Compose注解的函数,被称为Composable。Compose已经预置了很多的Compose UI组件,这些组件都是基于Material Design规范设计的,例如Button,TextField,TopAPPBar等。在布…

IOC、AOP、和javca面试题

一、 1、控制反转(IOC) 将创建管理对象的工作交给容器来做。在容器初始化(或在某个时间节点)通过反射机制创建好对象,在使用时直接从容器中获取。 控制反转:将对象的控制权反过来交给容器管理。 IOC实现…
最新文章