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

news2024/9/21 23:37:36

文章目录

  • 一、前言
  • 二、前置工作
  • 三、登陆密码分析
  • 四、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.coloradmin.cn/o/2092374.html

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

相关文章

librttopo-1.1.0源码编译全过程(Visual Studio2017)

一、源码下载 可以自行搜索下载&#xff0c;可以根据本文提供的链接进行便捷下载&#xff1a;点击下载1&#xff0c;点击下载2 二、Windows下编译 下载完源代码后&#xff0c;进行源码解压&#xff0c;进入源码解压目录后&#xff0c;可以看到源码组织结构如下所示&#xff0c;…

柯桥外语培训|提建议该用would you还是you should?这些经典句型要记清!

不同场合&#xff0c;不同的人&#xff0c;提出建议的方式都不一样&#xff01;如何正确提建议呢&#xff1f;来看看下面的经典句型&#xff0c;保证万无一失~ Use the question 使用问题给建议 01 May I suggest 我可以建议……吗&#xff1f; A: I am so frustrated with th…

常见硬件工程师面试题(五)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…

上海大面积断网?原因已查明

8月26日晚&#xff0c;上海电信向记者透露&#xff0c;2024年8月26日17:30许&#xff0c;上海电信城域网设备故障&#xff0c;导致上海电信部分宽带业务发生异常&#xff0c;影响全市范围部分云宽带用户业务&#xff0c;上海电信其他业务均不受影响。 经过上海电信全力抢修&…

Java面试自我介绍

持续更新中 模块序号目录链接前言介绍1前言地址2介绍地址基础知识3计算机网络地址4操作系统地址5Java基础地址6Java并发地址7Java虚拟机地址中间件8Mysql地址9Redis地址10Elasticsearch地址11RabbitMQ地址12RocketMQ地址框架13分布式系统地址14MyBatis地址15Dubbo地址16Spring地…

2025舜宇集团校招二维码

舜宇光学集团校招 【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇光学科技2025校招内推&#xff01;冲冲冲&#xff01; 光学龙头-舜宇集团2025届全球校园招聘正式启动&#xff01;&#xff01;&#xff01; 提供住宿&#xff08;硕士单人间&#xff0c;独立卫浴&#xff01;&#x…

【算法每日一练及解题思路】判断字符串是否包含数字

【每日一练及解题思路】四种方式判断字符串是否含数字 一、题目&#xff1a;给定一个字符串&#xff0c;找出其中不含重复字符的最长子串的长度 二、举例&#xff1a; 比如"abcdefgh",不含数字&#xff1b;比如"1",含数字&#xff1b;比如"a1s&quo…

Sanic快速入门(详细,全面,通俗易懂)

什么是sanic 官网介绍&#xff1a;Sanic是一个Python 3.8的web服务器和web框架&#xff0c;旨在快速运行。它允许使用Python 3.5中添加的async/await语法&#xff0c;这使得您的代码无阻塞且快速 Sanic最早由ChannelCat团队开发&#xff0c;旨在提供一个高性能的异步Web框架。…

平衡膳食与健康 第二篇

健康,不止于不生病. 不良的生活方式 瞎折腾 影响身体健康 实际上健康还包括在其他方面 精神方面 社会接触能力大夫问题复盘 慢性疾病&#xff0c;都是生活方式病 慢性病与生活方式密切相关 还有心理问题**:焦虑症,抑郁症** 健康医学和疾病医学差距 压健康状态比例 肚…

【电子通识】可靠性机理之电偶腐蚀

什么是电偶腐蚀 电偶腐蚀也叫以异金属腐蚀或接触腐蚀&#xff0c;是指两种不同电化学性质的材料在与周围环境介质构成回路时&#xff0c;电位较正的金属腐蚀速率减缓&#xff0c;而电位较负的金属腐蚀加速的现象。构成这种现象的原因是这两种材料间存在着电位差&#xff0c;形成…

【网络基础】探讨以太网:封装解包、MTU、MAC地址与碰撞

文章目录 1. 概念2. 帧格式3. 如何解包和封装4. 整体网络思想 谈 跨网络通信5. 碰撞问题① 汇总整体的网络通信过程&#xff0c;发现问题并补充细节 6. 认识MAC地址7. 对比理解MAC地址与IP地址8. 认识MTU① MTU对UDP协议的影响② MTU对TCP协议的影响③ MSS 与 MTU的关系④ 命令…

C语言:成绩判定

1.题目&#xff1a;键盘输入一个成绩&#xff08;0-100之间&#xff09;&#xff0c;能输出对应等级&#xff0c;90-100是A&#xff0c;80-89是B&#xff0c;70-79是C&#xff0c;60-69是D&#xff0c;60分以下均为E。 2.算法思想&#xff1a;将100的分值分别分成5个档位&…

十万流量耀前路,成长感悟谱新章

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

计算机毕业设计选题推荐-传统文化网站-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

数据结构-单链表-详解-2

数据结构-单链表-详解-2 1.前言2.创建新结点3.头插与尾插3.1头插3.2尾插空链表找尾 4.头删与尾删4.1头删4.2尾删 1.前言 在数据结构-单链表-详解-1中&#xff0c;我们不仅了解了单链表的基本概念&#xff0c;还掌握了如何创建和打印单链表。 今天&#xff0c;我将详细讲解如何…

QObject::moveToThread(QThread * targetThread)

改变该对象及其孩子的所在的线程。如果该对象有父亲&#xff0c;则它不能被移动。 事件处理将在targetThread中继续。 移动一个对象到主线程&#xff0c;使用QApplication::instance()来得到当前application的指针&#xff0c;使用QApplication()::thread()来得到应用程序所在…

springboot篇

文章目录 1.题目问答2.配置详情2.1配置文件2.2多环境配置2.3自定义参数2.4命令行参数2.5加载顺序 3.Starter POMs4.监控与管理—actuator4.1. 应用配置类4.1.1./autoconfg4.1.2. /beans4.1.3. /configprops4.1.4 /env4.1.5./mappings4.1.6./info 4.2. 度量指标类4.2.1. /metric…

Linux终端简单配置(Vim、oh-my-zsh和Terminator)

文章目录 0. 概述1. 完整Vim配置2. Vim配置方案解释2.1 状态行与配色方案2.2 文件管理与缓存设置2.3 搜索与导航优化2.4 缩进与格式化设置2.5 粘贴模式快捷切换2.6 文件编码与格式2.7 性能优化与备份 3. 安装 Oh My Zsh 及配置3.1 安装 Oh My Zsh3.2 Oh My Zsh 配置 3. Termina…

谷歌seo为什么要分析对手?

​简单来说&#xff0c;找到差距&#xff0c;弥补差距&#xff0c;提升网站 通过观察对手的网站内容、关键词策略和外链情况&#xff0c;是可以知道很多重要信息的&#xff0c;只要能熟练运用各种seo工具&#xff0c;通过分析对手网站是可以帮助优化自己网站的&#xff0c;研究…

进阶SpringBoot之 Shiro(2)环境搭建

Spring Boot 创建 Web 项目&#xff0c;pom.xml 导入 Thymeleaf 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency> resources 目录下 templates 包新…