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

JMeter实战之——模拟登录

在这里插入图片描述

本篇介绍使用JMeter 如何对需要登录的站点进行压力测试。

基本Session验证的机制

使用session进行请求验证的机制是一种常见的Web应用认证方式。 该认证方式的主要内容如下:

一、登录过程

  1. 用户输入:用户在登录页面输入用户名和密码。
  2. 发送请求:浏览器将用户名和密码作为请求参数发送到服务器。
  3. 服务器验证:服务器接收到请求后,验证用户名和密码的正确性。
    • 如果验证失败,服务器返回错误信息,提示用户重新输入。
    • 如果验证成功,服务器会创建一个session对象,并将用户信息(如用户名、权限等)存储在session中。
  4. 生成session ID:服务器为每个session生成一个唯一的session ID,用于标识该session。
  5. 发送session ID:服务器将session ID通过Set-Cookie响应头字段发送给客户端(浏览器),并指示浏览器保存该Cookie。

二、请求验证过程

  1. 发送请求:用户在后续访问需要认证的页面或接口时,浏览器会自动将保存的包含session ID的Cookie附加在HTTP请求的头字段Cookie中发送给服务器。
  2. 服务器验证:服务器接收到请求后,从请求头中的Cookie提取session ID。
    • 服务器根据session ID查找对应的session对象。
    • 如果找到对应的session对象,且session未过期,则认为用户已经登录,并允许访问该页面或接口。
    • 如果未找到对应的session对象,或session已过期,则认为用户未登录或会话已失效,服务器将返回错误信息或重定向到登录页面。

三、session管理

  1. session存储:session对象通常存储在服务器上,可以是内存、数据库或文件等。
  2. session过期:服务器可以设置session的过期时间,当session超过过期时间时,服务器将自动销毁该session对象。
  3. session注销:用户可以通过点击注销按钮或关闭浏览器等方式注销登录。注销时,服务器将销毁对应的session对象,并清除客户端的Cookie。

捡重点来说:

  1. 服务端产生Session ,并生成一个sessionID 给浏览器端
  2. 浏览器端保存这个SessionID到Cookie 中
  3. 后续浏览器端请求资源的时候都会带上这个SessionID
  4. 服务端验证这个SessionID是否正确和有效。

基于Session登录验证的JMeter 测试

使用JMeter 测试使用Session验证的站点很简单:

  1. 调用登录的接口
  2. 调用其他的接口

也就是在调用需要测试的接口前,想调用登录的接口, JMeter 会自动保存登录成功后的SessionID 并且后续请求会自动带上这个Cookie,这里自动带的原因是因为这个Cookie是通用的,也就是 * JSESSIONID

JSESSIONID是一个特定类型的Cookies,用于跟踪用户会话。它是由Java Servlet规范定义的一种机制,用于在用户与Java Web应用程序之间保持会话状态。

基于以上在JMeter 中建立的测试项目就基本上很简单:

在这里插入图片描述

  • 线程组下面包含一个登录请求以及若干个获取数据的请求。

实战场景之复杂验证

这里遇到一个实战的项目,因为单点登录或是安全性的要求,除了JSESSIONID之外,会额外产生一个Token 进行验证。原因是:

  • 这个站点本身调用了多个其他的服务,而调用其他服务的验证就是使用token 的方式。
  • 同时这个站点本身也是使用自行产生的token 进行验证

在调用登陆之后,会将这个通过通过响应内容的方式返回。

在JMeter 中需要从响应中解析出这个Token 附件到后续请求中。

于是需要在Login的请求中添加一个 Regular Expression Extractor解析出自行产生的Token。

需要从返回中通过Regular Expression Extracotor 解析Token , 附加到请求头中, 解析的配置类似如下:

在这里插入图片描述

除以上外,还需要添加一个HTTP Cookie Manager, 以便在后续的请求中附加上这个Cookie:
在这里插入图片描述

测试计划的完整结构如下:

在这里插入图片描述




http://www.kler.cn/news/368178.html

相关文章:

  • 基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真
  • 解决torch识别不到cuda的问题——AssertionError: Torch not compiled with CUDA enabled
  • #【2024年10月26日更新】植物大战僵尸杂交本V2.6更新内容与下载
  • springboot连接两个数据源,来回切换数据不能保存? 换事务
  • 重学SpringBoot3-Spring WebFlux之SSE服务器发送事件
  • Python浪漫之画星星
  • js实现数据版购物车(实现购物车所有功能)
  • CSS基础—网页布局(重点!)
  • JavaWeb合集18-接口管理Swager
  • YOLOv5/v8/v10/v11详细介绍:网络结构,创新点
  • 升级Unity后产生的Objects内存泄露现象
  • 面试总结(2024/10/16)
  • ubuntu 硬盘扩容
  • python对文件的读写操作
  • 快速入门HTML
  • 影刀RPA实战:验证码识别功能指令
  • 华为手机卡住了怎么办?,快来试试布局性能优化,让你的手机发挥极致性能!!!
  • Linux TCP CC状态机
  • 渗透测试-SQL注入基础知识
  • 游戏提示x3daudio17.dll丢失怎么办? X3DAudio17.dll修复方法
  • C#从零开始学习(接口,强制转化和is)(7)
  • python之多任务爬虫——线程、进程、协程的介绍与使用(16)
  • 一种将树莓派打造为游戏机的方法——Lakka
  • nacos的原理,为什么可以作为注册中心,和zookeeper的区别
  • Vue3侦听器监听数据变化早于mapContext初始化的问题
  • (二十二)、k8s 中的关键概念