如何使用Jmeter,看完这本指南你就知道了

article/2025/9/16 17:51:32

序言

由于公司在来年需要进行压力测试,所以也就借节假日的机会来学习一下压力测试的步骤,由于本人的学习时间比较短,希望各位大神朋友们能够多多的谅解并指正在下的错误,在此仅表敬意

适应人群

1、初入门的压力测试工程师

2、为入门但是打算在软件测试方面发展的同学

3、对软件测试有浓厚的兴趣的人

压力测试初窥探

压力测试顾名思义就是通过模拟指定的用户数量同时访问网站从而达到对网站进行施压,进而测试出网站在高并发问题上的性能优势劣势以及应对DDOS攻击的防护能力,这也是考验一个网站的健壮性的一个特点(本人认为的),目前主流的压力测试工具有Jmeter、RoadRunner,其中RoadRunner是有惠普公司开发的一款非开源的商业软件,在性能测试方面可以说是市面上最牛的测试工具,但是由于其使用需要收费,对于很多自营公司但是资金又不是十分的充裕来说,这样一笔费用确实比较难让人接受,所以在此我就推荐大家使用另外一款压力测试工具Jmeter,其在测试方面虽然相比于RoadRunner来说还是有很多的不足但是由于Jmeter是开源的,而且基本上可以完成公司正常的测试要求,所以Jmeter这一款软件才是我认为的最佳的压力测试工具

Jmeter软件的安装

Jmeter软件是纯JAVA开发的软件,所以需要配置JAVA的运行环境才能够运行

环境安装完成后再命令行中运行中直接运行命令java,出现下面的内容即为安装成功

安装成功后直接打开bin目录下面的jmeter.bat文件,初次打开可能会久一点,请耐性等候

Jmeter的几个常见的概念

1、测试计划,所有的测试工作都要基于测试计划来进行,一个测试项目中就只能存在一个的测试计划,测试计划在整个项目中充当的是一个全局设置的作用,这样也就不难解释为什么一个项目中就只能有一个测试计划

2、线程组,线程组顾名思义也就是相当于很多线程的一个集合,在项目中可以有多个的线程组,线程组在项目中主要是集合对一个对象进行测试的线程,比如说你想测试A网站和B网站,这个时候你就可以通过创建两个线程组来完成这个任务

3、HTTP请求,HTTP请求的原理是通过创建HTTP的多条请求,从而达到测试网站性能的作用,HTTP请求也是压力测试中最为常见的,其他的还有数据库测试、FTP测试等

好了,在这里就不多说了这些概念了,接下来就来进行一个简单的应用,其他的概念会在下面提到

Jmeter的简单应用

Jmeter最为大家所认识的是它在对网站性能上的测试,所以就从这个开始介绍

任务:模拟5个用户同时访问,并且访问的时间要在2秒内结束,目标网站是http://www.cnblogs.com/st-leslie/

分析:模拟5个用户其实说白了也就是模拟发送五条HTTP请求,这个相信大家都应该知道的吧,不解释了。

开始步骤:

1、打开Jmeter,并将测试计划命名为FirstDemo,如下图所示

2、测试计划创建完成下一步是创建线程组,线程组中主要有线程数、Ramp-Up Period、循环次数,调度器下面我们就来对这几个参数简单的介绍一下

线程数:线程数相当于要虚拟的用户

Ramp-Up Period:相当于是线程所用的首次循环的时间范围,后面会进行详细的解释

循环次数:用户循环的次数,循环次数为永远默认不勾选,这个的主要好处是用来绘制图标图标所用,后面进行详细解释

调度器:调度器主要是用来设定特定时间运行所用的

根据本次的测试任务要求,线程数我们设置为5,Ramp-Up Perod我们设置为2,循环次数设置为1,如下图所示

3、线程组创建完成下面就来介绍一下最核心的部分,创建HTTP请求,HTTP请求的创建流程是:线程组=>添加=>Sampler(取样器)=>HTTP的请求,下面是HTTP请求的主要参数,其他的参数比较简单就不做介绍,相信你读者都会懂的

服务器名称或IP:这里指的是你要访问的目标主机的域名   

注意:在输入的时候切记不要将"http://"输入其中这样jmeter会出错,直接写WWW即可,本题也就是输入www.cnblogs.com/st-leslie/

端口号:默认的HTTP的端口号是80端口,这个默认的端口号可以不填

协议:指的是数据传输协议,一般我们填写的是HTTP协议

方法:提交信息的方法,一般我们常见的是GET,POST方法

路径:指的是发生错误所要重定向的URL地址或者本地localhost地址

同请求一起发送参数:这个参数相当于GET或者是POST方法提交的一些用户的自定义信息,这个参数除了可以接受直接设置,也可以使用CSV进行设置

同请求一起发送文件:这个的使用方法跟上面的相似就不介绍了

其他的一些参数比较少用到,一般不设置

将HTTP请求设置为如下图:

4、好了,基本上已经完成了测试的搭建,现在可以直接的运行,运行的快捷键是Ctrl+R,也可以使用下面的按钮

但是你会发现这样运行之后你什么现象都没有看到,这是正常的,因为这样虽然理论上已经搭建完成但是缺少了一个监视器,所以你是没有办法查看结果的,其中监视器的位置是在添加=>监视器下面。常见的监视器有:聚合报告、用表格查看结果、查看结果树、图形结果

聚合报告:我们能够从聚合报告中获取相关的测试结果,这个也是我们分析结果的主要依据,这个显示的是同一HTTP请求

用表格查看结果:通过表格的形式将结果呈现,从这里我们可以看到每次HTTP请求发送的情况,相比于聚合报告如果同一个请求发送给多次聚合报告是不会记录的,但是用表格查看结果是会将其进行记录

查看结果树:这个跟表格查看结果有点相似,但是比起根据有详细的发送请求的信息,以及返回的结果可以查看

图形结果:这个顾名思义地球人都懂

这里的监视器的用法都是一样的,我们就以聚合报告为例,为HTTP请求添加聚合报告,其他的监视器的使用方法基本相同

层级关系如下:

好了,这样便是真正的大功告成了,运行结果如下:

参数说明:

1、Label:HTTP请求的名称, 这里是采用默认的名称

2、#Samples:这个是指,采集器的数量,计算公式是:线程数*循环次数

3、这些样本中HTTP的平均时间

4、样本的中位数时间,本题中的时间是从大到小排列的第3位,其中Average和Median比较相近,这个也反映了这组请求的时间起伏不大

5、90%Line:指的不是Average*100%*90%,而是假如有10个数,那么我们去的就是百分之90的位置的数,也就是从小到大排列的第9位

5、Throughout:这个也就是我们常说的吞吐量,主要是用来衡量网站性能的关键指标,一个网站的吞吐量越高意味着性能越强

6、其他的参数是最小时间、最大时间、出错率、流量查看

实践经验篇

提升篇说白了就是一些本人在练习的时候遇到的一些特殊情况,在此分享给大家

正如上面所说的我们可以把聚合报告放在HTTP请求目录的下面,但是不知道有没有人跟我想的是一样的,就是聚合报告可不可以放在线程组层级的下面,下面我们就来验证这个说法,如下图所示:

从上图我们可以发现,这两个层级关系都是一样的(虽然里面的数据不同,但是这些可能会受到网络流量等其他的一些网络环境所影响),那聚合报告(监视器)到底与HTTP请求之间的关系是什么呢?这里我们可以先猜测然后进行验证,我们猜测监视器的作用范围是监视同级以下的Samples,现在我们就来验证,如下图所示

聚合报告的结果是聚合报告1

聚合报告

聚合报告3

由此可以看出,聚合报告1=聚合报告+聚合报告3

下面我们就来谈谈并发的问题,如上面所示,我们一般人会以为只要把时间设置为Ramp-Up Period=0的时候就一起发送的,其实并不然,下面我们就来举例看看Ramp-Up Period这个是怎么一回事,先清除所有的测试内容,然后在HTTP请求的下面添加用表格查看结果,如图所示:

我们可以从红色的框内发现,2s指的是所有线程一次循环的时间是在两秒钟以内,但是0s就不是这样的效果了,这个有谁知道请留言一下,大家学习学习

好了,怎么实现真正意义上的同时并发呢?这个其实我们可以引入Synchronizing Timer定时器,我们只要在Number of Simulated Users to Group by选项中设置并发数便可以了,但是这个并发数一定要小于线程数要不然就不会发生触发,下面我们就来看看这个的运行情况

看到了吗?HTTP请求中的Samples不是一条一条加上去的,而是一下子就5条Samples同时出现

如上面所说的,测试计划其实就是提供一个全局设置,但是在Jmeter中还有一个可以提供全局设置的地方就是在前置处理器下面的用户参数, 如下图所示,我们将80端口号用port变量来代替

然后将HTTP请求改为下图所示

引用的方法是${变量名},这个方法不仅使用与端口号的设置,其他的设置也是相同的道理

这个设置你也可以在测试计划中添加效果都是一样的

对了,可能有些读者以前是熟悉RoadRunner测试工具的,会认为RoadRunner测试工具有比较直观的图形化可以进行比较,其实这个在Jmeter中也是有的,你只要在监视器中添加图形结果即可以看到,但是这个图形结果一般我们会将循环次数设置为永远,循环次数太少就没有什么比较的意义

我们就以循环5次和永远来进行比较一下

循环5次:

循环永远

哈哈,是不是直观了好多呢(笑点低)

上文中我们有写到CSV的用法,其实CSV的用法有点类似用户参数的设置,具体请看这里


http://chatgpt.dhexx.cn/article/XoK2p5Dn.shtml

相关文章

01-下载安装jmeter

1、前期准备: 下载配置好jdk:下载地址,点击下载 配置教程参考: 2、jmeter下载地址: 1、下载jmeter地址,点击进入官网下载 2、进入官网,会看到两种下载资源 binaries是可执行版本,直接下载解…

【jmeter】

目录 环境配置安装Java环境安装jmeter安装python环境数据库配置 线程组HTTPHTTP请求默认值HTTP信息头管理器 参数化用户定义的变量csv数据文件设置用户参数函数计数器函数随机数函数时间函数 直连数据库断言响应断言大小断言:判断字符串内容的长度。断言持续时间 逻…

1-1 JMeter官网了解

作为测试小白的我,在微信知识星球,参加了一个为期1年的21天打卡的,关于测试方方面面知识的星球。 听同事说JMeter似乎很强大,接口测试、自动化测试、性能测试都可以搞? 所以选择从JMeter开始,因为自己最近也…

JMeter下载及安装配置教程

参考:入门部署教程 – Jmeter中文网 本文是在win10环境下安装使用jmeter,jmeter可以运行在多平台上Windows和Linux。 环境准备: java 8 jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境,需安装JDK1.8环境,JDK下载地…

Jmeter下载与安装

Jmeter与JDK下载与安装 1、进入jmeter官网,下载地址:https://jmeter.apache.org/ 第一步,点击Download Releases 第二步, 点击apache-jmeter-5.1.1.zip sha512 pgp,下载完后解压 2、下载并安装JDK,下载地址:https://www.oracle.com/technetwork/java/javase/downloads…

jmeter(一)基础介绍

参考书籍:段念《软件性能测试与案例剖析》——第二版 推荐一本书《零成本实现web性能测试——基于Apache—jmeter》,主要内容是一些关于jmeter的实战使用,想学习的可以去看看。。。 jmeter是一款优秀的开源性能测试工具,目前最新版…

Kotlin带有接收者的函数类型(block: T.() -> Unit)

前言 Kotlin标准库的 Standard.kt 包含几个函数,其唯一目的是在对象上下文内执行代码块。 当我们在提供了lambda表达式的对象上调用此类函数时,它将形成一个临时作用域。在此作用域中,我们可以访问没有其名称的对象,这些功能称为…

mysql之类型转换函数

类型转换函数 类型转换函数和case函数 1.隐式类型转换和显式类型转换的概念 隐式类型装换: 两个值进行运算或者比较,首先要求数据类型必须一致。如果发现两个数据类型不一致时就会发生隐式类型转换。例如,把字符串转成数字,或者相反: SELECT 1+‘1’; – 字符串1转成数字 …

C语言入门---函数类型与返回值(int和void)

int和void的区别? 哈喽,各位小伙伴们,在我们学习C语言的过程中经常会看到书中的main函数前带有int和void,就像下面这样: 上面这两种有什么区别呢?在C语言中,可以把函数分为有返回值函数和无返…

Typescript总结(三)——函数类型详解

本篇博客主要总结一下在Typescript中的函数写法,以及函数类型的总结。 一、Typescript的函数类型 如果在一个函数中,需要传入一个函数作为参数,可以如下所示,进行声明定义。 我们也可以通过type来定义函数类型 如上述代码所示…

c语言函数返回值类型必须,C++中函数类型与定义的函数返回值类型必须相同么?...

C++中函数类型与定义的函数返回值类型必须相同么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C++中函数类型与定义的函数返回值类型必须相同么? 1.可以。只要返回值、参数列表的参数个数、类型、顺序中的一…

C语言 函数类型

1. 在 [不完全类型] 一文中,描述了C中的3大数据类型,即: 函数类型、对象类型和不完全类型, 这里再次引用这张图来进行“函数类型”的讲解。 可以看到,函数类型是对立于其他的类型的,它不像“对象类型和不完全类型”,可以延伸(或是派生)出其他对象,或是包含一子系列…

函数高级

函数: 1、引用传递 2、可变参数、命名参数、万能参数 3、匿名函数(lambda) 4、闭包(有点难) 5、递归 6、偏函数 7、函数作为参数传递 8、函数调用全局变量 9、全局变量和局部变量 装饰器(函数的深层次使用…

68 4种函数类型

文章目录 1、无参数,无返回值的函数2、无参数,有返回值的函数3、有参数,无返回值的函数4、有参数,有返回值的函数5、小结 函数根据有没有参数,有没有返回值,可以相互组合,一共有4种 无参数&…

C语言函数之—函数的分类

目录 1. 函数是什么? 2. C语言中的函数分类 2.1 库函数 2.1.1 为什么会有库函数? 2.1.2 那怎么来学习库函数呢? IO函数—getchar() , putchar() 字符串操作函数—strcmp() , strlen() rand函数,srand函数 和time函数 2.1.3 如何学会…

torch.optim.Adam() 函数用法

Adam: A method for stochastic optimization Adam是通过梯度的一阶矩和二阶矩自适应的控制每个参数的学习率的大小。 adam的初始化 def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8,weight_decay=0, amsgrad=False): Args:params (iterable): iterable o…

pytorch ——torch.optim.Adam

class torch.optim.Adam(params, lr0.001, betas(0.9, 0.999), eps1e-08, weight_decay0)它在Adam: A Method for Stochastic Optimization中被提出。(https://arxiv.org/abs/1412.6980) 参数: params (iterable) – 待优化参数的iterable或者是定义了参数组的dict…

在ADS中使用OPTIM优化设计

在ADS中可以使用OPTIM控件来对电路变量进行优化设计,以实现电路性能目标。ADS常用的S参数仿真和谐波平衡仿真中都可以进行优化设计。 在S参数仿真中进行优化设计 现在以一个阻抗匹配网络的设计为例,来展示在S 参数仿真中进行优化设计的方法。 我们搭建…

torch.optim.SGD()

其中的SGD就是optim中的一个算法(优化器):随机梯度下降算法 PyTorch 的优化器基本都继承于 "class Optimizer",这是所有 optimizer 的 base class torch.optim是一个实现了各种优化算法的库。大部分常用的方法得到支持…

torch.optim.lr_scheduler:调整学习率

本文是笔者在学习cycleGAN的代码时,发现其实现了根据需求选择不同调整学习率方法的策略,遂查资料了解pytorch各种调整学习率的方法。主要参考:https://pytorch.org/docs/stable/optim.html#how-to-adjust-learning-rate 1 综述 1.1 lr_sche…