当前位置: 首页 > news >正文

解决使用Jmeter进行测试时出现“302“,‘‘401“等用户未登录的问题

使用 JMeter 压力测试时解决登录问题的两种方法

在使用 JMeter 进行压力测试时,可能会遇程序存在安全验证,必须登录后才能对里面的具体方法进行测试:

  • 如果遇到登录问题,通常是因为 JMeter 无法模拟用户的登录状态,导致后续请求无法获取到正确的身份验证信息。 常见的两种解决方法是:

1. 使用 HTTP 请求头

原理: 将登录后的身份验证信息(例如:token、session ID 等)以 HTTP 请求头的形式添加到后续请求中,让服务器识别用户的登录状态。

步骤:

  • 获取登录后的身份验证信息:
    • 通过调试工具(如 Chrome DevTools)分析登录成功的 HTTP 响应,找到身份验证信息的位置。
    • 或者,通过编写 JMeter 脚本提取响应中的身份验证信息。
  • 添加 HTTP 请求头:
    • 在 JMeter 中,添加一个 HTTP 请求,用于发送需要身份验证的请求。
    • 在 HTTP 请求的 “HTTP Header Manager” 中,添加一个新的 header,名为 “Authorization”,值为 “Bearer [身份验证信息]” (token 的格式可能有所不同)。(这一步为核心)
    • 或者,添加一个 “HTTP Header Manager” 到 Thread Group,并将身份验证信息添加到所有后续请求中。
    • (重点)举例:在登录你的程序后,可在前端页面通过F12打开调试模式
      • *找到“网络” -> Headers ->Response Headers 里Authorization: Bearer <token_value>
      • 将上面得到的数据,写入到Jmeter的HTTP Header Manager里即可
        在这里插入图片描述

代码示例:

// 添加 HTTP Header Manager
// 创建一个 HTTP Header Manager
HeaderManager headerManager = new HeaderManager();// 添加 Authorization header
headerManager.add("Authorization", "Bearer " + token);// 将 HTTP Header Manager 添加到 Thread Group
ThreadGroup threadGroup = (ThreadGroup) sampler.getParent();
threadGroup.addTestElement(headerManager);// 创建 HTTP 请求
// 添加 HTTP 请求需要的其他配置

2. 使用 HTTP Cookie

原理: 将登录后服务器返回的 Cookie 信息保存下来,并在后续请求中发送给服务器,以保持用户的登录状态。

步骤:

  • 获取登录后的 Cookie 信息:

    • 通过调试工具(如 Chrome DevTools)分析登录成功的 HTTP 响应,找到 Cookie 信息的位置。
    • 或者,通过编写 JMeter 脚本提取响应中的 Cookie 信息。
  • 保存 Cookie 信息:

    • 使用 JMeter 的 “HTTP Cookie Manager” 组件保存 Cookie 信息。
    • 登录系统并查看响应的 Cookie 信息。
    • 配置 HTTP Cookie Manager,在 JMeter 中使用 “HTTP Cookie Manager” 组件保存 Cookie 信息。(这一步为这种方法的核心)
      例如:
      • “Clear Cookies Each Iteration”:是否在每个迭代开始时清除所有 Cookie。
      • “Cookie Policy”:Cookie 策略,通常使用默认的 “Standard” 即可。
  • 在后续请求中发送 Cookie:

    • 确保 HTTP Cookie Manager 被添加到 Thread Group 中。
    • JMeter 会自动将保存的 Cookie 信息添加到后续请求中。

    在这里插入图片描述

代码示例:

// 添加 HTTP Cookie Manager
// 创建一个 HTTP Cookie Manager
CookieManager cookieManager = new CookieManager();// 将 HTTP Cookie Manager 添加到 Thread Group
ThreadGroup threadGroup = (ThreadGroup) sampler.getParent();
threadGroup.addTestElement(cookieManager);// 创建 HTTP 请求
// 添加 HTTP 请求需要的其他配置

选择方法的建议:

  • 优先使用 HTTP 请求头,因为它更灵活,可以方便地添加多种身份验证信息
  • 如果服务器要求使用 Cookie 才能保持登录状态,则需要使用 HTTP Cookie 方式。

注意:

  • 确保身份验证信息和 Cookie 信息正确提取和保存。
  • 如果登录逻辑比较复杂,例如需要多步登录或验证,可能需要使用更复杂的脚本实现。

总结:

这两种方法都是解决 JMeter 压力测试中登录问题的有效方法。选择哪种方法取决于具体情况和服务器的实现方式。 了解这些方法并掌握相应的操作步骤,可以帮助您顺利进行压力测试,并获得更准确的性能数据。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Ubuntu修改MySQL的tmpdir参数失败的解决方法
  • C# —— 字典
  • 情系端午,爱暖精诚 | 我院开展温情献礼端午慰问活动
  • MongoDB入门与实践
  • 【串口通信-USART】
  • Vue I18n国际化插件
  • 数据库 |试卷1试卷2
  • python 数据清洗基础教程
  • 19、架构-虚拟化容器
  • Trees Grass Rocks Enviroment Pack
  • 深度理解微信小程序技术架构:从前端到后台
  • 第6天:表单处理与验证
  • 正则表达式常用表示
  • 高等数学笔记(二):极限
  • 京东618 :AI总裁数字人、京东Apple Vision Pro版亮相
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 0基础学习移动端适配
  • codis proxy处理流程
  • Consul Config 使用Git做版本控制的实现
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • flask接收请求并推入栈
  • HashMap剖析之内部结构
  • HTTP--网络协议分层,http历史(二)
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • MaxCompute访问TableStore(OTS) 数据
  • npx命令介绍
  • tab.js分享及浏览器兼容性问题汇总
  • yii2中session跨域名的问题
  • 批量截取pdf文件
  • 前端学习笔记之观察者模式
  • 让你的分享飞起来——极光推出社会化分享组件
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 自动记录MySQL慢查询快照脚本
  • zabbix3.2监控linux磁盘IO
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 昨天1024程序员节,我故意写了个死循环~
  • ​补​充​经​纬​恒​润​一​面​
  • #数学建模# 线性规划问题的Matlab求解
  • (C++17) std算法之执行策略 execution
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (javascript)再说document.body.scrollTop的使用问题
  • (Java数据结构)ArrayList
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ****三次握手和四次挥手
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)