软件性能测试工具--Jmeter

1.jmeter常用功能

jmeter软件的目录:根目录:测试计划

1.线程组:测试计划-右键-添加-Threads(Users)-线程组

2.Setup thread group:可用于执行预测试操作,这些线程的行为完全像一个正常的线程组元件,类似于Loaderrunner中的init

3.Teardown thread group:可用于执行测试后动作,这些线程的行为完全像一个正常的线程组元件,类似于Loaderrunner中的end

2.jmeter的两种脚本录制方法

2.1录制1——badboy

1.badboy下载:http://www.badboy.com.au/

2.介绍badboy

3.打开badboy工具,点击栏目上的红色圆形按钮,在地址栏目中输入被测试的项目的地址

4.录制完成后,点击工具栏旁边的黑色按钮,结束录制,选择“文件”--Export to Jmeter

5.打开Jmeter工具,选择文件-打开-选择.jmx类型,将文件导入进来了

6.演示录制

2.2录制2——代理

1.创建一个线程组(右键测试计划-添加-线程组)

2.在工作台-非测试元件-添加HTTP代理服务器

3.代理服务器的端口默认8080,可自行修改,但是不要与其他应用端口冲突

4.目标控制器:录制的脚本的存放位置,可选择项为测试计划中的线程组(根据实际来选择即可)

5.分组:对请求进行分组,“分组”的概念是将一批请求汇总分组,可以把URL请求理解为分组

——不对样本分组:所有的请求全部罗列

——在组间添加分隔:加入一个虚拟的以分隔线,命名的动作,运作同“不对样本分组”无实际意义

——每个组放入一个新的控制器:执行时按控制器给输出结果

——只存储每个组的第一个样本:对于一次URL请求,实际很多次http请求的情况

6.设置IE浏览器

7.IE——internet属性——连接——局域网-勾选代理服务器为LAN使用代理,地址:localhost,端口号:要与jmeter中的端口号设置为一致,勾选:跳过本地地址的代理服务器,点击确定,重新启动IE浏览器,在浏览器地址中输入地址,jmeter中就会限制录制的网址

8.现在点击jmeter上的启动按钮,打开浏览器输入需要录制web项目地址,jmeter会自动记录你IE所访问的页面

9.录制完成后一定要到局域网中停止

2.Jmeterbadboy脚本开发技术详解

1.badboy中的检查点:

以sougou.com中搜索小强软件测试为例:脚本录制完成,选择停止:

在搜索框中选择要设置的检查点——Tools——Add Assertion for Selection

回放——选择play all

2.badboy中的参数化-文本

(1)建立参数化列表:value-右键添加

(2)在请求中替换${参数名称}:query右键-properties-value改为${参数名称}

(3)中文可能有乱码,改下请求中的编码即可

回放:此网址右键-properties-选项1:是设置循环几次,选项2是每个参数都循环

3.Jmeter性能测试小小的实战

项目描述:被测网站:xqtesting.blog.51cto.com

指标:响应时间以及错误率

场景:线程属性:线程数:20,Ramp up Period(in seconds):10,循环次数

3.1打开jmeter-测试计划-线程组-添加http请求

(1)http请求:-保持默认即可

(2)名称:本属性用于标识一个取样器,建议使用一个有意义的名称

(3)注释:对于测试没有任何作用,仅用户记录用户可读的注释信息

(4)服务器名称或IP:HTTP请求发送的的目标服务器名称或IP地址

(5)端口号:目标服务器的端口号,默认值为80,后面的超时定义可以不用填

(6)协议:向目标服务器发送http请求时的协议,可以是http或者是https,默认值为http

(7)方法:发送http请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等

(8)Content encoding:内容的编码方式

(9)路径:目标URL路径(不包括服务器地址和端口)

(10)自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面

(11)Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用keep-Alive方式进行HTTp通信,默认选中

(12)Use multipart/from-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/from-data的方法发送,默认不选中

(13)同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,jmeter提供了一个简单的对参数化的方法,用户可以将URL中所有参数设置在本表中,表中每一行时一个参数值对(对应URL中的 名称1=值1)

(14)同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟

(15)从HTML文件获取所有有内含的资源:当该选项被选中时,jmeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含的所有资源(图片、flash等),默认不选中,如果用户只希望获取页面中的特定资源,可以在下方的Embedded URLs must match文本框中填入需要下载的特定资源表达式,这样,只有能匹配指定正则表达式的URL指向资源会被下载

(16)用作监视器:此取样器被当成监视器,在Monitor Results Listener中可以直接看到基于该取样器的图形化统计信息,默认为不选中

(17)Save response as MD5 hash?:选中该选项,在执行时仅记录服务端响应数据的MD5值,而不记录完整的响应数据,在需要进行数据量非常大的测试时,建议选中该选项以减少取样器记录响应数据的开销

3.2线程组设置

‘(1)线程数:虚拟用户数

(2)ramp up period:设置虚拟用户数需要多长时间全部启动,如果线程数为20,时间为10,也就是每秒钟启动2个线程

(3)循环次数:每个线程发送请求的次数,如果线程数为20,循环次数为100,那么每个线程发送100次请求,总请求数为20*100=2000,如果勾选了“永远”,那么所有线程会一直发送请求,一直到选择停止运行脚本

(4)调度器:可以更灵活的设置运行时间等

3.3监听器

(1)查看结果树

(2)聚合报告

单位:默认是毫秒

Label:定义HTTP请求名称

Samples:表示这次测试中一共发出量多少个请求

Average:平均响应时长-默认情况下单个Request的平均响应时长,当使用了Transaction Controller时,也可以以Transaction为单位展示平均响应时长

Median:中位数,也就是50%用户的响应时长

90%Line:90%用户的响应时长

Min:访问页面的最小响应时长

Max:访问页面的最大响应时长

Error%:错误请求的数量/请求的总数

Throughput:默认情况下表示每秒完成的请求数,当使用了Transaction Controller时,也可以表示类似LoadRunner的Transaction per Second数

KB/S恶臭:每秒从服务器端接收到的数据量

4.jmeter元件的作用域与执行顺序

1.元件的作用域

(1)配置元件(config elements)会影响其作用范围内的所有元件

(2)前置处理程序(per-processors)在其作用范围内的每一个sampler元件之前执行

(3)定时器:(timers)对其作用范围内的每一个sampler有效

(4)后置处理程序(Post-processsors)在其作用范围内的每一个sampler元件之后执行

(5)断言(Assertions)对其作用范围内的每一个sampler元件执行后的结果执行校验

(6)监听器(Listeners):收集其作用范围的每一个sampler元件的信息并呈现

(7)sampler元件不和其他元件相互作用,因此不存在作用域的问题

2.执行顺序

配置元件

前置

定时器

Sampler

后置

断言

监听器

如果在同一作用域范围内由多个同一类型的远近啊,则这些元件则按照他们在测试

计划中的上下顺序依次执行

5.jmeter之参数化

5.1方式1

右键-添加-前置处理器-用户参数-添加变量、添加用户,勾选:每次迭代更新一次

在实际的网址请求中替换:parameters——${参数名}

添加查看结果树进行查看,点击运行

响应断言:相当于检查点,输入${参数名}

5.2方式2

CSV Data Set Config

Filename:d:\text.txt,文件中放参数(参数化要引用的东西)

在Variable Names中填写上变量名

File encoding:文件编码:可以不填

Variable Names:变量名(用逗号进行分隔)

Delimiter(use ‘t‘ for tab):参数文件中多个变量的分隔符,\t表示用tab键分隔,默认是逗号

Recycle on EOF?:结束后是否循环?默认是true

5.3方式3

1.选项-函数助手对话框——_random-生成

八.jmeter之集合点

1.右键-添加-定时器-Syncheonizing Timer:注意位置要放到集合的操作之前

2.Number of simulated Users to Group by:意思是多少个用户时进行集合点的并发

6.jmeter之检查点

1.断言:脚本导入jmeter

参数化

对相应请求添加响应断言:输入${参数名},右键-添加-断言-响应断言

对相应请求添加断言结果:插入-监听器-断言结果

2.断言持续时间:响应时间在多少毫秒以内,如果超过多长时间就认为是失败的

响应时间不能超过150毫秒,则可以使用断言持续时间来判断

断言——添加-断言-响应断言-断言持续时间

在断言结果中运行查看

3.返回结果大小断言:Size Assertion

7.jmeter之动态关联

1.jmeter中关联的两种方式:正则、xpath(一般xml的时候用的多)

步骤:视频中以webtours开启关联

badboy录制

导入jmeter

找出需要关联的请求(nav.pl)

该请求-后置处理器-正则表达式提取器-填入内容

应用名称:例如:session

正则表达式:name=userSession value=(*)>

模版:如果前面的正则表达式取了不止一个参数,那么这里需要定制参数的组别,如果参数$1$则表示取得第一个值,$2$表示取得第二个值

匹配数字:0随机,-1所有值,以数组形式存储;1;2

缺省值:不用管

添加断言

添加断言结果

运行查看

8.jmeter也有loaderrunner一样的图像

添加-监听器-图形结果、查看结果树、断言结果、生成概要经过、用表格查看结果、监视器结果、聚合报告

扩展下载网址:https://jmeter-plugins.org/install/Install/

ServerAgent-2.2.1.zip未下载

我们需要将serverAgent目录以及下面的文件复制到我们侧睡的服务器上,然后点击打开,他默认的端口号是4444

1.扩展常用:jp@gc - PerfMon Metrics Collector:资源监控

Add Row :CPU 、Memory、DisksI /O

2.扩展应用 Hits per Second

9.jmeter也性能测试实战-web程序

项目背景XX网站,并发登陆的性能测试,1s增加2个线程,运行2000次,分别看20,40,60并发下的表现,监控:成功率、响应时间、标准差、CPU、mem。Io,资源监控需要在Linux下部署监控agent(server agent)

步骤:badboy录制,导入jmeter,参数化、检查点、集合点,指标监控,资源监控,报告(可导出到xls,然后自行生成报表)

1.参数化:前置处理器-用户参数:username:用户:xiaowang

2.在网址连接中的uername替换成${username}

3.检查点:连接-右键-添加-响应断言-${username}

4.右键-添加-断言结果

5.右键-添加-监听器-查看结果树、聚合报告

数据写入文件的后缀名jtl,也可以保存到Excel中

10.jmeter性能测试实战-FTP程序

需求:上传一个文件到服务器(put)

下载一个文件到本地(get)

右键-添加-线程组-FTP请求-服务器名称或IP-Remote File(远程的文件是什么?)-local File(本地的文件是什么)——用户名,密码

11.jmeter性能测试实战-数据库mysql

1.需求:测试用户表(select

2.环境准备:

mysql驱动

Jmeter-jdbc配置

Jmeter-jdbc请求

3.步骤:

(1)测试计划中加入mysql-connector-java-8.0.27.jar包,在测试计划的右下方浏览

(2)jdbc配置:线程组-jdbc Connection Configuration

主要填写 Database URL、JDBC Driver Class:org.gjt.mm.mysql.Driver、Username、password

(3)jdbc请求

右键-添加-JDBC Request

Query Type:默认 :Select Statement

Query:填写:select * from person;

(4)断言、结果树

如果需要实现同时多个不同的用户使用不同的SQL,可以通过把整条SQL语句参数化来实现,例如把SQL语句放在CSV文件中,然后在JDBC Request 的Query中使用参数代替${SQL_Statement}

12.控制器

1.if控制器

条件:${is_run}=1

示例:判断${is_run}=1 是否成立,如果成立就执行 http 请求;复选框“Evaluate for all

children?”表示是否对所有子节点使用判断条件,不选择的话,只对第一个子节点生效。

无 else 判断,可以用非条件来实现。

2.随机控制器

随机执行某一个子节点内容

3.随机顺序控制器

子节点全部执行,但顺序随机

4.循环控制器

设置执行控制器子节点的次数,也可以设置永远执行