性能测试学习之测试工具Jmeter
Posted 采臣技术交流室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能测试学习之测试工具Jmeter相关的知识,希望对你有一定的参考价值。
性能测试学习之测试工具Jmeter(二)
我一野马,不知归途 浪子一枚,何谈余生 生命不息,折腾不止!
心说
学习本章节,需要具备熟悉jmeter基本界面,具备基本的Http协议基础~
jmeter的组成
线程组
断言
定时器
监听器
配置元件
后置处理器
前置处理器
逻辑控制器
Sanmpler 取样器/采样器
小朋友看到这里你是否有很多问号?不着急采臣君,就针对每一个在以下的每一篇都做了更详细的介绍,通过小例子就能够清晰明了,开始吧~!
线程组
断言
定时器
监听器
配置元件
后置处理器
前置处理器
逻辑控制器
Sanmpler 取样器/采样器
jmeter实现多并发
启动工具:
找到Jmeter的bin目录,运行jmeter.bat,双击启动即可(前提条件:需要配置jdk环境变量)
备注:windows 使用jmeter.bat,Mac或者Liunx系统运行jmeter.sh启动
新建线程组(开启测试的前提):
用于模拟大量用户负载,此元件中可以设置运行的线程数(就是模拟多用户并发等,一线程就是一个用户)
访问路径:【测试计划】——【线程组】
界面说明:
1、取样器错误后要执行的动作:
继续:忽略错误,继续执行 (常用)
Start Next Thread Loop:忽略错误,线程当前循环终止,执行下一个循环。
停止线程:当前线程停止执行,不影响其他线程正常执行。
停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
Stop test now:整个测试会立即停止执行,当前正在执行的取样器可能会被中断。
这几个配置项控制了“当遇到错误的时候测试的执行策略”是否会继续执行。
2、设置线程数:
线程数也就是并发数,每个线程将会完全独立的运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。
3、设置ramp-up period控制线程执行时间:
ramp-up period用于设置启动所有线程所需要的时间。如果选择了10个线程,并且ramp-up period是100秒,那么JMeter将使用100秒使10个线程启动并运行。每个线程将在前一个线程启动后10(100/10)秒后启动。
当这个值设置的很小、线程数又设置的很大时,在刚开始执行时会对服务器产生很大的负荷。
下图的线程配置中,在6秒时间内启动6个线程,每个线程执行2次循环。那么每个线程之间启动延迟为 1 秒。如果点击永远那就不停止,跟输入2次是互斥关系。
4、设置循环次数:
该项设置线程组在结束前每个线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次。
5、Delay Thread creation until needed:
默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。
6、线程组调度器设置
什么时间执行脚本,时间的控制
调度器配置可以更灵活的控制线程组执行的时间
①持续时间(秒):
控制测试执行的持续时间,以秒为单位。
②启动延迟(秒):
控制测试在多久后启动执行,以秒为单位。
③启动时间:
控制测试在某个时间点启动。但这个配置会被“启动延迟”配置覆盖。
④结束时间:
控制测试执行的结束时间。但这个配置会被“持续时间”配置覆盖。
如果不想立即执行执行,可以通过调度器控制测试执行的开始时间和结束时间。
当测试开始时,如果设置了调度器,JMeter将等待直到到了开始时间。在每个周期结束,JMeter将会检查是否到达结束时间,如果达到,停止运行;否则测试继续运行直到达到了重复限制。
jmeter实现逻辑分支控制
逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
比如在收邮件时,只需要登录一次邮箱就可以查看多封邮件,这个场景在JMeter中只需要使用控制器中的“一次控制器”就可以控制登录的次数。
控制器的访问路径:【测试计划】——【线程组】—— 【逻辑控制器】
新建线程组
新建用户自定义变量
4.新建Http请求
逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。
比如在收邮件时,只需要登录一次邮箱就可以查看多封邮件,这个场景在JMeter中只需要使用控制器中的“一次控制器”就可以控制登录的次数。
控制器的访问路径:【测试计划】——【线程组】—— 【逻辑控制器】
新建线程组
新建用户自定义变量
变量为2时:
请求失败,不满足逻辑判断条件
jmeter实现配置管理
配置元件为取样器提供预备数据、然后由取样器发出请求;还可以用来记录服务器的返回数据,比如:Http Cache Manager,自动记录服务器返回的Cache信息。
性能测试中为了模拟大量用户操作往往需要参数化,JMeter中的参数化可以通过配置元件来完成,比如:CSV Data Set Config,可以帮助我们从文件中读取数据。另外JMeter也提供了从多函数来帮助我们生成动态数据。
配置元件的访问路径:【测试计划】—— 【配置元件】,详情如下图:
添加线程组
添加JDBC Connection Configuration
1)Varible Name: 这个是变量的名字,具有唯一性,不能重复
3)JDBC_Driver_Class:org.gjt.mm.mysql.Driver
或者 com.mysql.jdbc.Driver 这是固定值
4) Username:这个数据库的登录名
5) Password:这个是数据库的登录密码
配置元件为取样器提供预备数据、然后由取样器发出请求;还可以用来记录服务器的返回数据,比如:Http Cache Manager,自动记录服务器返回的Cache信息。
性能测试中为了模拟大量用户操作往往需要参数化,JMeter中的参数化可以通过配置元件来完成,比如:CSV Data Set Config,可以帮助我们从文件中读取数据。另外JMeter也提供了从多函数来帮助我们生成动态数据。
配置元件的访问路径:【测试计划】—— 【配置元件】,详情如下图:
添加线程组
添加JDBC Connection Configuration
1)Varible Name: 这个是变量的名字,具有唯一性,不能重复
3)JDBC_Driver_Class:org.gjt.mm.mysql.Driver
或者 com.mysql.jdbc.Driver 这是固定值
4) Username:这个数据库的登录名
5) Password:这个是数据库的登录密码
jmeter实现请求预处理
前置处理器在取样器发送请求之前做一些环境或参数的准备工作
例如:在对数据进行操作前需要建立一个数据库连接,那么前置处理器可以完成这个工作
前置处理器的访问路径:【测试计划】—— 【前置处理器】
案例:请求前先先获取参数
创建线程组
添加用户参数
添加BeanShell Sampler
Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javascript 和 perl。
前置处理器在取样器发送请求之前做一些环境或参数的准备工作
例如:在对数据进行操作前需要建立一个数据库连接,那么前置处理器可以完成这个工作
前置处理器的访问路径:【测试计划】—— 【前置处理器】
创建线程组
添加用户参数
添加BeanShell Sampler
jmeter集合点、定时并发
定时器用于在模拟大量用户在同一时间处理系统业务,起到集合的功能(常用于并发测试),往往实际测试中用的不同,主要是发现性能瓶颈
访问路径:【测试计划】—— 【线程组】—— 【定时器】
添加线程组
添加HTTP请求
添加定时器
这里我设置了3秒
查看结果树
点击启动
中间会有3秒的等待时间
3秒后展示结果
定时器用于在模拟大量用户在同一时间处理系统业务,起到集合的功能(常用于并发测试),往往实际测试中用的不同,主要是发现性能瓶颈
访问路径:【测试计划】—— 【线程组】—— 【定时器】
添加线程组
添加HTTP请求
添加定时器
这里我设置了3秒
查看结果树
点击启动
中间会有3秒的等待时间
3秒后展示结果
jmeter实现各种请求的发送
Sampler【取样器/采样器】用来模拟用户操作,向服务器(被测试系统)发出Http请求、WebService(SOAP/XML-RPC Requests)请求或者Java请求等。
取样器的访问路径:【测试计划】—— 【线程组】—— 【Sampler】, 常见的取样器如下图:
常用的取样器为HTTP请求,我们可以把HTTP请求元件看成是一个没有界面的浏览器,它可以发送Http请求,接收服务器的响应数据。
BeanShell Sampler 可以理解为 写java代码,引用包(包目录:lib目录下)
Jmeter导入包:
导入完毕BeanShell Sampler 中就可以使用jar包了
Debug Sampler 协助调试工作
java请求,如果在Sampler中请求都未满足你特定的需求,使用此请求,自定义编写代码发起请求
Sampler【取样器/采样器】用来模拟用户操作,向服务器(被测试系统)发出Http请求、WebService(SOAP/XML-RPC Requests)请求或者Java请求等。
取样器的访问路径:【测试计划】—— 【线程组】—— 【Sampler】, 常见的取样器如下图:
常用的取样器为HTTP请求,我们可以把HTTP请求元件看成是一个没有界面的浏览器,它可以发送Http请求,接收服务器的响应数据。
BeanShell Sampler 可以理解为 写java代码,引用包(包目录:lib目录下)
Jmeter导入包:
导入完毕BeanShell Sampler 中就可以使用jar包了
Debug Sampler 协助调试工作
java请求,如果在Sampler中请求都未满足你特定的需求,使用此请求,自定义编写代码发起请求
jmeter实现关联
后置处理器一般放在取样器之后,用来处理服务器的返回结果。(专门用来对响应数据做处理的元件,JMeter中的关联也是通过后置处理器来完成)
比如一个Web程序在登录后返回一个SessionID,这个SessionID在登录之后的业务过程中会做为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢? 首先我们要知道这个SessionID从哪里来?——它是由服务器返回的。我们需要用什么工具获取它?JMeter提供了元件,比如正则表达式提取器,它支持正则表达式的方式来提取数据。
访问路径:【测试计划】——【后置处理器】,详情如下图:
模板:$1$截取的第一个内容
后置处理器一般放在取样器之后,用来处理服务器的返回结果。(专门用来对响应数据做处理的元件,JMeter中的关联也是通过后置处理器来完成)
比如一个Web程序在登录后返回一个SessionID,这个SessionID在登录之后的业务过程中会做为验证条件,验证用户是否合法登录了。我们利用取样器模拟这个请求时就需要带上这个属性,那么如何获取呢? 首先我们要知道这个SessionID从哪里来?——它是由服务器返回的。我们需要用什么工具获取它?JMeter提供了元件,比如正则表达式提取器,它支持正则表达式的方式来提取数据。
访问路径:【测试计划】——【后置处理器】,详情如下图:
jmeter实现数据预判试看
【断言】用来验证结果是否正确,类似于LoadRunner中的检查点。可以帮助我们来判断请求是否成功返回且是否符合要求。就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。
常用的是响应断言,对于复杂的断言可以通过BeanShell脚本来完成
断言的访问路径:【测试计划】—— 【断言】
【断言】用来验证结果是否正确,类似于LoadRunner中的检查点。可以帮助我们来判断请求是否成功返回且是否符合要求。就是用一个预设的结果(值、表达式、时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。
常用的是响应断言,对于复杂的断言可以通过BeanShell脚本来完成
断言的访问路径:【测试计划】—— 【断言】
jmeter监控数据可视化
监听器收集JMeter的测试结果,JMeter结果收集程序的设计模式就是监听器模式。JMeter的监听器有两个任务:
1.添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用。
2.展示结果,JMeter可以以表格及图形的形式展示结果,方便测试人员分析测试结果。在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(比如查看结果树,我们可以在其中看到请求与响应的数据)
监听器的访问路径:【测试计划】—— 【监听器】,详情如下图:
【取样器】、【断言】、【监听器】组合在一起就可以帮助我们完成发送请求、验证结果及记录结果三项工作。
监听器收集JMeter的测试结果,JMeter结果收集程序的设计模式就是监听器模式。JMeter的监听器有两个任务:
1.添加结果监听,并且可以保存测试结果到文件,这些结果数据可以供再次分析使用。
2.展示结果,JMeter可以以表格及图形的形式展示结果,方便测试人员分析测试结果。在开发测试脚本时,不可避免需要调试,监听器也提供了辅助(比如查看结果树,我们可以在其中看到请求与响应的数据)
监听器的访问路径:【测试计划】—— 【监听器】,详情如下图:
【取样器】、【断言】、【监听器】组合在一起就可以帮助我们完成发送请求、验证结果及记录结果三项工作。
jmeter小助手
1. 一个范围内的最小值:随机数生成时开始数,也是最小数
2. 一个范围内允许的最大值:随机生成结束数,也是最大数
0代表的第一列
改为2显示第二列
1. 一个范围内的最小值:随机数生成时开始数,也是最小数
2. 一个范围内允许的最大值:随机生成结束数,也是最大数
jmeter实现分布式并发
master(主压力机)在jmeter.properties中添加remote_hosts
配置路径:...\apache-jmeter-5.0\bin\jmeter.properties;
2. 打开文件编辑:remote_hosts=127.0.0.1 后面增加远程负载机的ip和端口号,如果需要添加多个“,”用英文逗号分隔
添加一个从机的IP和端口号
remote_hosts=127.0.0.1:1099,127.0.0.1:1100,192.168.0.1:1099
Slave(远程负载机)在jmeter.properties中添加server_port
# 每个人安装Jmeter路径可能不同,注意修改路径
vim usr/local/apache-jmeter-5.1.1/bin
master(主压力机)在jmeter.properties中添加remote_hosts
配置路径:...\apache-jmeter-5.0\bin\jmeter.properties;
Slave(远程负载机)在jmeter.properties中添加server_port
# 每个人安装Jmeter路径可能不同,注意修改路径
vim usr/local/apache-jmeter-5.1.1/bin
# 输入命令:
./jmeter-server -Djava.rmi.server.hostname=192.168.3.130
# 输入命令:
./jmeter-server -Djava.rmi.server.hostname=192.168.3.130
防火墙未关可能引起错误
远程启动时一直连接不上负载机
解决办法:遇到这种情况时,可能存在多种因素,可以参考以下步骤逐一排查
(1)远程负载机的Jmeter-server是否启动成功;
(2)远程负载机是否处于联网状态;
(3)防火墙是否处于关闭状态:
centos5/6开启和关闭防火墙命令:
开启:service iptables start
关闭:service iptables stop
centos7开启和关闭防火墙命令:
开启:systectl start firewalld.service
关闭:systectl stop firewalld.service
此方法为临时关闭,即时生效,重启后失效
(4)主压力机和远程负载机的Jmeter版本是否一致;
配置完成后重启主压力机,查看远程启动,可查看到配置的远程负载机IP
验证是否成功
添加HTTP请求,察看结果树,运行-远程启动-选择从机IP
结果显示正常说明没有问题,说一点,从机运行的结果中响应数据是空白属于正常现象,如果要查看,可通过日志查看。
点关注,不迷路
好了各位,以上就是这篇文章的全部内容了,能看到这里的人啊,都是人才。
如果这个文章写得还不错,觉得「王采臣」我有点东西的话 求点赞 以上是关于性能测试学习之测试工具Jmeter的主要内容,如果未能解决你的问题,请参考以下文章