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

news2024/11/25 10:48:18

目录:导读

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


前言

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

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

测试步骤添加hook

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

# debugtalk.py


def hook_up():
    print("前置操作:setup!")

def hook_down():
    print("后置操作:teardown!")

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

config:
    name: logincase
    variables: {}

teststeps:
-
    name: step1 login
    request:
        url: http://www.example.com
        method: GET
    setup_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.py


def 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: logincase
    variables: {}

teststeps:
-
    name: step1 login
    request:
        url: http://www.example.com
        method: POST
        json:
           user: test
           psw: "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: logincase
    variables: {}

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软体机器人,刚柔软机器人仿真建模,干货满满,直接上图!

一、 背景&#xff1a; 软体机器人技术是近年来机器人领域最为热门的研究领域之一。软体机器人具有天然的柔 性、自适应性、低成本和被动安全性&#xff0c;在人机交互、医疗服务等领域具有广泛的应用前景。同时&#xff0c; 软体机器人的研究涉及软材料、机构设计、仿生学、微…

全链路压测

一般区分为两种&#xff1a;测试环境和生产环境压测。因生产环境的压测和真实用户的使用环境完全一致&#xff0c;测试结果更具有参考性。 全链路的压测的实施一般需要给压测请求带一个压测标识&#xff0c;用于压测数据的数据落库&#xff0c;查询&#xff0c;缓存&#xff0c…

设备维修管理系统

设备维修管理系统能够有效提高设备管理水平和设备运行效率。它不仅能够帮助企业实现设备信息化管理&#xff0c;还可以快速定位设备故障&#xff0c;提高设备修复效率&#xff0c;从而更好地保障生产安全和生产效率。 凡尔码搭建设备维护保养管理系统主要由以下几个模块组成&am…

【TA100】图形 2.2 模型与材质基础

一、 渲染管线与模型基础 1.可编程渲染管线 ● 蓝色背景的&#xff1a;可编程管线 ● 顶点着色器&#xff1a;模型的顶点进行计算 ● 片元着色器&#xff1a;将光栅化阶段插值的信息进行计算 2.uv ● 纹理映射&#xff1a;任何3D物体的表面都是2D的→纹理就是一张图→纹理…

6个免费商用图片素材库,再也不用担心版权问题了

本期给大家分享6个免费可商用的视频素材网站&#xff0c;设计师、自媒体、视频剪辑有福啦&#xff0c;再也不用担心版权问题了&#xff0c;记得收藏起来哦~ 菜鸟图库 https://www.sucai999.com/pic.html#?vNTYxMjky 网站主要是为新手设计师提供免费素材的&#xff0c;素材的…

[CKA]考试之基于角色的访问控制-RBAC

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Context&#xff1a; 为部署流水线创建一个新的ClusterRole并将其绑定到范围为特定…

Pandas的to_sql()插入数据到mysql中所遇到的问题

使用pymysql驱动API&#xff0c;出现如下错误&#xff1a; DatabaseError: Execution failed on sql ‘SELECT name FROM sqlite_master WHERE type‘table’ AND name?;’: not all arguments converted during string formatting 1. pandas的数据表插入数据到mysql中所遇到…

王道考研数据结构代码总结(后四章)

目录 树基本概念与属性树的基本性质 图拓扑排序 本文包含王道考研讲课中所涉及的数据结构中的所有代码&#xff0c;当PPT代码和书上代码有所区别时以咸鱼的PPT为主&#xff0c;个人认为PPT上的代码比王道书上的代码要便于理解&#xff0c;此外&#xff0c;本博客也许会补充一些…

css01:顶部导航栏,左右分离布局

css01&#xff1a;顶部导航栏&#xff0c;左右分离布局 效果 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>顶部导航栏</title><style>body {margin: 0;padding: 0;}.top-nav {background-color: #ff…

Python采集二手车数据信息,看看啥车最得心意

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 环境使用: python 3.8 运行代码 pycharm 2022.3.2 辅助敲代码 专业版是付费的 <码可以免费用> 社区版是免费的 模块使用: 内置模块 无需安装 csv 第三方模块 需要安装的 requests >>> pip install req…

大数据可视化开源平台,一招让数据资源活泛起来!

在现代化办公环境中&#xff0c;数据资源也是非常重要的一种发展要素。有不少朋友会私信我们询问道&#xff1a;如何将企业内部的数据资源利用起来&#xff0c;真正发挥其价值为我所有&#xff1f;在这里&#xff0c;推荐大家了解大数据可视化开源平台&#xff0c;这是可以为企…

深度学习的各种卷积的总结

如果你听说过深度学习中不同种类的卷积&#xff08;比如 2D / 3D / 1x1 /转置/扩张&#xff08;Atrous&#xff09;/空间可分/深度可分/平展/分组/混洗分组卷积&#xff09;&#xff0c;并且搞不清楚它们究竟是什么意思&#xff0c;那么这篇文章就是为你写的&#xff0c;能帮你…

既然jmeter也能做接口自动化,为什么还需要pytest自己搭框架?

今天这篇文章呢&#xff0c;我会从以下几个方面来介绍&#xff1a; 1、首先介绍一下pytest框架 2、带大家安装Pytest框架 3、使用pytest框架时需要注意的点 4、pytest的运行方式 5、pytest框架中常用的插件 一、pytest框架介绍 pytest 是 python 的第三方单元测试框架&a…

微信如何群发消息?如何群发突破200上限?

相信每到各种节日的时候&#xff0c;很多人都会发布或收到微信好友的节日祝福或活动通知。群发已经是一件很普遍的事了。逢年过节&#xff0c;发个微信祝福&#xff0c;是维系关系的必须&#xff1b;发个活动通知&#xff0c;是为了告知客户&#xff0c;促进销售。 01 微信自带…

2023年最新网络安全面试题合集(附答案解析)

前言 为了拿到心仪的 Offer 之外&#xff0c;除了学好网络安全知识以外&#xff0c;还要应对好企业的面试。 作为一个安全老鸟&#xff0c;工作这么多年&#xff0c;面试过很多人也出过很多面试题目&#xff0c;也在网上收集了各类关于渗透面试题目&#xff0c;里面有我对一些…

佩戴舒适音质悦耳,试试这款耳夹式耳机,塞那Z51S Pro Max上手

蓝牙耳机很多人每天都用&#xff0c;工作学习的时候戴上&#xff0c;可以随便听听舒缓心情&#xff0c;随便哪个平台都有丰富的音乐、播客等类型的资源&#xff0c;听着听着就下班了。市面上蓝牙耳机的种类这两年多了不少&#xff0c;我目前用的是一款sanag塞那Z51S Pro Max&am…

从Android UI收集流的更安全方法

从Android UI收集流的更安全方法 在安卓应用中&#xff0c;通常从UI层收集Kotlin flows以显示屏幕上的数据更新。但是&#xff0c;为了确保不做过多的工作、浪费资源&#xff08;包括CPU和内存&#xff09;或在视图转到后台时泄漏数据&#xff0c;您需要收集这些flows。 在本…

(2023,语义混合)处理神经网络中语义和视觉对齐的差异

Addressing Discrepancies in Semantic and Visual Alignment in Neural Networks 公众号&#xff1a;EDPJ 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 4. 实验 5. 结果 6. 讨论与结论 参考 S. 总结 S.1 主要思想 S.2 语义混合 S.3 方法 0. 摘要 对于图像分类任…

苹果Vision Pro将引爆人机交互的重大变革

2023年6月6日&#xff0c;苹果发布了大家期待已久的Vision Pro&#xff0c;Vision Pro是一款专业级MR设备&#xff0c;融合了虚拟现实(VR)和增强现实(AR)技术&#xff0c;可以让用户完全沉浸在高分辨率显示内容中。允许用户以一种全新的方式在其周围的空间中查看APP。用户可以用…

unreal 5 实现角色拾取功能

要实现角色拾取功能&#xff0c;我们需要实现蓝图接口功能&#xff0c;蓝图接口主要提供的是蓝图和蓝图之间可以通信&#xff0c;接下来&#xff0c;跟着教程&#xff0c;实现一下角色的拾取功能。 首先&#xff0c;我们要实现一个就是可视区的物品在朝向它的时候&#xff0c;会…