目录
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.循环控制器
设置执行控制器子节点的次数,也可以设置永远执行