jmeter自动调试系统接口配置流程

2023-10-27

1. 起因

   最近测试的同事需要用jmeter工具压测一下我们项目的接口,因为接口中有token或者加密登录密码等逻辑,有的地方需要从上一步接口中拿到结果作为下一步的参数,进行传递。因为涉及的有点麻烦,就帮测试看了下这个工具。顺便记录一下,帮助需要的人。
  以下是我配置好的一个jmeter文件截图及参考地址,百度网盘地址 ,提取码 pwcg
在这里插入图片描述

2. 需要了解的知识点

2.1 jmeter工具使用方法

   因为需要用到jmeter工具,所以简单的用法必须要会,首先从官网上下载一个jmeter工具,jmeter下载地址,然后下载下图的文件即可。当前我用的是5.3版本。
在这里插入图片描述
   至于使用方法,全面的还是搜专业的人介绍吧,我主要说接口的参数配置那块。

2.2 接口请求头

  这块知识点,如果要调试接口,那必须要了解整个接口的请求头,看下图,下图就是我在用chrome浏览器访问项目时,点开F12,调试的一个登录接口情况,我把其中一些没用的东西都去掉了,留下了一些主要用到的。

General
Request URL: http://127.0.0.1:15830/api/security/loginNew
Request Method: POST
Status Code: 200 

Response Headers
Connection: keep-alive
Content-Type: application/json;charset=UTF-8

Request Headers
Accept: application/json, text/plain
Content-Type: application/json;charset=UTF-8
Cookie: ynzl_jessionid=9550a16f-019e-4f86-b78d-65bf019e9e92; 

Request Payload
{username: "znxd",}
username: "znxd"
password: "aZNekASIbrGBVJDNgQE5Yb+GjNZd4anGJvpVMg8sYBurHVyTgY2e90MW4UkZORlwccpBSuhhV32/nc6+g+a3KyBT9XMSnR9YDylZUd9zdXKec2sz00BmcJP3Th2l8Z9JhJDXcYnSwY311RmuTOuUrxWNHd3B4FnLgsLRHwiPuV4="
captcha: "n86fy"

  其中General部分大家都清楚,请求地址和请求方式。

  往往大家容易忽略的就是Request Headers ,即请求接口的消息请求头配置,这块Content-TypeCookie忘记传,基本都会导致接口请求错误。
  Content-Type表示接口的请求参数格式,比如是json格式,那就必须设置为application/json,如果没有设置这个,那最下边的Request Payload里参数格式一定不是json,也会导致请求失败。如果是其他格式,那就要设置其他的。
  因为测试接口的时候,大家也要先用浏览器访问下项目,即F12里参考,那就也从下图里去参考复制即可。
在这里插入图片描述
  另外,对于cookie,这个要看项目框架怎么设计,像我们的项目简单,基本就依据cookie跟后台交互,作为特定身份。但是有的人设计的项目,可能会自定义其他请求头,所以如果有这种情况,也要在jmeter接口请求时,设置一下!!!,比如有的人可能多加了一个context-token的请求头也是有可能的。
  对于这种情况,就是一定要跟项目后端开发人问清楚,到底他们是怎么传递的身份验证令牌。了解了这个就好弄了。

3. 配置流程

  我们项目里涉及到登录密码加密处理、登录成功后cookie里需要设置上固定的令牌,有了令牌才能进行后续的接口调用。

3.1 基础配置介绍

  涉及到jmeter里创建的元素有如下几个,它们的关系如下:
在这里插入图片描述

  jmeter里配置主要是基于线程组进行设置,压测应该都是基于这个来的,因此线程组需要先创建,如下图所示,右击面板,找到添加,按照下图来。
在这里插入图片描述
  线程组之后,就可以按照项目接口的请求逻辑添加http请求
在这里插入图片描述
  而http请求下,可以添加前置处理器后置处理器配置元件监听器等。
  前置处理器可以用来处理请求之前对参数的编辑等,比如我这里会引用前端加密js文件,使用前端js的方法,对密码进行加密后,再传输。
在这里插入图片描述

  后置处理器可以用来处理请求之后,对结果集的处理,比如我这里是登录之后拿到token,并通过正则截取,将token值添加到全局值里边,之后会在每个请求头里添加cookie的设置。
在这里插入图片描述
  配置元件里有http信息头管理器,我这里主要也是用的它,即编辑cookie值。
在这里插入图片描述
  监听器里有察看结果树,我这里主要用它看,整个线程组下接口调用的情况。
在这里插入图片描述
  当配置了监听器后,才有必要执行线程组,如果没有输出,那就没有必要执行,要想运行可以执行下图的地方。
在这里插入图片描述
  如上图,配置完了之后,可以按照上边的步骤执行,执行完之后,点击察看结果树,查看运行结果即可。
在这里插入图片描述

3.2 cookie获取

  基础配置完了,就说一下配置流程。首先,为什么要先设置cookie?因为当你第一次访问一个项目,比如初次打开一个项目,第一次调用后台接口时,都会在请求头里看到cookie值的。cookie值与后台的session一一对应,也是大部分项目身份的信息,你只有拿着服务端承认的cookie,才能找到服务端对应的session,让服务端承认你。
  如果是首次访问项目,那就先找到第一个调用后台服务的接口,一般情况下,这时候cookie值基本都会在response headersset-cookie里,之后再访问都是request headersCookie里。所以jmeter里进行截取的时候,表达式的写法也需要注意,不要写死为set-cookie,因为之后可能不叫这个名字了。
  如下图,因为验证码接口是我的项目首次加载,第一次调用的后台接口,也就是说在这个接口上,初次获取到cookie,因此我这里要,先调用验证码的接口,拿到cookie值,并存储下来,因此这个http请求下,还有一个后置处理器,用来从消息头里提取cookie值。
在这里插入图片描述
  通过浏览器里访问项目F12可以看到,该接口首次set-cookies,需要正则截取出sso_jessionid=对应后边的值。
在这里插入图片描述

set-cookie: sso_jessionid=faa43735-d212-4e80-b1be-ae22b85798cb; Path=/api; HttpOnly; SameSite=lax

  下图是对应当前请求下后置处理器,通过正则提取cookie,截取的表达式为sso_jessionid=(.{1,36}),表示的意思是从sso_jessionid=后开始,第1个字符开始,往后获取到第36个字符,.的意思表示任意字符。$1$表示正则之后结果取第1个匹配内容。将获取到的数据,赋值给jemeter全局参数的sso_jessionid值。这样在其后任意地方都可以通过${sso_jessionid}取值。
在这里插入图片描述

3.3 获取公钥值

  由于我们项目登录采用RSA非对称加密,并且加密的公钥私钥,由后台生成,并传给前端,后端又将私钥存储在对应的session里,这样的话,需要调用公钥获取接口。
在这里插入图片描述
  对于获取公钥接口设置上,就要注意两点。一个就是公钥获取后需要对返回值截取获取公钥;另一个就是必须使用前一步设置的cookie值。因为后台私钥存储在对应的session里,就必须从这一步开始由前端使用cookie值与后端交互,否则就会导致身份不一致,后端找不到对应的私钥。
  设置cookie值,如下,因为前一步已经获取了sso_jessionid,在这里通过${sso_jessionid}进行设置。注意这里的请求头的Cookie为首字母大写。
在这里插入图片描述
  获取公钥之后,进行正则提取返回结果,当前接口返回结果的data里有对应的公钥。因为是从返回值里截取,因此这里选择主体,而不再是信息头
在这里插入图片描述

3.4 登录逻辑

  当获取到公钥之后,就需要jmeter引用前端js文件,对密码进行加密处理,并且再传给登录接口。
  因为这相当于是登录接口之前的处理,所以,需要在该接口上建一个前置处理器,如下图所示:
在这里插入图片描述
  因为是js逻辑,因此这里选语言为javascript,对应的脚本逻辑如下:

var navigator = this;
var window = this;
load("jsencrypt.js");
var publickey = vars.get("publicKey");
function RSA()
{ 
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publickey); 
log.info("获取到的公钥是:"+publickey); 
var password = encrypt.encrypt("znxd2018");
vars.put("password",password);  
log.info("加密后的密码为:"+password); 
}
RSA();

  注意load("jsencrypt.js");这句,因为相当于jmeter要引用第三方的js文件,这里既然加载,那必须需要我们提前将这个jsencrypt.js文件放到约定好的位置,才能loadjmeter对于引用的东西,可以放到bin目录里,如下图:
在这里插入图片描述
  当放好这个js文件之后,才可以引用使用,否则会报前端的undefined错误。其他的可以参照上边的脚本写,因为每个项目的逻辑不同,就不多解释了,就是语言写法别写错了,当时有的同事,上边选的js,下边写的是java,挺尴尬的。
  另外注意vars.put("password",password);这句话,表示密码处理好之后,也添加到jmeter全局变量里边,这个是js的一种写法,设置好之后,也是可以在任意地方通过${password}引用。
  最后,因为登录接口我们要求的是json格式请求(参照上边2.2的参数体),因此对于这个登录接口的请求设置消息头里,要添加application/json才可以,并且请求参数要写为json格式。如下图:
在这里插入图片描述
  登录其实是有验证码的,即上图的captcha,因为接口测试没法拿到这个,因此我后端暂时把验证码校验关闭,这里就随便传了个1
  对于我们的项目,请求头里必须要有下边两个消息头才行。
在这里插入图片描述

4. 总结

  针对于接口这块,因为涉及到身份验证及请求头信息的问题,有的仅仅测试人员是没法进行的,也是需要跟后端开发沟通清楚一些登录、接口调用逻辑。
  如果对http请求比较了解的话,其实就根据浏览器F12调试器里,也能排查出来,这里跟大家推荐一本http协议学习的书,可以提高对请求头的认识。《图解HTTP》 (日)上野宣著,这本书写的比较简单,而且还有图,看起来也比较轻松的。
  因为我是临时帮忙设置,也第一次用jmeter,如果有对应的问题,我也不懂,写的比较简单,大家仅供参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jmeter自动调试系统接口配置流程 的相关文章

随机推荐

  • 接口性能 指标

    接口测试响应时间 通用得接口响应使时间分布情况 100ms为优良 500ms为及格 1000ms以上为不可忍受 金融接口响应时间得分布情况 100ms为优良 200ms为及格 300ms以上为不可忍受
  • 动态链接库(一)--动态链接库简介

    写在前面 自从微软推出的第一个版本的Windows操作系统以来 动态链接库 DLL 一直就是Windows操作系统的基础 动态链接库通常不能直接运行 也不能接收消息 它们一直是独立的文件 其中包含能被可执行程序或其他DLL文件调用来完成某项
  • 【解决ElementUI 和Antd的对话弹窗样式冲突问题】

    项目中使用了Antd 和element UI两种UI库 Antd是全局样式 element ui则是按需引入 在使用element ui的页面处点击退出 弹出的对话框就会样式失效 首先在随便一个地方点击退出登录看一下正常效果 再打开F12查
  • Unity3D中的ref、out、Params三种参数的使用

    目录 ref out Params ref 作用 将一个变量传入一个函数中进行 处理 处理 完成后 再将 处理 后的值带出函数 语法 使用时形参和实参都要添加ref关键字 using System Collections using Sys
  • JavaSE学习总结:面向对象编程

    Java面向对象编程 1 类与对象 1 1面向对象的理解 1 1 1面向对象和面向过程的区别 1 1 2面向对象的好处 1 1 3面向对象的思考步骤 1 2类与对象 1 2 1什么是类 1 2 2什么是对象 1 2 3二者的区别 1 2 4
  • ubuntu设置环境变量

    vim bashrc export VCPKG FORCE SYSTEM BINARIES 1 export VCPKG HOME PATH vcpkg export X VCPKG ASSET SOURCES x azurl http 1
  • GPT-4最强竞争对手Claude 2震撼发布,据说超过GPT-4?

    OpenAI 发布了 GPT 4 的 API 和令人兴奋的 最强插件 代码解释器 这无疑给竞争对手们敲响了警钟 而最近 Anthropic 旗下的 Claude 揭开了它的第二代面纱 免费使用Claude 2请加微信wyxyellow 相较
  • GAN之生成对抗网络(Matlab)

    代码来源 代码全文 clear all close all clc Basic Generative Adversarial Network Load Data load mnistAll mat trainX preprocess mni
  • DMRS在5G NR各种物理信道上的配置

    笔者在微信公众号GiveMe5G定期发布学习文章 更多更及时 欢迎订阅和分享 文章下方有二维码 本篇文章旨在介绍DMRS DeModulation Reference Signal 在5G中 DMRS广泛存在于各个重要的物理信道当中 如下行
  • MMdetection的Proposal原理和代码解析

    一 算法原理 接受N级score bbox pred anchor和image shape作为输入 通过anchor和框的偏移 bbox pred 得到proposal 然后对这些proposal做NMS 最后选出前num个 二 执行步骤
  • golang 组成树形格式

    该封装受到前端 js filter函数的启发看着特别简洁 一 封装一个函数 比较简单就是循环根据传入的 回调函数 进行过滤组成新的数组返回 func Filter T any arr T f func item T bool list T
  • 震动传感器介绍及实战(中断)

    项目要求 利用震动传感器实现点灯效果 当传感器察觉震动 led灯亮 否则不亮 接线及引脚 传感器信号引脚DO接PA4 led1灯的引脚接PB8 所以中断的信号源就是PA4引脚 配置STM32 PB8设置成output 输出给led 打开使能
  • 红黑树结构算法原理与代码解析

    红黑树 Red Black Tree 平衡二叉B树 是一种自平衡二叉查找树 是在计算机科学中用到的一种数据结构 典型的用途是实现关联数组 典型的普通顺序数组结构的增 删 查效率都是O n 但是红黑树进行读写操作时的效率可以稳定在O log
  • JAVA笔记

    目录 模板模式的理解 使用模板模式的例子 整合工厂模式 模板模式的理解 模板模式简单理解就是创建一个抽象父类作为模板 可以分两部分 一部分是定义了所有子类都需要执行的公共方法 这样就不用在每个子类中重复写相同代码 另一部分就是强制规定每个子
  • php面试题之四——PHP面向对象(基础部分)

    1 写出 php 的 public protected private 三种访问控制模式的区别 新浪网技术部 public 公有 任何地方都可以访问 protected 继承 只能在本类或子类中访问 在其它地方不允许访问 private 私
  • (Oracle技能篇) oracle数据库分页查询和各大数据库的分页查询

    1 oracle数据库分页 select from select a rownum rc from 表名 where rownum lt endrow a where a rc gt startrow 2 DB2数据库分页 Select f
  • 堆与栈的区别详细总结

    常见的数据结构 数组 栈 队列 链表 树 图 散列表 哈希表 堆与栈的区别 堆 队列优先 先进先出 FIFO firstinfirstout 栈 先进后出 FILO First In Last Out 一般情况下 如果有人把堆栈合起来说 那
  • js浏览器回到顶部方法_js 返回顶部按钮

    要求 当鼠标从顶部滚动后 显示返回顶部按钮 点击按钮 页面平滑滚动到顶部 按钮隐藏 1 css scrollTop position fixed bottom 20px right 20px height 0px width 45px li
  • [ Android实战 ] 开机时通过广播启动应用,但是很长时间才能接收到,如何解决?

    Android实战 开机时通过广播启动应用 但是很长时间才能接收到 如何解决 背景 测试 发送广播流程 广播分发流程 解决方案 思考 系统层面 应用层面 总结 转载请注明出处 我的博客 背景 前段时间在做一个项目 在适配客户应用的过程中发现
  • jmeter自动调试系统接口配置流程

    1 起因 最近测试的同事需要用jmeter工具压测一下我们项目的接口 因为接口中有token或者加密登录密码等逻辑 有的地方需要从上一步接口中拿到结果作为下一步的参数 进行传递 因为涉及的有点麻烦 就帮测试看了下这个工具 顺便记录一下 帮助