最详细整理,HttpRunner接口自动化框架Hook机制详解(详细)

news/2024/11/8 9:39:36/

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

httprunner 4.x可以支持hook机制,在发送请求前做一些预处理或在请求完成后后置处理

setup_hooks :主要用于处理接口的前置的准备工作,也可以对请求 request 参数签名加密等操作
teardown_hooks:主要用于后置清理工作,也可以对返回 respone 解密等操作

测试步骤添加hook

在项目根目录新建 debugtalk.py,名称一定要一样

# debugtalk.pydef hook_up():print("前置操作:setup!")def hook_down():print("后置操作:teardown!")

只在第一个步骤添加 setup_hooks 和 teardown_hooks
test_h.yml

config:name: logincasevariables: {}teststeps:
-name: step1 loginrequest:url: http://www.example.commethod: GETsetup_hooks:- ${hook_up()}teardown_hooks:- ${hook_down()}

执行用例

hrp run test_h.yml --gen-html-report

执行用例发现有报错

8:58AM ERR gRPC Call() failed error="rpc error: code = Unknown desc = Exception calling application: Function return type<class 'NoneType'> not supported!" funcArgs=[] funcName=hook_up
8:58AM ERR call function failed error="rpc error: code = Unknown desc = Exception calling application: Function return ty
pe <class 'NoneType'> not supported!" arguments=[] funcName=hook_up
8:58AM ERR run step end error="run setup hooks failed: rpc error: code = Unknown desc = Exception calling application: Fu
nction return type <class 'NoneType'> not supported!: call function failed" step="step1 login" success=false type=request
8:58AM ERR [Run] run testcase failed error="abort running due to failfast setting: run setup hooks failed: rpc error: cod
e = Unknown desc = Exception calling application: Function return type <class 'NoneType'> not supported!: call function f
ailed"

提示函数不能return NoneType (可能是go 引擎执行的时候不支持return None, 使用python的 pytest执行没问题)

稍微改下,给个return 即可

# debugtalk.pydef hook_up():print("前置操作:setup!")return ""def hook_down():print("后置操作:teardown!")return ""

请求 request 预处理

针对请求request 发出去的参数预处理,也可以用到 setup_hooks,需传一个内置 request 参数,debugtalk.py代码如下

def request_sign(request):"""请求sign签名"""print("请求body:", request.get("body"))# 新增 sign 参数request["body"]["sign"] = "sign xxxxxxxxxxxxxxx"print("sign 签名后请求body:", request.get("body"))return request

test_h1.yml

config:name: logincasevariables: {}teststeps:
-name: step1 loginrequest:url: http://www.example.commethod: POSTjson:user: testpsw: "123456"setup_hooks:- ${request_sign($request)}

执行用例

hrp run test_h1.yml --gen-html-report

查看报告,请求参数添加 sign 签名成功

这里请求预处理跟之前3.x 版本写法有一点点区别,如果想用执行的hrun去执行,需改下debugtalk.py 文件内容

# debugtalk.py
def request_sign(request):"""请求sign签名"""print("请求body:",request.get("req_json"))# 新增 sign 参数request["req_json"]["sign"] = "sign xxxxxxxxxxxxxxx"print("sign 签名后请求body:", request.get("req_json"))return request

(获取请求参数的 body 改成 req_json)

返回 response 处理
如果需要在接口返回后,对返回的结果处理,可以添加respone请求参数,比如我把返回的body改成了"momo"

def response_status(response):"""修改返回状态码"""print("返回response body:", response["body"])response["body"] = "momo"print("修改后返回response body:", response["body"])return response

这对于返回的body是加密的数据,可以自己去解密后返回解密内容很有帮助

config:name: logincasevariables: {}teststeps:
-name: step1 loginrequest:url: http://www.example.commethod: POSTjson:user: testpsw: "123456"teardown_hooks:- ${response_status($response)}validate:- eq: [status_code, 200]- eq: [body, "momo"]
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只要你愿意,每天都可以是新的开始;永远不要低估自己的潜力和能力,向着目标坚定前行;即使遇到挫折,也要保持勇气和信念,相信未来一定会更美好。

只有敢于承担,才能成就伟业;只有奋斗不息,才能收获胜利;只有坚持不懈,才能迎来辉煌。让我们一起勇往直前,不断超越自我,不停歇地追逐梦想,创造属于自己的精彩人生!

生命太短,时间太宝贵。每一刻都要珍惜,不留遗憾。只有勇敢奋斗,才能收获真正的幸福和成功。坚持自己的梦想,永不放弃,相信自己,你一定会成为更好的自己。让我们一起努力,迎接未来的挑战!


http://www.ppmy.cn/news/296249.html

相关文章

怎么转换英文音频成文字?英文音频转文字app分享

两位朋友正在讨论如何将一段英文讲座的音频转换成文字&#xff0c;以便于学习和理解。 Sophia&#xff1a;嗨&#xff0c;我最近听了一段非常精彩的英文讲座&#xff0c;但是对于我来说&#xff0c;理解听到的内容有些困难。你知道有什么方法可以将英文音频转换成文字吗&#…

博客系统测试用例设计之自动化测试

测试用例设计之自动化测试 &#x1f337; 一 测试用例设计&#x1f33a; 1 功能测试&#x1f338; &#xff08;1&#xff09;登录功能&#x1f338; &#xff08;2&#xff09;列表页功能&#x1f338; &#xff08;3&#xff09;编辑博客功能&#x1f338; &#xff08;4&…

Netty的高性能之道

1.背景 最近看到gitHub上有一个开源项目&#xff0c;通过使用 Netty4 Thrift 压缩二进制编解码技术&#xff0c;他们实现了 10W TPS&#xff08;1K 的复杂 POJO 对象&#xff09;的跨节点远程服务调用。相比于传统基于 Java 序列化 BIO&#xff08;同步阻塞 IO&#xff09;的…

JMeter测试笔记(四):逻辑控制器

引言&#xff1a; 进行性能测试时&#xff0c;我们需要根据不同的情况来设置不同的执行流程&#xff0c;而逻辑控制器可以帮助我们实现这个目的。 在本文中&#xff0c;我们将深入了解JMeter中的逻辑控制器&#xff0c;包括简单控制器、循环控制器等&#xff0c;并学习如何正…

SpringBoot 源码分析初始化应用上下文(1)-createApplicationContext

前言&#xff1a;springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…

基于Python的接口自动化-HTTP接口基本组成和网页构成

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 【自动化测试工程师学习路线】 引言 在我们进行接口测试时&#xff0c;了解HTTP接口的基本组成和网页构成是非常重要的。 而Python作为一门功能强大、易学易用的编程…

服务器电源线的分类及应用

服务器电源线是由插头、电缆和插座三个部分组成&#xff0c;主要是用来连接服务器和电源分配器。而各个国家根据连接器类型和电压等级的不同&#xff0c;有着不同的电源线标准&#xff0c;这样导致服务器电源线的分类众多&#xff0c;选择合适的服务器电源线在网络系统中是非常…

服务器ups作用,机房UPS电源对服务器太重要了

中心机房的UPS太重要了&#xff0c;前不久就出现过停电坏了一个磁盘陈列硬盘的事故&#xff0c;一个2T的硬盘坏了&#xff0c;还好有一个备用的硬盘使用&#xff0c;否则磁盘陈列里的资料就岌岌可危了。服务器多了&#xff0c;UPS的重要性尤其重要&#xff0c;学校周边施工&…