性能-jmeter

Posted 少年年少Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能-jmeter相关的知识,希望对你有一定的参考价值。

 
jmeter的安装 
 
1.安装jdk和环境变量配置

变量名:【JAVA_HOME】

变量值:【D:\\Program Files\\Java\\jdk1.8.0_92】【jdk安装路径】

 

变量名:【path】

变量值:【\\;%JAVA_HOME%\\bin;】

 

变量名:【CLASSPATH】
变量值:【.;%JAVA_HOME%\\lib\\dt.jar;%JAVA_HOME%\\lib\\tools.jar;】
2.下载jmeter,解压即可,环境变量配置

【变量名】JMETER_HOME

【变量值】F:\\CYL\\test\\jmeter\\apache-jmeter-3.0(根据实际的jmeter解压路径填写)

 

【变量名】CLASSPATH

【变量值】%JMETER_HOME\\lib\\ext\\ApacheJMeter_core.jar;%JMETER_HOME%\\lib\\jorphan.jar;%JMETER_HOME%\\lib\\logkit-2.0.jar;
ps:若jmeter的目录/lib/ext文件夹无jar,则需要下插件或者下一个里面有jar包的jmeter压缩包
3.

【步骤三】启动Jmeter

双击Jmeter解压路径(apache-jmeter-3.0\\bin)的bin下面的jmeter.bat
 

jmeter的使用---脚本录制
1.脚本录制(使用第三方badboy进行录制):地址栏填地址,红色按钮录制,黑色结束,录制完后“文件”--Export to Jmeter,
2. 打开JMeter工具,选择“文件”-->“打开”选择刚才保存的文件(.jmx类型),将文件导入,

添加"查看结束树"和"聚合报告"。

--右击Thread Group→添加→监听器→查看结果树。

--右击Thread Group→添加→监听器→聚合报告。
3. 启动脚本运行完毕后"查看结果树"。(点击启动或"Ctrl+R"运行脚本)
 

 
jmeter的使用---参数化(举例,登录:用户名+密码)
方式1-借助函数助手对话框
1.找到有用户名和密码的HTTP Request 页面
2.编辑数据,书写格式为“用户名,密码”,通过记事本另存为编码格式为utf-8,格式为dat的文件(与loadrunner不同在于没有dat文件第一行没有列名)---txt文件也可以
3.生成函数(用户名的函数,密码的函数),工具栏:选项->函数助手对话框,选择功能为_CSVRead,函数参数第一个为文件路径,第二个为列,其中用户名列为0,输入完后点击右下完成,完成左侧输入框生成函数(密码的函数只需将复制用户名的函数,然后将函数中放列的地方改为密码的列即可)
4.在有用户名和密码的页面,将参数的值替换为对应函数
方式2-借助jmeter的配置元件
1.选择线程组,右键-添加-配置元件- CSV Data Set Config
2.CSV Data Set Config对话框
Filename --- 参数项文件
File Encoding --- 文件的编码,设置为UTF-8
Vaiable Names ---  文件中各列所表示的参数项;各参数项之间利用逗号分隔;参数项的名称应该与HTTP Request中的参数项一致(比如suer,pwd)。
Delimiter --- 如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\\t;

Recycle on EOF :到了文件尾处,是否循环读取参数,选项:true和false

Stop thread on EOF:到了文件尾处,是否停止线程,选项:true和false
下Recycle on EOF与Stop thread on EOF结果的关联:

当Recycle on EOF 选择true时,Stop thread on EOF选择true和false无任何意义,通俗的讲,在前面控制了不停的循环读取,后面再来让stop或run没有任何意义

当Recycle on EOF 选择flase时,Stop thread on EOF选择true,线程4个,参数3个,那么只会请求3次

当Recycle on EOF 选择flase时,Stop thread on EOF选择flase,线程4个,参数3个,那么会请求4次,但第4次没有参数可取,不让循环,所以第4次请求错误
3.在HTTP Request将对应的值替换为定义好的变量,格式:${user}
方式3- User Defined Variables用户定义的变量
1、添加方法:选择“线程组”,右键点击添加-Config Element(配置原件)-User Defined Variables,在这个控件中,定义你所需要的参数

2、使用方法:在对应的需要使用参数的位置,使用${host}替代。

3、应用场景:当测试环境变化时,我们只需要修改一处的IP就可以让脚本马上应用于另外一个环境的测试,而不需要逐个脚本进行修改。
方式4- User Parameters用户参数
1、添加方法:选择“线程组”,右键点击添加-Pre Processors-User Parameters,在这个控件中,定义你所需要的参数

2、参数解释:

Update Once Per Iteration:控制参数取值的变化规则,如果选中该选项,则参数的值在每个迭代中保持不变,在新的迭代开始时取下一个可用值; 如果取消取中该选项,则参数的值在每个其作用域内的Sampler发出请求时取下一个可用值。
3、使用方法:在对应的需要使用参数的位置,使用${productID}替代
总结:

1、User Defined Variables中定义的所有参数的值在Test Plan的执行过程中不能发生取值的改变,因些一般仅将Test Plan中不需要随迭代发生改变的参数(只取一次值的参数)设置在此处。例如,被测应用的host和port值。

2、如果参数的取值范围很小,使用User Parameters比较合适。

3、如果参数的取值范围很大,建议使用CSV Data Set Config的方法,该方法具有更大的灵活性。
ps:
 
 

 
jmeter的使用---检查点
JMeter里面的检查点通过添加断言来完成,通过断言来判断jmeter有没有正确调用t.dat(参数化的文件),
1添加响应断言,右键点击我们的“登录”页面---->添加---->断言---->响应断言
2设置响应断言,测试响应字段选中响应文本,模式匹配选包括,测试的模式添加并填入true
ps:断言中可以添加多个断言一起判断,断言中也可以使用参数化方法,进行动态判断。
3、添加断言结果,右键点击我们的“登录”页面---->添加---->监听器---->断言结果
 再添加一个“查看结果树” 右键点击我们的“登录”页面---->添加---->监听器---->查看结果树
在线程组中设置3个用户,点击运行运行。
4、查看断言结果
 

 
jmeter的使用---集合点(比如登录时集合点在登录前面)
JMeter里面的集合点通过添加定时器来完成。

注意:集合点的位置一定要在Sample之前.

 集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,拿那个用户和密码的地方,每到输入用户名和密码登录的地方,所有的虚拟用户都相互之间等一等,然后,一起访问。
1、设置集合点  ,右线程组的step1键点击 ---->定时器---->Synchronizing Timer
在对话框中设置集合数和延迟时间后,直接将Synchronizing Timer拖至登录前
 

 
jmeter的使用---聚合报告 90%line
90% Line 参数正确的含义: 

假设一组数:2、2.1、2.5、3、3.4、3.4、4、4、4、4、5、5、5、5.9、5.91、6.8、8、12、24、24.1   按由大到小将其排列。

求它的第90%百分位,第18个数是12 么,他的90%Line 就是12。 

那么这个数组中有90%的数将小于等于12 。

用在性能测试的响应时间也将非常有意义,也就是90%用户响应时间不会超过12 秒。
 
jmeter的使用---FTP测试计划
FTP服务主要提供上传和下载功能。有时间需要我们测试服务器上传和下载的性能。

1.创建一个线程组

2.线程组--->添加--->配置元件--->FTP请求缺省值:输入服务器名称或IP。
3.线程组--->添加--->Sampler--->FTP请求:选择get为上传方式
4.按照上一步的方式再添加一个“FTP请求”:选择put上传方式

5.添加一个监控器:线程组--->添加--->监控器--->Spline Visualizer.

一个FTP计划创建成功。
jmeter的使用---接口测试
需求:
1)测试目标网站是fnng.cnblogs.com 和 tt-topia.rhcloud.com
2)测试目的是该网站在负载达到20 QPS 时的响应时间。(QPS : Query Per Second 每秒查询率。是一台查询服务器每秒能够处理的查询次数)
步骤:1、添加线程组(测试计划右键->添加->Theads(user)->线程组)
线程数20 (虚拟用户数)准备时长10(准备时长指的是10s启动20个线程,就是每秒启动2个线程) 循环次数10(每个线程发送的请求次数,总请求=线程数*循环次数)
2.添加http请求 (线程组右键->添加->sampler->http请求 )
http名称:自定义 ,服务器名称或ip :fnng.cnblogs.com,端口号:80,implement:java ,协议:http,方法:get,路径:/,其他默认,(注意post方式,且参数嵌套需添加请求前添加->配置元件->http信息头管理器,信息头添加数据content-type:Application/json     而http请求则选择post方法,数据写在body data中,其中参数化同其他)
3.设置QPS限制(http请求右键->添加 ->定时器-> Constant Throughput Timer  (、常数吞吐量定时器,该定时器可以方便地控制给定的取样器发送请求的吞吐量。)
名称:自定义, Target throughput(in samples per minute)即目标吞吐量 :1200(目标吞吐量为20/s,这里按分算,即20*60=1200)
Calculate Throughput based on  All active threads
4.添加监听器(线程组右键->添加->监听器->聚合报告)
5.运行启动(ctrl+R)
6.查看聚合报告
 

 
前提:数据库准备好数据,下载好jdbc的驱动
1.点击测试计划,测试计划界面点击浏览按钮,将jdbc的jar包进行添加
2.添加一个线程组,线程组右键->添加->配置元件->JDBC Connection Configuration
配置JDBC Connection Configuration页面:
  • Variable Name:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用
  • Database URL: jdbc:mysql://192.168.0.26:3306/jinyuan(修改ip,端口号)
  • JDBC Driver class:com.mysql.jdbc.Driver 
  • username:数据库登陆的用户名
  • passwrod:数据库登陆的密码
3.线程组右键->sampler->jdbc request
Variable Name:应与JDBC Connection Configuration配置的Variable Name一致
query:写查询语句(不需要“;”)
4.添加断言,线程组右键->添加-断言-响应断言:响应字段和模式匹配规则默认,要测试的模式自定义,若断言失败就输入自定义的部分
5.添加断言结果,图形结果,察看结果树 :线程组右键->添加->监听器->断言结果/图形结果/察看结果树
6.运行后查看
断言结果:JDBC Request为成功
察看结果树:响应数据为查询结果
 
ps:若要提取数据库的数据作为参数化,可通过两种方式,都在jdbc request界面
1. variables names   设置A,B (列名)
  • 可以使用${A_#}、${A_1}...来获取相应的值, A_#=行数, A_1=第1列, 第1行
2. result variables names   如果给这个参数设置值,它会创建一个对象变量,保存所有返回的结果,获取具体值的方法:
user_code=vars.getObject("jdbc_user").get(0).get("user_code");
vars.put("bean_jdbc_user_code",user_code.toString());
注意:user_code 是object,所以通过.toString() 转为字符串,以上代码需写在bean shell sampler中,代码要在调用该参数前
然后使用${user_code}即可
以上都可以通过debug sample来查看结果
 
 

 
如何使用上一个请求返回的结果进行参数化--利用正则表达式提取器
在对应的http下添加一个正则
单个匹配
调用方式:${user_code_single}
多个匹配
调用方式:${user_code_g1}   ${user_code_g2}  ps:一个是user_code 一个是ticket
 
 

http请求
1.访问受限时添加http请求头管理器,请求头添加User-Agent即可,有其他问题把对应信息头加进来
2.倘若登录成功后访问其他界面还是未登录状态,添加http cookies管理器即可
 
 

导包无显示原因
问题描述:jmeter要使用第三方开发的包,在所有JAR包放在jmeter的lib/ext下,界面的sampler下看不到对应菜单项
原因:JDK不一致,JAR包的版本高于JMETER
解决方法:查看jar包版本(用WinRAR打开,META-INF目录下的MANIFEST.MF文件)
 

线程组
 
Ramp-up Period(in Seconds):表示每个用户启动的延迟时间
线程数:一般我们用来表示多少个用户,即我们测试时的用户数量
循环次数:如果你要限定循环次数为10次的话,可以取消永远的那个勾,然后在后面的文本框里面填写10;在这里我们勾上永远,表示如果不停止或者限定时间将会一直执行下去, 是为了方便调度器的调用。

调度器的配置:我们勾选调度器时,将会出现这个面板

启动时间:表示我们脚本开始启动的时间,当你不想立即启动脚本测试,但是启动脚本的时间不会再电脑旁的时候,你可以设定一个启动的时间,然后再运行那里点击启动,系统将不会立即运行,而是会等到你填写的时间才开始运行。

结束时间:与启动时间对应,表示脚本结束运行的时间。

持续时间:表示脚本持续运行的时间,以秒为单位,比如如果你要让用户持续不断登录1个小时,你可以在文本框中填写3600。如果在1小时以内,结束时间已经到达,它将会覆盖结束时间,继续执行。 

启动延迟:表示脚本延迟启动的时间,在点击启动后,如果启动时间已经到达,但是还没有到启动延迟的时间,那么,启动延迟将会覆盖启动时间,等到启动延迟的时间到达后,再运行系统。 

注意:如果我们需要用到调度器来设定持续时间,如果线程数不够多到持续时间结束,我们就必须将循环次数勾选为永远,特别地,如果线程组里面有其他的循环,我们也需将该循环次数勾选为永远(如我上面录制的脚本中的Step1也是一个循环,需要将永远勾选),否则,按我如上配置,将永远去掉勾选,文本里填1,那么无论你将持续时间启动时间结束时间等设置多少,系统运行1000次后,将会停止不再运行。
 

Jmeter使用命令行(非GUI模式):cmd进入jmeter 的bin目录下
格式: jmeter -n -t <testplan filename> -l <listener filename>
例如: jmeter -n -t testplan.jmx -l listener.jtl  
jmeter -n -t 国海二期.jmx -l listener.jtl
ps:  -t后为脚本名称,-l后为聚合报告名称,之后可通过GUI模式聚合报告打开对应聚合报告
 

在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是:

  •  取样器(sampler)元件不和其它元件相互作用,因此不存在作用域的问题。
  •  逻辑控制器(Logic Controller)元件只对其子节点中的取样器 和 逻辑控制器作用。
  •  除取样器 和逻辑控制器 元件外,其他6类元件,如果是某个sampler的子节点,则该元件公对其父子节点起作用。
  •  除取样器和逻辑控制器元件外的其他6类元件,如果其父节点不是sampler ,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)。
 
 

测服务器上传和下载性能:FTP
1.创建一个线程组
2. 线程组--->添加--->配置元件--->FTP请求缺省值(填服务器ip)
3.线程组--->添加--->Sampler--->FTP请求(get):get(RETR)  。
4.再添加一个“FTP请求”(put):方式为put(STOP)
FTP参数详解:

IP    为你FTP服务的IP

Remote file 为你FTP服务器上的一个文件/上传的文件。

local file  为本地你存放到本机上的路径/上传的文件路径。
选择方式 :  get(RETR) 下载,put(STOP)上传 。
登录配置:填写FTP服务器的用户名密码。
 
5.添加一个监控器:线程组--->添加--->监控器--->Spline Visualizer
 

配置元件:http请求默认值---设置后其他http请求都可不填ip,端口,路径
 

添加cpu等监控
1.插件下载:
JMeterPlugins-Standard-1.3.1.zip  下载---放jmeter目录\\lib\\ext下
 
ServerAgent-2.2.1.zip   下载---(linux)放服务器随意目录,在那个目录下使用 chmod 777 startAgent.sh命令修改权限  如果要将该文件设置为后台执行不关闭  Nohup ./startAgent.sh &
  (windows)双击 startAgent.bat文件即可
 
2.右键添加监听器-jp@gc - PerfMon Metrics Collector:需修改ip以及添加想要监控的,比如cpu
 
在服务器(linux)可通过top命令查看cpu,memery等使用情况

以上是关于性能-jmeter的主要内容,如果未能解决你的问题,请参考以下文章

JMeterJMeter的工作原理

jmeterjmeter 常用组件 介绍

JMeterJMeter在linux下运行

jmeterjmeter的安装和基本使用

Jmeter 简要介绍与安装

一个使用Jmeter做接口性能测试的实战案例