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.rhkb.cn/news/458208.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JDBC: Java数据库连接的桥梁

什么是JDBC? Java数据库连接(Java Database Connectivity,简称JDBC)是Java提供的一种API,允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口,开发者可以利用这些接口执行SQL语句、处理结果集…

XQT_UI 组件|02| 按钮 XPushButton

XPushButton 使用文档 简介 XPushButton 是一个自定义的按钮类,基于 Qt 框架构建,提供了丰富的样式和功能选项。它允许开发者轻松创建具有不同外观和行为的按钮,以满足用户界面的需求。 特性 颜色设置:支持多种颜色选择。样式设…

Python之Excel自动化处理(三)

一、Excel数据拆分-xlrd 1.1、代码 import xlrd from xlutils.copy import copydef get_data():wb xlrd.open_workbook(./base_data/data01.xlsx)sh wb.sheet_by_index(0){a: [{},{},{}],b:[{},{},{}],c:[{},{},{}],}all_data {}for r in range(sh.nrows):d {type:sh.cell…

css知识点梳理2

1. 选择器拓展 在 CSS 中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基本选择器进行组合形成的。 ​ 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的&#xf…

《a16z : 2024 年加密货币现状报告》解析

加密社 原文链接:State of Crypto 2024 - a16z crypto译者:AI翻译官,校对:翻译小组 当我们两年前第一次发布年度加密状态报告的时候,情况跟现在很不一样。那时候,加密货币还没成为政策制定者关心的大事。 比…

服务器数据恢复—EXT3文件系统下邮件数据被误删的数据恢复案例

服务器数据恢复环境: 邮件服务器中有一组由8块盘组成的RAID5阵列, 上层是Linux操作系统EXT3文件系统。 服务器故障: 由于误删除导致文件系统中的邮件数据丢失。 服务器数据恢复过程: 1、将故障服务器中所有硬盘做好标记后取出,硬…

Python实现Android设备录屏功能及停止录屏功能

1、功能概述? 提供源码下载 之前通过ADB命令实现了实时的录屏功能。但是很遗憾,虽然通过adb命令录屏非常方便,但由于权限限制,无法在安卓系统较高的设备上使用。现选择使用另一开源工具来解决这一问题,并记录使用详细…

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备: 一、深度可分离卷积(Depthwise Separable Convolution) MobileNet的核心是深度可分离卷积(Depthwise Separable Convolution),深度可分离卷积是卷积神经网络(CNN&#xf…

Java 基于 poi 和 itextpdf 实现 excel 转 pdf

目录 问题 实现思路 pom Excel2PDFUtil Excel2PDFUtilTest 输出结果 问题 工作中遇到一个需求,需要实现 excel 文件的预览,实现的思路就是将 excel 转成 pdf 文件,上传到文件服务器上得到文件地址,预览时只需要返回 pdf 预…

UHF机械高频头的知识和待学习的疑问

电路图如上所示: 实物开盖清晰图如下: 待学习和弄懂的知识: 这是一个四腔的短路线谐振。分别是输入调谐,放大调谐,变频调谐和本振 第一个原理图输入为75欧(应该是面向有同轴线的天线了)如下图…

【vue+leaflet】自定义控件(五)

老规矩, 一健三连, 先赞后看 先看效果图 自定义控件: 支持和自带控件有相同的增删改查功能, 处理与自带控件来回切换,互相使用的部分问题 新建一个组件 imgControl.vue 1, html 没什么东西,就一个div盒子装leaflet图层 <template><div class"imgBox">…

Java | Leetcode Java题解之第513题找树左下角的值

题目&#xff1a; 题解&#xff1a; class Solution {public int findBottomLeftValue(TreeNode root) {int ret 0;Queue<TreeNode> queue new ArrayDeque<TreeNode>();queue.offer(root);while (!queue.isEmpty()) {TreeNode p queue.poll();if (p.right ! nu…

Cursor的composer和chat的应用

提到 Cursor 就不得不提及它的 Composer 功能。“Composer” 的中文释义为 “作曲家”&#xff0c;在此处它有着特定的含义。 Cursor 提供了两种人机对话方式。一种是 Chat&#xff0c;它与 ChatGPT 之类的工具差别不大。另一种则是强大的 Compose。 在编写程序时&#xff0c…

基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 削峰填谷的基本概念与意义 4.2 GA优化 5.完整工程文件 1.课题概述 基于GA遗传优化的风光储微电网削峰填谷能量管理系统matlab仿真。通过遗传算法优化风光储微电网的充放电控制过程&#xff0c;然后…

配置smaba (Linux与windows通信)

在Ubuntu上安装Samba是一个简单的过程。以下是详细的步骤&#xff0c;帮助你从安装到基本配置。 步骤1&#xff1a;更新软件包列表 首先&#xff0c;打开终端&#xff0c;确保你的软件包列表是最新的&#xff1a; sudo apt update 步骤2&#xff1a;安装 Samba 接下来…

项目部署 —— 前端、后端

一、 前端 ● 二号标题 在命令框里输入 npm run build 打包成功&#xff1a; 项目就会出现一个 dist 文件夹 将Linux的nginx文件夹中&#xff0c;重命名为 news 二、 后端 ● 通过maven打包后端程序 最终会在项目中生成一个 target 文件夹&#xff0c;将 news-1.0-SNAPSHOT.…

汇编语言

前言 汇编语言是各种CPU提供的机器指令的助记符的集合&#xff0c;可以通过汇编语言直接控制硬件系统进行工作&#xff1b; Q&#xff1a;为什么说汇编语言可以直接操作硬件&#xff1f;那么汇编过程还有什么意义呢&#xff1f; A&#xff1a;汇编语言利用助记符代替机器指令的…

Python数据分析——Numpy

纯个人python的一个小回忆笔记&#xff0c;当时假期花两天学的python&#xff0c;确实时隔几个月快忘光了&#xff0c;为了应付作业才回忆起来&#xff0c;不涉及太多基础&#xff0c;适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频&#xff1a; 一…

反编译华为-研究功耗联网监控日志

摘要 待机功耗中联网目前已知的盲点&#xff1a;App自己都不知道的push类型的被动联网、app下载场景所需时长、组播联网、路由器打醒AP。 竞品 策略 华为 灭屏使用handler定时检测&#xff08;若灭屏30分钟内则周期1分钟&#xff0c;否则为2分钟&#xff09;&#xff0c;检…

基于知识图谱的紧急事故决策辅助系统

现代社会紧急事故频发&#xff0c;而处理这些突发事件的效率直接决定了后续影响的大小。这时候&#xff0c;数据智能的解决方案会显得尤为重要&#xff01;今天为大家分享一个用【知识图谱】技术驱动的紧急事故决策辅助系统&#xff0c;不仅能帮助你快速处理事故信息&#xff0…