JMeter性能分析实战一:日常登录接口
负载测试
日常需求:负载测试!
对于桥的负载测试:我给你20t的一排车辆,看你能不能撑得住20t!
对于系统的负载测试:
逐步增加负载,便于问题的发现和定位,不要操之过急。逐步增加负载是这负载测试和压力测试中常见的方法。这种方法有助于观察和评估系统随着负载增加而发生的变化。但是,仅仅因为逐步增加负载,并不意味着你总是在进行负载测试;这同样可以应用于压力测试。
一定要在逐步增加负载的过程中保证除TPS以外其他指标也满足条件,在满足条件的情况之下找到最大的TPS(就是测试系统所能承受的最大吞吐量,可以视为最大负载量的直观体现),如果该TPS也满足指标条件,才能说通过了负载测试。
主流性能测试工具
Loadrunner
优点是详细,且支持IP欺骗,能够更为真实地模拟不同ip用户使用接口的情况。但是,收费!
JMeter
JMeter有九大元件!
前置处理/后置处理:相对于取样器,也就是相对于发出的请求!发请求之前需要对请求参数做处理,发请求后需要对响应结果进行提取。
编写性能脚本
基础练习
在我们之前使用JMeter进行接口测试中,我们使用的是POST请求中的form表单格式,所以才能直接在参数列表中添加,这个和GET使用方法一样,但只是POST的使用情况之一。
请求头设置不是必须的,按照实际情况设置。
注意当使用POST请求传递form表单格式的时候,不能仅仅看到请求返回200就认为是正确的,我们需要查看请求头和请求体,尤其是请求头的Content-type是不是form表单格式:
作者检查了一下,发现自己真的做错了(注意检查请求的Request Headers,作者一开始检查的是相应数据,真傻x,浪费时间):
这个请求头是很重要的,因为它告诉服务器如何解析接收到的数据。错误的Content-Type
头可能会导致服务器无法正确解析数据,从而导致错误或未预期的行为。
所以,在JMeter中,确保设置正确的Content-Type
头是很重要的,以模拟真实的用户交互和避免潜在的问题。我们可以添加HTTP信息头管理器,以正确规定信息头的值:
成功:
JSON断言
响应断言
更为全面,能够对任意格式的响应结果进行断言,相应地,真™麻烦:
1. 忽略状态:不让jmeter自动化测试。为什么要有这个选项呢?因为我们有时候就是要测试状态码为4xx或者5xx时的信息。如果默认让jmeter自动测试,则jmeter会自动将状态码作为断言判断的一部分,直接报错不看后面的内容,就没有任何意义了。
2. 如果有多个预期结果,且在模式匹配中勾选“或“选项,则满足任意一个结果就行;否则所有结果必须同时满足!
其实编写性能脚本就是设置线程组、HTTP请求等等组件,组件再搞一些元件,详情请见黑马相关视频。
端口配置
课上那些ip端口不适用于本地程序,所以读者就本地Springboot程序介绍一下端口配置。作者的应用正在本地的8085端口上运行,并且希望使用JMeter的PerfMon插件来收集其性能指标。
首先,我们需要了解PerfMon插件的工作原理:
- PerfMon Server Agent:它是一个独立的进程,需要在你想要监控的服务器上运行。它会收集性能指标并发送给请求它的JMeter客户端。
- PerfMon Metrics Collector in JMeter:这是JMeter中的一个Listener,它连接到PerfMon Server Agent并请求性能指标。
我们需要在同一台机器上运行Springboot应用、PerfMon Server Agent和JMeter。
下面是步骤:
启动应用:确保应用正在本地的8085端口上运行。
启动PerfMon Server Agent:选择一个不同于8085的端口运行PerfMon Server Agent,例如
4444
。这是默认的,你可以使用startAgent.bat
直接启动它。注意,一定是不同于8085的端口,因为,我们在startAgent.bat配置的或者是它默认的端口,都是它自己的端口,不是它监听的端口,是它自己的端口啊!
所以一旦它也选择Springboot项目的端口,就会产生端口重用的问题!
配置JMeter:
打开JMeter。
添加你的线程组和HTTP请求sampler等。
添加
PerfMon Metrics Collector
listener到你的测试计划。在PerfMon Metrics Collector的配置中:
Server IP or Hostname
:输入localhost
。Server Port
:输入PerfMon Server Agent的端口,例如4444
。这个端口号一定要与startAgent.bat
配置的端口号相同,二者才能连接。
- 选择你想要监控的指标,例如CPU, Memory等。
运行JMeter测试:当JMeter测试运行时,PerfMon Metrics Collector会从本地的PerfMon Server Agent收集指标,并在JMeter中显示。
注意:应用使用8085,PerfMon默认使用4444。除非你有特定的需求,否则通常不需要改变这些默认设置。作者设置的是4445端口,简而言之,如下图:
插件用的全是插件的端口,4444是默认值;JMeter的HTTP请求还是请求的本地Springboot的ip和端口:localhost和8085。
实践感悟
作者昨天晚上开始学习,看起来很简单的过程,心态崩了好几次,今天早上才做完。目标是性能测试中实现下图:
作者之前写了一个简单的Springboot加密解密的本地程序信息安全第三周_Joy T的博客-CSDN博客,想着为之后本地程序接口测试、性能测试练习一下,但是遇到了很多错误,在本篇,作者将错误和注意事项讲一下,具体实现过程建议听老师的课。(作者使用的是windows的本地程序)
1.JAVA版本
这是最槽蛋的,为了实现上图,需要安装插件:
但是,这个插件只是用来收集性能监听数据的,重点还是要在服务器上部署一个叫做ServerAgent-2.2.3的监听程序,通过startAgent.bat文件打开。这两个文件是一切槽蛋的来源!大多数人都会发现这个.bat文件打开之后闪退,其实就是JAVA版本的问题,没有别的原因!
™这个2.2.3的文件,不适合现在高级的JAVA版本,甚至作者从JAVA17开始退到11,再从11退到8都不行,JAVA8都不行啊读者朋友们!
巨离谱,这里的解决方法是下载一个1.8的JRE。请参考这篇文章:Jmeter一点击运行ServerAgent就闪退关闭退出问题的解决 - blazerrr - 博客园 (cnblogs.com)
这里唯一一点那位高人没讲的,就是在JRE/bin下运行时,不能直接照抄startAgent.bat文件的第二行,因为存在语法错误!
一定要把后面的%*去掉才能够在JRE下运行,否则会报错:
如果不是这个提示,而是:
那就是CMDRunner.jar的位置没搞好,一定是这个原因,其他原因不用找了。..\..\不能有间隔!
这个错误来自于作者想投机取巧直接把CMDRunner.jar放在JRE/bin下,但是,它的运行需要找其所在目录的文件,使用这个命令的话,其所在目录是JRE/bin而不是ServerAgent-2.2.3文件夹,所以找不到那些文件,无法打开。
2.不要着急
作者看网上的帖子,无一不是查找了很久很久才配置好的,所以大家遇到麻烦一定不要灰心,不就是版本不对吗,重新搞不就行了!
一定不要烦,哦对了,JAVA还有一点就是,你在卸载JDK的时候,一定不能只卸载表面的安装文件夹,它会有残留文件,这些残留文件百分之九十九都会造成后面的安装或者使用错误!一定要找到电脑系统中的程序,把带JAVA的那种空白的看不出来是啥的那些残留文件全删的干干净净。
相关文章:
JMeter性能分析实战一:日常登录接口
负载测试 日常需求:负载测试! 对于桥的负载测试:我给你20t的一排车辆,看你能不能撑得住20t! 对于系统的负载测试: 逐步增加负载,便于问题的发现和定位,不要操之过急。逐步增加负载…...
内外网结合的多服务发布架构
1. 需求 1)有多个独立的web服务需要对外发布。 2)有AIGC的大模型服务需要在内网图形工作站上运行,也需要对外发布接口。 3)所有服务需要通过域名访问。 2. 现有资源 1)阿里云上的ECS云服务器一台,考虑…...
Unity中Shader的光照模型Lambert
文章目录 前言一、Lambert光照模型1、公式可以使用图形计算器来看出这个点积对于结果的影响 前言 Unity中Shader的光照模型Lambert 一、Lambert光照模型 1、公式 A:可以理解为环境光的颜色 K:反射系数 LC:主要的入射光的颜色 N:…...
(一)Log4Net - 介绍
0、相关概念 Log4j 几乎每个大型应用程序都包含自己的日志记录或跟踪 API。根据这一规则,E.U. SEMPER 🌹项目决定编写自己的跟踪 API。那是在 1996 年初。经过无数次的增强、几个化身和大量的工作,API 已经发展成为 log4j —— 一个流行的 Ja…...
[bug] mysql 时间与本地不一致
通过 select now() 查询到的时间比本机少了8个小时。 show variables like %time_zone%; //查询当前时区set global time_zone8:00; //在标准时区上加8小时,即东8区时间flush privileges; # 立即生效...
【改造先序遍历】222. 完全二叉树的节点个数
222. 完全二叉树的节点个数 解题思路-先序 直接改造先序遍历算法针对一个节点 如果节点为空 那么直接返回0其余交给递归 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …...
windows文件和目录相关命令
目录 dir:用于浏览当前文件夹的内容。 cd:用于更改所在的工作目录。 md:用于创建一个新的目录。 rd:用于删除文件夹,如果不加/s参数的话只能删除空目录。 echo:用于输出一段文本信息。 type࿱…...
TL-ER3220G端口映射设置
1、打开IE浏览器或其它浏览器,在地址栏输入192.168.1.1登录路由器的Web管理界面; 2、打开后弹出密码输入框,输入路由器的用户名和密码,出厂默认值为admin/admin,成功登录后将看到路由器的系统状态信息; 3、…...
MySQL Cluster
文章目录 1.简介2.组成参考文献 1.简介 MySQL Cluster 是官方推出的基于 NDB(Network DataBase)存储引擎的高可用和可伸缩的分布式数据库系统。 以下是 MySQL NDB Cluster 的主要特点和能力: 高可用:MySQL Cluster 具有内置的高…...
Spring封装的原生WebSocket使用,带组的实现
前言 为了和TIO来进行对比websocket的简易程度,我这篇就是写一下Spring原生的webSocket的正常操作 拿来对比就可以说说优劣性 正文 首先还是导入原生依赖,这里不需要写版本号 <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…...
Linux高性能服务器编程 学习笔记 第十一章 定时器
网络程序需要处理定时事件,如定期检测一个客户连接的活动状态。服务器进程通常管理着众多定时事件,有效地组织这些定时事件,使其在预期的时间被触发且不影响服务器的主要逻辑,对于服务器的性能有至关重要的影响。为此,…...
jenkins拉取git代码 code 128解决方案
jenkins拉取git代码 code 128解决方案 处理方案: 先检查一下自己的账号正常是否有权限(如账号正常有权限请看第二步)找到Jenkins工作目录,重命名caches文件夹(或直接删除caches内的所有内容) # 进入到jenkins目录(注意…...
【Linux】 ls命令使用
ls(英文全拼: list directory contents)命令用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。 ls命令 -Linux手册页 著者 由Richard M.Stallman和David MacKenzie撰写。 语法 ls [-alrtAFR] [name...] ls命…...
【CVE-2023-35843】NocoDB 任意文件读取漏洞
一、漏洞描述 NocoDB 是 Airtable 的开源替代方案,可以“一键”将 MySQL、PostgreSQL、SQL Server、SQLite 和 MariaDB 转换为智能电子表格。此软件存在任意文件读取漏洞。 二、影响范围 NocoDB<0.106.1 三、网络空间搜索引擎搜索 fofa查询 icon_hash"-…...
在 ubuntu 22.04 上配置界面服务器 vnc
xrdp服务器的安装 步骤 1.安装服务器 $ sudo apt install tightvncserver // 命令过后并没有启动服务器 // 这个包没有 systemd 脚本,其不被 systemd 管理!!!查看配置 $ cat ~/.vnc/xstartup #!/bin/shxrdb "$HOME/.Xresources" xsetroot -solid grey #x-termina…...
强化学习------Sarsa算法
简介 SARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决策过程策略的算法,通常应用于机器学习和强化学习学习领域中。它由Rummery 和 Niranjan在技术论文“Modified Connectionist Q-Learning(MCQL)” 中…...
[HNCTF 2022 WEEK2]easy_unser - 反序列化+wakeup绕过+目录绕过
题目代码: <?php include f14g.php;error_reporting(0);highlight_file(__FILE__);class body{private $want,$todonothing "i cant get you want,But you can tell me before I wake up and change my mind";public function __construct($want){…...
FastThreadLocal 快在哪里 ?
FastThreadLocal 快在哪里 ? 引言FastThreadLocalset如何获取当前线程私有的InternalThreadLocalMap ?如何知道当前线程使用到了哪些FastThreadLocal实例 ? get垃圾回收 小结 引言 FastThreadLocal 是 Netty 中造的一个轮子,那么为什么放着…...
ggkegg | 用这个神包玩转kegg数据库吧!~(一)
1写在前面 好久没更了,实在是太忙了,值班真的是根本不不睡觉啊,一忙一整天,忙到怀疑人生。😭 最近看到比较🔥的就是ggkegg包,感觉使用起来还是有一定难度的。🫠 和大家分享一下使用教…...
【小黑送书—第三期】>>《深入浅出SSD》
近年来国家大力支持半导体行业,鼓励自主创新,中国SSD技术和产业良性发展,产业链在不断完善,与国际厂商的差距逐渐缩小。但从行业发展趋势来看,SSD相关技术仍有大幅进步的空间,SSD相关技术也确实在不断前进。…...
linux虚拟机查看防火墙状态
linux虚拟机查看防火墙状态 在Linux虚拟机中,你可以通过以下几种方法查看防火墙状态: 查看iptables防火墙状态 对于使用iptables防火墙的Linux系统,可以使用以下命令查看防火墙状态: sudo iptables -L -v -n查看firewalld防火墙…...
Docker 安装 MongoDB
一、什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 二、MongoDB的安装 这里使用docker来安装MongoD 1.docker 拉取mysql镜像 docker pu…...
c++解压压缩包文件
功能实现需要依赖相关头文件和库文件,我这里的是64位的。需要的可以在这下载:https://download.csdn.net/download/bangtanhui/88403596 参考代码如下: #include <zip.h> #pragma comment(lib,"libzip.lib")//解压压缩包 /…...
MySql学习笔记:MySql性能优化
本文是自己的学习笔记,主要参考以下资料 - 大话设计模式,程杰著,清华大学出版社出版 - 马士兵教育 1、MySql调优金字塔2、MySql调优2.1、查询性能2.1.1、慢查询2.1.1.1、总结 1、MySql调优金字塔 Mysql 调优时设计三个层面,分别是…...
机器学习(四十八):粒子群优化(PSO)-提升机器学习模型准确率的秘密武器
文章目录 PSO算法简介为什么使用PSO优化机器学习参数?PSO与其他启发式算法的比较如何使用PSO优化机器学习模型?模块安装和测试例子PSO优化决策树总结PSO算法简介 粒子群优化算法(Particle Swarm Optimization,PSO)是一种模拟鸟群觅食行为的启发式算法。在PSO算法中,每个…...
MySQL - mysql服务基本操作以及基本SQL语句与函数
文章目录 操作mysql客户端与 mysql 服务之间的小九九了解 mysql 基本 SQL 语句语法书写规范SQL分类DDL库表查增 mysql数据类型数值类型字符类型日期类型 示例修改(表操作) DML添加数据删除数据修改数据 DQL查询多个字段条件查询聚合函数分组查询排序查询…...
[图论]哈尔滨工业大学(哈工大 HIT)学习笔记16-22
视频来源:2.7.1 补图_哔哩哔哩_bilibili 目录 1. 补图 1.1. 补图 2. 双图 2.1. 双图定理 3. 图兰定理/托兰定理 4. 极图理论 5. 欧拉图 5.1. 欧拉迹 5.2. 欧拉闭迹 5.3. 欧拉图 5.4. 欧拉定理 5.5. 伪图 1. 补图 1.1. 补图 (1)…...
使用关键字abstract 声明抽象类-PHP8知识详解
抽象类只能作为父类使用,因为抽象类不能被实例化。抽象类使用关键字abstract 声明,具体的使用语法格式如下: abstract class 抽象类名称{ //抽象类的成员变量列表 abstract function 成员方法1(参数); //抽象类的成员方法 abstract functi…...
Java中使用正则表达式
正则表达式 正则表达式(Regular Expression)是一种用于匹配、查找和替换文本的强大工具。它由一系列字符和特殊字符组成,可以用来描述字符串的模式。在编程和文本处理中,正则表达式常被用于验证输入、提取信息、搜索和替换文本等…...
Python之字符串分割替换移除
Python之字符串分割替换移除 分割 split(sepNone, maxsplit-1) -> list of strings 从左至右sep 指定分割字符串,缺省的情况下空白字符串作为分隔符maxsplit 指定分割的次数,-1 表示遍历整个字符串立即返回列表 rsplit(sepNone, maxsplit-1) -> …...
app推广放单平台/谷歌seo优化怎么做
接下来写一些官方驱动的改变 1.DS1302 大家实在记不住的话就用数码管搞一个假的。 /*ds1302.h相关程序*/ #ifndef __DS1302_H #define __DS1302_H#include "system.h"void Write_Ds1302_Byte(unsigned char temp); void Write_Ds1302( unsigned char address,uns…...
徐州网站建设优化宣传/百度平台客服人工电话
一、什么是生产线3D可视化解决方案? 生产线3D可视化解决方案,是结合物联网监控系统(智慧工厂)、虚实联动与三维建模先进技术,以三维立体模式呈现出来,使得界面直观、简单,便于监控人员识别异常信…...
wordpress好看的页面跳转/站长网
继续上一篇文章,介绍FMCW激光雷达采用的MEMS振镜扫描原理,之所以也需要介绍,因为我们的激光雷达有多种扫描制式,也包括MEMS振镜扫描。MEMS 光学扫描器又称 MEMS 微镜,是激光雷达扫描器的一种。MEMS 指 微机电系统&…...
做电商网站企业/app开发公司
PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)刷入EMMC 如需转载请标明出处:http://blog.csdn.net/itas109 技术交流:129518033 文章目录PHICOMM(斐讯)N1盒子 - Armbian5.77(Debian 9)刷入EMMC前言1. 先刷系统到U盘2. 修改uEnv.ini3. 替换dtb文件4. 启动…...
如何在自己电脑上做网站服务器/数据网站
2.1 问题 创建randpass.py脚本,要求如下: 编写一个能生成8位随机密码的程序 使用random的choice函数随机取出字符 改进程序,用户可以自己决定生成多少位的密码 2.2 方案 导入random模块,通过random静态对象调用choice()方法&…...
增城市网站建设/上海网站建设
//人民币小写转大写 export function rmb (num) {const numArray num.split(.)const numList [零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖]const radiceList [, 拾, 佰, 仟]const unitList [, 万, 亿, 兆]const decList [角, 分]const num1 numArray[0].split().reverse().…...