jmeter-个人总结

本文是在下关于jmeter的一些基础使用、问题解决的总结
我以一介小白之身接触jmeter,过程甜蜜又痛苦,犹记当初到处找解决方法时的几颗上火痘,非常感谢无私分享的网友萌。当时领导也要求过写个文档分享,正好最近有时间,就整理整理也发到这里啦。内容不咋高深,但相信能对和我一样的小白有些帮助~ 诸位有意见建议欢迎指出,感谢~
以上-20200813

20200824–才发现图片这么糊,我精心截得图还写了字怎么可以辣么糊!!!重新上传撒,不过这次也是之前写的文档里的图,应该也不算特别清晰。但俺目前没时间重新写脚本截一遍图,先凑活下撒~

jmeter个人总结

  • 1.Jmeter介绍与安装
    • 1.1 Jmeter介绍
    • 1.2 Jmeter安装
      • 1.2.1 下载安装
      • 1.2.2 配置环境变量
    • 1.2.3 启动jmeter
    • 1.4 服务器监控插件
  • 2. Jmeter使用
    • 2.1 一个简单的HTTP请求
    • 2.2 线程组
    • 2.3 HTTP请求默认值
    • 2.4 CSV数据文件设置
    • 2.5 json提取器
      • 2.5.1 从返回数据中提取某个值或某几个值
      • 2.5.2 从返回数据中提取数组中的某个值
      • 2.6 HTTP信息头管理器
      • 2.7 ForEach控制器
    • 2.8 循环控制器
    • 2.9 定时器
      • 2.9.1 固定定时器
      • 2.9.2 同步定时器
      • 2.9.3统一随机定时器
    • 2.10 监视器
      • 2.10.1 查看结果树
      • 2.10.2 用表格查看结果
      • 2.10.3 聚合报告
      • 2.10.4 PerfMon
      • 2.10.5 每秒点击
      • 2.10.6 每秒事务
      • 2.10.7 响应时间
    • 2.11 函数助手
    • 2.12 非GUI压力测试
  • 3. 后续补充
    • 3.1 请求数据包含图片或文件
    • 3.2 将返回信息某字段导出到文件

1.Jmeter介绍与安装

1.1 Jmeter介绍

Jmeter是一款使用Java开发的,开源免费的测试工具,主要用来做性能测试。

1.2 Jmeter安装

1.2.1 下载安装

官网下载地址:http://jmeter.apache.org/download_jmeter.cgi。选择binary版本即可。
下载完成后解压到你希望的位置。
注:jmeter需有Java环境支持,不同版本对Java版本的要求不同,记得选择对应版本。
jmeter-个人总结_第1张图片

1.2.2 配置环境变量

“计算机”图标右键选择“属性”->点击高级系统设置->高级->环境变量->系统变量
1) 创建JMETER_HOME,值是JMeter的解压路径,如中括号内容:
【D:\apache-jmeter-4.0】;
2) 如果没有classpath则新建,在classpath 变量添加以下中括号内容:
【%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib/logkit-2.0.jar;】
jmeter-个人总结_第2张图片

1.2.3 启动jmeter

进入解压目录的bin文件下,双击jmeter.bat,启动JMeter。可将jmeter.bat发送到桌面快捷方式,方便打开。
使用时不要关闭命令窗口。
jmeter-个人总结_第3张图片
Jmeter自带多语言支持:
jmeter-个人总结_第4张图片
1.3 插件安装
下载plugins-manager.jar,官方下载地址:https://jmeter-plugins.org/downloads/all/
完成后将jar包放在jmeter安装目录下的\lib\ext文件夹中,启动jmeter,plugins manager出现在选项下。
jmeter-个人总结_第5张图片
点击选项下的plugins manager,即可下载插件,插件安装好后jmeter会自动重启。
建议至少安装以下三项:
jmeter-个人总结_第6张图片

1.4 服务器监控插件

在1.3中我们下载了PerfMon插件:它可以监控服务器硬件,如CPU,内存,硬盘读写速度等,但想使用这个插件,我们还需要下载ServerAgent,解压放到你想监控的服务器上,也可以监控一下测试用的计算机。
jmeter-个人总结_第7张图片
已Windows为例,双击startAgent.bat运行,默认使用4444端口,使用过程中不要关闭窗口。Linux下运行startAgent.sh。PerfMon详细使用请看2.10.4 PerfMon。
注:ServerAgent也需要Java环境支持。

2. Jmeter使用

2.1 一个简单的HTTP请求

添加一个线程组
jmeter-个人总结_第8张图片
添加一个HTTP请求,以访问百度为例
jmeter-个人总结_第9张图片
jmeter-个人总结_第10张图片

添加一个结果树,方便查看请求的发送数据和响应数据,:
jmeter-个人总结_第11张图片
点击运行,在结果树里可以看到请求数据和响应数据。
在这里插入图片描述
jmeter-个人总结_第12张图片
导航栏常用功能:
在这里插入图片描述

2.2 线程组

线程组配置项:
jmeter-个人总结_第13张图片

线程数可以理解为虚拟用户数量
勾选调度器后,可以设置压力测试持续时间等参数,通过设置启动时间和结束时间在指定时间进行压力测试。

2.3 HTTP请求默认值

一个线程组可能有很多个请求,我们需要给每个请求配置协议、服务器IP、端口号等等,如果这些请求都是向同一台服务器发送请求的呢?我们可以将这些共同的、重复的内容放在“HTTP请求默认值”中,线程组内的请求就不用每次都配置这些了。只需要写不同的部分就好了。

添加HTTP请求默认值:
jmeter-个人总结_第14张图片
配置HTTP请求默认值和HTTP请求
jmeter-个人总结_第15张图片
jmeter-个人总结_第16张图片

2.4 CSV数据文件设置

并发测试时,我们需要模拟多用户登录,这样就不能再把HTTP请求-登录下的参数写成固定值了。可以通过设置CSV数据文件设置读取文件数据作为参数,运行多少线程就读取多少组数据。

添加:
jmeter-个人总结_第17张图片
配置:
jmeter-个人总结_第18张图片

使用格式:${变量名称}。例:在登录请求中调用上图两个参数
jmeter-个人总结_第19张图片

2.5 json提取器

如果我们想在请求的响应数据中提取某个值,在对应请求下添加json提取器:
jmeter-个人总结_第20张图片

2.5.1 从返回数据中提取某个值或某几个值

jmeter-个人总结_第21张图片

之后使用:${token};
如果要提取多个值,各项配置内容以分号间隔。

2.5.2 从返回数据中提取数组中的某个值

jmeter-个人总结_第22张图片

2.6 HTTP信息头管理器

请求中有一些信息需要写在HTTP信息头中,比如content-type、比如2.5.1中提取的token。
添加:
jmeter-个人总结_第23张图片
jmeter-个人总结_第24张图片

2.7 ForEach控制器

在2.5.2中,我们提取了一组ID值IdDatas。我需要它们当中的每一个都作为参数调用同一个接口,这个时候ForEach控制器可以实现这个需求。

添加ForEach控制器:
jmeter-个人总结_第25张图片
jmeter-个人总结_第26张图片

这个例子的结果是,从IdDatas中取第一个到第十个数据,每次循环下用“${ids}”获取当次的值。通常我们会在ForEach控制器下添加请求调用他们,例:
jmeter-个人总结_第27张图片

2.8 循环控制器

如果我们希望某个请求发送多次,可以用循环控制器实现。
jmeter-个人总结_第28张图片
设置次数为5,循环控制器下的内容会执行5次,然后进行下一步。
jmeter-个人总结_第29张图片

2.9 定时器

定时器的作用域

1. 定时器是在每个sampler(取样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
2. 当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3. 如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
4. 如果希望在sampler执行完之后再等待,则可以使用Test Action;

下面先介绍两个最常用的定时器。

2.9.1 固定定时器

设置等待时间,作用在请求调用前。
固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。
注意时间是以毫秒为单位的。
jmeter-个人总结_第30张图片
jmeter-个人总结_第31张图片

2.9.2 同步定时器

在请求前设一个集合点,阻塞线程,直到指定的线程数量到达后,再一起释放,可以产生较大压力。如果设置了超时时间,则等待超时时间后没能等到下一个请求就发送已经到达的请求。

以下图为例,模拟用户500,当有500个请求到达时释放请求。设置了超时时间3s,那么当3s下一个请求也未到达,即使到达请求数不到500也释放。
jmeter-个人总结_第32张图片
jmeter-个人总结_第33张图片

2.9.3统一随机定时器

和高斯随机定时器的作用差异不大,区别在于延时时间在指定范围内且每个时间的取值概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏移值之和。
jmeter-个人总结_第34张图片

2.10 监视器

帮助我们统计、查看、分析结果。
可以选择将结果保存到文件中,具体保存哪些项、保存方式可以在配置中配置。

2.10.1 查看结果树

jmeter中常用的监听器之一,通过它可以看到单次请求的发送信息和响应信息。
jmeter-个人总结_第35张图片
jmeter-个人总结_第36张图片

2.10.2 用表格查看结果

汇总所有请求,可以看到请求的开始时间、线程序号、第几次循环、响应时间、请求状态、发送和响应的字节数、等待时长等内容。

jmeter-个人总结_第37张图片
jmeter-个人总结_第38张图片

2.10.3 聚合报告

jmeter中常用的监听器之一,统计每个sample请求的次数、异常率、吞吐量、接受和发送速率等内容。
jmeter-个人总结_第39张图片
我们可以将结果保存到文件中,具体保存哪些项、保存方式可以在配置中配置。
jmeter-个人总结_第40张图片

结果示例:
在这里插入图片描述

2.10.4 PerfMon

监控服务器的性能,环境和插件配置参见1.3、1.4。

简单说一下常用的资源类型的指标项:

  1. CPU: combined,CPU使用百分比,多核CPU可选择。
  2. Memory:usedperc,对内存使用百分比。
  3. Disk I/O:queue,待I/O队列长度。
  4. Network I/O:bytesrecy,每秒接收字节数。
    jmeter-个人总结_第41张图片
    jmeter-个人总结_第42张图片

可以配置监听项的监听内容和显示方式。按自身需求选择。建议速率相关的设成MB显示,视觉上比较友好。
jmeter-个人总结_第43张图片

可以生成下图所示的折线图
jmeter-个人总结_第44张图片

2.10.5 每秒点击

每秒对服务器的请求数量。X轴为测试运行时间,Y轴为数量。
jmeter-个人总结_第45张图片
jmeter-个人总结_第46张图片

2.10.6 每秒事务

每秒完成的事务数。X轴为测试运行时间,Y轴为数量。不同的请求(成功和异常分别显示)用不同的颜色显示折线。
jmeter-个人总结_第47张图片

2.10.7 响应时间

显示响应时间的分布,X轴为测试运行时间,Y轴为响应时间。不同的请求有不同的颜色显示折线。
jmeter-个人总结_第48张图片
jmeter-个人总结_第49张图片

2.11 函数助手

函数助手提供了很多方法,方便我们以后参数化的调用。

以一个较常用的函数,__Random为例:
随机函数返回位于给定最小值和最大值之间的随机数。存储结果的变量名设置了,就可用这个做变量名调用。
我们需要1-10之间的随机数做参数,调用的时候用生成的函数字符串【${__Random(1,10,test)}】即可。
jmeter-个人总结_第50张图片
jmeter-个人总结_第51张图片

更多更全面的使用可参看官方文档:https://jmeter.apache.org/usermanual/functions.html

2.12 非GUI压力测试

使用GUI界面进行测试会占用大量内存,可以用无界面压测
在GUI界面设置并发数、测试时间等,添加各元件,保存测试计划,并关闭软件;

使用非GUI界面,用指令启动压力测试;
如:D:\Program Files\apache-jmeter-3.1\bin>jmeter -n -t testplan.jmx -l listener.jtl
打开jmeter.bat,在聚合报告元件中载入“listener.jtl”,查看聚合报告;
在监视器中中载入“listener.jtl”,查看数据。

3. 后续补充

3.1 请求数据包含图片或文件

在HTTP请求下有个文件上传。不影响参数或消息体数据。

点击浏览按钮,选择一张需要上传的图片,地址将会自动记录到文件名称栏目;
填写参数名称,根据实际需求填写;
MIME类型为multipart/form-data。
jmeter-个人总结_第52张图片

3.2 将返回信息某字段导出到文件

我遇到的问题是:接口200返回的数据有两种一个是成功或失败,也有可能是因服务异常导致失败。我需要统计因服务异常导致的失败,而这次不能只凭Response code判断。所以我想导出请求返回数据中的信息:message。
我本次用的方法是先用json提取器将每个请求的该数据提取出来,再用BeanShell 后置处理程序将其导出到文件。
至于网上其他方法,尝试了没有成功。因任务较急未继续试,后续可能会尝试。
1) 用json提取器提取返回信息中的message。
返回信息的结构是
{
“result”: false,
“message”: “失败,请重试”,
“timestamp”: “xxxxxxxxxxxxxx”
}
jmeter-个人总结_第53张图片
2) 用BeanShell 后置处理程序将提取的${msg}导出到文件。

// 脚本
FileWriter fstream = new FileWriter("C:\\Users\\xxxx\\Desktop\\msg.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(vars.get("msg")+ "\n");
out.close();
fstream.close();

jmeter-个人总结_第54张图片

你可能感兴趣的:(#,jmeter,jmeter,软件测试,压力测试)