性能测试——Jmeter基本用法概述

Jmeter基本用法概述

Jmeter:Apache组织开发的基于Java的性能测试工具

一、Jmeter安装与配置

1、下载

官方下载地址:https://jmeter.apache.org/download_jmeter.cgi

image

下载完解压即可

2、环境变量

配置完JDK无需额外配置

3、启动验证

进入bin目录,找到jmeter.bat并运行

image

能正常显示以下软件界面即安装成功

image

注意:关闭弹出的命令行界面同时会关闭jmeter

二、Jmeter文件目录介绍(*表示常用)

1、/bin目录——常用文件介绍;包含启动、配置等相关命令

examples:目录下包含Jmeter使用实例

ApacheJMeter.jar:Jmeter源码包

jmeter.bat:windows下启动文件*

jmeter.sh:Linux下启动文件*

jmeter.log:Jmeter运行日志文件*

log4j.conf:Jmeter日志配置管理

jmeter.properties:Jmeter配置文件*

jmeter-server.bat:windows下启动负载生成器服务文件*

jmeter-server:Linux下启动负载生成器服务文件*

shutdown.cmd:windows下jmeter关闭文件

stoptest.cmd:windows下jmeter测试停止文件

2、/docs目录——Jmeter帮助文档(官方本地文档目录;包含有框架类、无框架类、常量值、不建议使用列表、帮助文档、索引、框架综述等等)

/api/index.html:api接口文档*

3、/extras目录——辅助库;提供了对Ant的支持文件,可也用于持续集成

4、/lib目录——核心库;存放Jmeter依赖的jar包,同时安装插件也放于此目录

5、/licenses目录——软件许可文件,不用管

6、/printable_docs目录——可打印版本文档目录

/usermanual/get-started.html:Jmeter入门文档

/usermanual/index.html:Jmeter用户手册,非常详细*

/usermanual/component_reference.html:常用到的核心元件帮助文档*

7、LICENSE——许可说明

8、NOTICE——简单信息说明

9、README.md——官方基本介绍

三、Jmeter元件

组件:实现某个功能的基本单位(类似于方法)

元件:多个类似功能组件的容器(类似于类)

1、常见类型

  • 取样器:作用于线程组,用于发送请求
  • 逻辑控制器:控制语句执行顺序,类似python中的逻辑控制语句
  • 前置处理器:请求发送前执行,类似于setup
  • 后置处理器:请求后执行,类似于teardown
  • 断言:对响应结果进行匹配,类似于assert
  • 定时器:等待一定时间,类似于sleep()
  • 测试片段:封装的一段代码,供脚本调用,类似于工具类
  • 配置元件:对参数进行赋值,类似于参数化
  • 监听器:查看脚本运行结果,类似于python调试窗口的结果打印

2、作用域

根据测试计划中的树形结构确定,子节点作用于父节点,核心元件是取样器,对于父节点非取样器的组件,对父节点下的取样器都起作用

3、线程组

模拟多人操作,相当于test suite,线程数表示模拟的用户数

在测试计划下勾选独立运行每个线程组后将串行执行,否则默认并行执行

分类:

  • 线程组
  • setup线程组:在所有线程组之前执行
  • teardown线程组:在所有线程组之后执行

属性:

  • 线程数:模拟用户数量进行操作
  • ramp-up time:模拟操作全部执行耗费的时间
  • 循环次数:操作重复执行的次数,其中永远选择框通常与调度器和延迟创建线程知道需要配合使用
  • 调度器:对循环进行控制,其中持续时间通常与永远循环配合使用,延迟时间表示延后指定时间再执行
  • 延迟创建线程直到需要:默认一次性为线程组分配资源,勾选后仅在创建线程时分配资源

4、添加自定义变量

  • 通过线程组-添加-配置元件-用户定义的变量(作用域:线程组)
  • 通过测试计划添加(作用域:全局)

5、为不同用户添加不同参数

  • 方式一:线程组-添加-前置处理器-用户参数

其中:变量表示参数的个数,用户表示参数组的个数

  • 方式二:线程组-添加-配置元件-csv数据文件设置

其中:除忽略首行改为True外其余保持默认

变量名称设置后可以在测试计划的各种节点进行引用

  • 方式三:工具栏函数助手对话框-counter-生成

其中:生成函数后直接将函数做为变量值赋给请求参数

四、Jmeter断言

1、响应断言

方式:测试计划-线程组-HTTP请求-添加-响应断言

image

2、json断言

方式:测试计划-线程组-HTTP请求-添加-JSON断言

image

3、断言持续时间

对从发出请求到接受响应所需要的时间进行断言

方式:测试计划-线程组-HTTP请求-添加-断言持续时间

image

五、Jmeter关联

当请求之间存在依赖关系,如一个请求的入参是另一个请求的响应,这时候就需要用到关联处理。

常用的关联方法:

  • 正则表达式提取器
  • XPath提取器
  • JSON提取器

1、正则表达式提取器

看个例子:

<title>.*?<title>

其中:

  • .:是通配符,代表任何字符(除换行回车)
  • *:代表前面的字符出现一次或多次
  • ?:非贪婪匹配,找到左边界后,只要有匹配的右边界就停止继续查找;再次查找左右边界
  • .*:从左边界开始到最后一个右边界为止,中间的所有字符都会被匹配

Jmeter中的正则表达式提取器:

方式:测试计划-线程组-HTTP请求-添加-后置处理器-正则表达式处理器

image

2、XPath提取器

适用于响应体格式为HTML的请求

方式:测试计划-线程组-HTTP请求-添加-后置处理器-XPath提取器

image

3、Json提取器

适用于响应体格式为Json的请求

方式:测试计划-线程组-HTTP请求-添加-后置处理器-Json提取器

image

4、跨线程组关联

当有依赖关系的不同请求分别位于不同线程组时,不能用提取器来传递参数,而要通过Jmeter属性来传递

六、Jmeter脚本录制

方式:

  • 测试计划-添加-线程组
  • 测试计划-添加-非测试元件-HTTP代理服务器,更改目标控制器的值为测试计划>线程组
  • 测试计划-添加-配置元件-HTTP Cookie管理器(无需设置)
  • 调整本机的代理服务器地址和端口为接口地址
  • 开始录制

image

七、Jmeter逻辑控制器

用于控制脚本执行逻辑

1、IF逻辑控制器

方式:测试计划-线程组-添加-逻辑控制器-如果(if)控制器

2、循环控制器

方式:测试计划-线程组-添加-逻辑控制器-循环控制器

3、ForEach控制器

方式:

  • 新建线程组并添加HTTP请求
  • 测试计划-线程组-HTTP请求-添加-后置处理器-正则表达式处理器(任意处理器均可)
  • 再次新建线程组并添加HTTP请求(用于调用ForEach控制器返回的参数)
  • 添加ForEach控制器,方式:测试计划-线程组-添加-逻辑控制器-ForEach控制器(用于接收上一个请求后置处理器返回的参数)

image

八、Jmeter定时器

1、同步定时器(Synchronizing Timer)

SyncTimer的作用是阻塞线程,直到阻塞到指定的N个线程后再释放它们,用于执行大数据量的并发请求

方式:测试计划-线程组-HTTP请求-添加-定时器-Synchronizing Timer

image

2、常数吞吐定时器(Constant Throughput Timer)

作用:让Jmeter按指定的吞吐量(以每分钟样本数为单位)执行。吞吐量的计算范围可指定为当前线程、线程组和整个测试计划

image

九、Jmeter分布式测试

当性能测试需要模拟的负载规模过大,超出了单台测试机的硬件性能时,使用多台测试机联合模拟负载,这就是分布式测试。

主机(Master)——代理机(Slave,可以有多个)——被测系统(Target)

其中主机负责分发任务并汇总响应结果,代理机负责执行主机分发的任务并对响应进行处理

image

注意事项:

  • 关闭测试机上的防火墙
  • 所有主机、测试机和被测系统应当位于同一局域网内
  • 主机和测试机上Jmeter和JDK的版本保持一致
  • 关闭Jmeter中的RMI SSL开关

十、Jmeter监听器——报告

1、聚合报告

image

重点关心的性能指标

  • 响应时间:观察最大最小值的波动范围
    • 波动大:以90%的响应时间做为最终性能响应时间结果
    • 波动小:以平均响应时间作为最终性能响应时间结果
  • 错误率
  • 吞吐量

2、HTML报告

生成HTML格式的Jmeter报告

方式:

  • 进入Jmeter的/bin目录
  • 执行命令:jmeter -n -t [jmx file] -l [result file] -e -o [html report folder]
原文地址:https://www.cnblogs.com/silentor/p/14725449.html