性能工具之 JMeter ajax 简单登录案例实战

文章目录

  • 一、前言
  • 二、前置工作
  • 三、登陆密码分析
  • 四、JMeter脚本开发
  • 四、登陆性能分析
  • 五、小结

一、前言

想起论语中的 “学而时习之不亦说乎” ,也想找个开源项目实战一把,下面用一个开源ERP系统中的登陆做今天的实战。

二、前置工作

  • 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP

开源项目部署成功,如下图:在这里插入图片描述

登陆成功:
在这里插入图片描述

IDEA 部署注意,如果MySQL 8以上需要修改驱动。

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version>
</dependency

三、登陆密码分析

1、打开项目代码找到登陆页面代码,如下图:
在这里插入图片描述
源代码如下:

<div class="login-box-body"><div class="form-group has-feedback"><span class="glyphicon glyphicon-user form-control-feedback" title="登录账号"></span><input type="text" id="loginName" name="loginName" class="form-control required"data-msg-required="请填写登录账号." placeholder="登录账号"/></div><div class="form-group has-feedback"><span class="glyphicon glyphicon-lock form-control-feedback"title="登录密码,鼠标按下显示密码"onmousedown="$('#password').attr('type','text')"onmouseup="$('#password').attr('type','password')"></span><input type="password" id="password" name="password" class="form-control required"data-msg-required="请填写登录密码." placeholder="登录密码" autocomplete="off"/></div><div class="form-group"><div class="mt5 icheck"><label title="公共场所慎用,下次不需要再填写帐号"><input type="checkbox"id="rememberUserCode" class="form-control"data-style="minimal-grey">记住账号</label> &nbsp;<label title="公共场所慎用,下次不需要再填写帐号和密码"><input type="checkbox"id="rememberMe" class="form-control"data-style="minimal-grey"> 自动登录</label></div></div><div class="form-group"><input type="hidden" name="__url" value=""><button type="submit" class="btn btn-primary btn-block btn-flat"id="btnSubmit" data-loading="登录验证成功,正在进入..."data-login-valid="正在验证登录,请稍候...">立即登录</button></div>

通过观察 HTML 页面发现它使用 ajax 技术,估计做性能测试人都知道什么是 ajax 技术,这里还是普及下什么是ajax技术?

AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。

说白一句话 ajax 就是中间商,在没有 ajax之前前端是直接与服务端交互,会导致空白页面或者卡顿页面出现,之后出现 ajax 通过终中间代理方式,用户体验马上上升一个档次 ,之后的前端与后端交互基本采用 ajax 异步请。

在这里问下页面渲染 JS 代码放上面还是放下面问题,大家可以思考下,为什么要这样安排。

ajax支持异步请求与同步请求,代码码具体怎么登录下面一起分析下,目前项目怎么写的:

         <div class="form-group"><input type="hidden" name="__url" value=""><button type="submit" class="btn btn-primary btn-block btn-flat"id="btnSubmit" data-loading="登录验证成功,正在进入..."data-login-valid="正在验证登录,请稍候...">立即登录</button></div>

观察上面目前是 Button 点击,并且绑定 id= btnSubmit,事件,听过IDEA全区查找找到js代码如:
在这里插入图片描述
目前代码中的 ajax请求代码如下,ajax默认是异步请求,如果需要同步请求需要在请求的中间增加“async”:false,完成同步请求如果关闭异步操作,也就是说所以操作在同一线程内按顺序完成请求操作。

$.ajax({type: "post",url: "/user/login",dataType: "json",data: ({loginName: loginName,password:  hex_md5(password)}),success: function (res) {        

根据定位发现密码是 hex_md5 加密处理后出传入后段代码 ,如果使用 jmeter 模拟登陆需要知道传入密码是什么,这样才能知道传入什么密码。

  • 方法一:前端代码调试可以打断点,也可以使用如下方法把加密密码打出来:
alert(hex_md5(password));

在这里插入图片描述

  • 方法二:也可以使用console.log:
console.log(hex_md5(password));

结果如下:
在这里插入图片描述

  • 方法三:还可以后端代码处打断点把密码打印出来如:

在这里插入图片描述

四、JMeter脚本开发

根据前面分析的知识点,也明白该系统怎么登陆的,所以做脚本是很轻松的事情脚本参考如下:
在这里插入图片描述
测试结果如下:
在这里插入图片描述

增加断言
在这里插入图片描述

四、登陆性能分析

  • 第一步:梳理分析思路。

根据《性能测试实战30讲》高老师分析思路,如下图:
在这里插入图片描述
主要步骤如下:

  1. 工具操作:包括压力工具、监控工具、剖析工具、调试工具。
  2. 数值理解:包括上面工具中所有输出的数据。
  3. 趋势分析、相关性分析、证据链分析:就是理解了工具产生的数值之后,还要把它们的逻辑关系想明白。这才是性能测试分析中最重要的一环。
  4. 最后才是调优:有了第 3 步之后,调优的方案策略就有很多种了,具体选择取决于调优成本和产生的效果。
  • 第二步:把场景跑起

目前架构是:
在这里插入图片描述
考虑使用本机跑性能场景学习,所以在运行之前设置 IDEA 启动场景参数,方便边学习边分析,如果自己有机器,也可以放到服务器做实验;
在这里插入图片描述
启动如下:
在这里插入图片描述

场景一:JMeter跑10个并发观察 TPS 变动:
在这里插入图片描述
观察最大TPS为:321.4

观察IEAD中出现大量日志:

在这里插入图片描述
检查日志文件发现目前的日志为:
在这里插入图片描述

把日志级别调成:error级别如:

 <logger name="com.jsh" additivity="false" level="ERROR"><appender-ref ref="CONSOLE"/><appender-ref ref="TIME_FILE"/></logger>

目前打出的日志基本是SQL日志:

在这里插入图片描述
查看 JMeter 运行结果如下图:
在这里插入图片描述

目前结果是:523.37

五、小结

通过今天简单案例学习了解什么是ajax请求、前端怎么与后端代码怎么交互,还有idea中启动参数怎么配置、JMeter 脚本启动后观察idea中控制台发现日志问题,关闭日志后性能提升好几百,相信如果在 Linux 部署查找问题方法是一样的。

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

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

相关文章

getLocation:fail, the permission value is offline verifying

getLocation:fail, the permission value is offline verifying 后端会根据appid和secret生成 签名&#xff0c;前端wx配置时一定用appid来验证签名的正确 本次错误为配置初始化失败&#xff1a;前端与后端的appId不一致&#xff0c;我的失误也

IP 协议详解

一、认识 IP 地址与网络层的职责 网络层是OSI七层模型中的第三层&#xff0c;也是TCP/IP四层模型中的网络接入层。在这一层&#xff0c;数据包被封装并加上IP层的头部信息&#xff0c;以便在网络之间传输。网络层的主要功能包括路由选择、分段与重组、拥塞控制以及IP地址管理等…

stm32的内部时钟源 | RC震荡电路

文章目录 前言学习了解 前言 了解到 内部高速RC振荡器&#xff08;HSI&#xff09;就是RC震荡器实现的&#xff0c;故想对RC震荡做些了解与分析。 学习了解 【不需要晶振&#xff0c;也可产生时钟脉冲&#xff01;RC振荡器的工作原理&#xff0c;维恩电桥振荡器&#xff01;…

Mental-LLM——通过在线文本数据利用大型语言模型进行心理健康预测

概述 源码地址&#xff1a;https://github.com/neuhai/Mental-LLM.git 论文地址&#xff1a;https://arxiv.org/abs/2307.14385 在一项关于哪些法律硕士适合精神健康护理的研究中&#xff0c;对以下五种法律硕士进行了比较 羊驼-7b。羊驼-LoRA。FLAN-T5-XXLGPT-3.5GPT-4. 作…

AT+MQTT指令连接华为云实现数据上传

1 准备工作 硬件设备模块&#xff1a;ESP-01-S 固件烧录工具&#xff1a;ESP8266下载器 串口调试工具&#xff1a;VOFA参考文章&#xff1a;stm32AT指令ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理 2 固件更新 2.1 为什么要重新安装固件 由于ESP-01-S模块出…

快速入门Go:Go + gin + MongoDB

Go 进阶:Go + gin + MongDB 极速搭建EcommerceSys电商系统 前言 本章节适合有一定基础的 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 本文章持续更新中,请关注… 项目结构 项目流程图 技术栈(待补充)项目结构项目路由 (待补充) …

带你0到1之QT编程:三、打地基QMap的高效用法

此为QT编程的第三谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; 码…

KEYSIGHT U2020 X系列 USB峰值和均值功率传感器

​ _是德(KEYSIGHT) _ U2020 X系列 USB峰值和均值功率传感器 苏州新利通仪器仪表 U2020 X 系列功率传感器得到 Keysight BenchVue 软件的支持。使用 BenchVue 软件&#xff0c;您无需编程便可轻松控制功率计记录数据&#xff0c;并以各种形式显示测量结果。 只需将传感器…

计算机岗位(面试)

计算机岗位&#xff08;面试&#xff09; 计算机主要有哪几部分构成&#xff1f;计算机组成原理的内容&#xff1f; 计算机主要由‌硬件和软件‌两大部分构成。‌硬件部分包括五大基本组件&#xff1a;‌‌运算器、‌控制器、‌存储器、‌输入设备和输出设备‌‌。‌具体来说&a…

仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置

基于Android13 Launcher3,原生系统如果把图标从Workspace拖动到Hotseat里则Workspace就没有了&#xff0c;需求是执行拖拽动作后&#xff0c;图标同时保留在原位置。 实现效果如下&#xff1a; 实现思路&#xff1a; 1.如果在workspace中拖动&#xff0c;则保留原来“改变图标…

【开源免费】基于SpringBoot+Vue.JS高校校园招聘服务系统(JAVA毕业设计)

本文项目编号 T 010 &#xff0c;文末自助获取源码 \color{red}{T010&#xff0c;文末自助获取源码} T010&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

渗透测试靶机---- DC系列 DC-4

渗透测试靶机---- DC系列 DC-4 开启靶机&#xff0c;登录页面&#xff0c;平平无奇 扫描ip 端口&#xff0c;服务等信息 访问80 登录窗&#xff01;&#xff01;&#xff01; 这里说明了admin信息&#xff0c;那么就直接爆破这个admin的密码 密码&#xff1a;happy 登录成功 在…

Mysql之存储引擎概述

文章目录 存储引擎MySQL体系结构存储引擎特点InnoDBMyISAMMemory总结 存储引擎选择 存储引擎 MySQL体系结构 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所…

Rust多线程编程概述

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust到底值不值得学&#xff0c;之一 -CSDN博客 Rust到底值不值得学&#xff0c;之二-CSDN博客 12.2.1 线程的基本概念 线程&…

随手记:小程序体积超出2M包大小如何优化

小程序的包体积限制是2M&#xff0c;超出包大小如何优化 先简单列出&#xff0c;最近比较忙&#xff0c;后续优化明细&#xff0c;有着急的先留言踢我 1.分包 留几个主要的页面体积小的&#xff0c;剩下的在page.json中拆到subpackages中&#xff0c;简单举个例子 "page…

58、Python之函数高级:不定参数的函数,写出更加通用的装饰器

引言 上一篇文章中&#xff0c;我们见到引入了Python中的装饰器&#xff0c;通过一个简单的案例实现了一个初步的装饰器&#xff0c;但是&#xff0c;这个装饰器其实是有些缺陷。这一篇文章中&#xff0c;我们对上一篇文章中的装饰器进行一个优化升级&#xff0c;从而写出更加…

【王树森】RNN模型与NLP应用(5/9):多层RNN、双向RNN、预训练(个人向笔记)

Stacked RNN&#xff08;多层RNN&#xff09; 1. 原理 多个全连接层可以堆叠&#xff0c;多个卷积层也可以堆叠。同理&#xff1a;RNN也可以堆叠形成多层RNN。 如下图所示&#xff1a;对于每一个时刻的输出 h t h_t ht​&#xff0c;它既会作为下一个时刻的输入&#xff0c;…

ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序

文章目录 前言5 RestClient操作文档5.4 删除文档5.4 修改文档5.5 批量导入文档 6 DSL查询文档6.1 准备工作6.2 全文检索查询6.3 精准查询6.4 地理坐标查询6.5 复合查询6.5.1 相关性算分6.5.2 布尔查询 7 搜索结果处理7.1 排序7.1.1 普通字段排序7.1.2 地理坐标排序 前言 Elast…

Git 下载安装使用基本教程

一、下载 Git&#xff0c;并安装 Git for Windows&#xff0c; 无脑安装。安装完&#xff0c;鼠标右键&#xff0c;会看到这两个东西。 二、Gitee操作 新建仓库 初始化 readme 文件 点击克隆 复制地址 右键 git clone 第一次会需要你输入账号密码 输入后拉取成功。 把想要上传…

【安全生产】叉车安全带报警器有哪些特点?

叉车安全带报警器是用于防止在叉车发生猛烈碰撞或紧急制动时&#xff0c;司机不与方向盘、挡风玻璃等发生二次碰撞或抛出车外&#xff0c;从而造成的严重伤害的一种叉车安全装置、配件。 很多司机在开叉车时经常有不系安全带的习惯&#xff0c;有很多不负责任的人会认为&#…