jmeter理论基础
1认识Jmerter。
一:Jmerter是什么?
Apache Jmerter是Apache公司组织开发的基于java的压力测试工具
Jmerter可以用于对服务器、网络或者对象模拟巨大的负载,来自于不同压力类别下测试她们的强度,Jmerter能够对应用程序做功能/回归测试,通过对创建带有断言脚本的验证能够返回你期望的结果。为了最大限度的灵活性,Jmerter允许正在使用表达的创建断言
二:Jmerter特点?
1-能够对HTTP好FTP服务器进行压力和性能的测试,也可以对任何数据库进行同样的测试(通过Jdbc)
2-完全可以移植的100%纯java
3-完全多线程框架允许通过多个线程并发和取样通过单独的线程组对不同的功能进行同样的取样
4-各种负载统计表可连接的计时器提供选择
5-数据分析和可视化插件提供了很好的扩展性以及个性化
6-具有提供动态输入到测试的功能
三:Jmerter的工作原理?
通过多线程模拟服务器访问压力;可以通过代理的方式录制脚本
四:Jmerter的目录结构
bin目录是可执行的文件,Jmerter.bat启动,可以设置jvm参数
根据经验,heap最多设置物理内存的一半,默认设置是512M如果heap超过物理内存的一半,可能运行Jmerter会慢,甚至出现内存溢出
Jmerter的log在Jmerter.log中查看
Jmerter.properties文件中有一个属性log_level.Jmerter
可以设置改变日志详细度,默认是info,可以改为debug
extras,目录下的文件提供对ant的支持,可以利用ant来实现自动化,例如批量执行脚本,产生html报告文件等
运行Jmerter的时候会产生一个jtl文件,把它放到extras,运行ant-Dtest=文件名 report就可以生成测试统计报告
lib目录下的ext子目录是Jmerter的核心jar包;Junit子目录是放Junit脚本的,用户扩张所依赖的包直接放到lib下即可,不要放在lib/ext下
五:Jmerter和loadrunner各有什么优缺点?
对比项:
安装、录制回放模式、测试协议、分布式大规模压力测试、IP欺骗、图形报表、测试逻辑控制、监听服务资源、功能测试。
2Jmerter常用功能介绍
测试计划:用来描述一个性能测试,所有的内容都是基于这个计划。
线程(用户):
一般常用线程组:可以理解为loadrunner中的虚拟用户。
setup thread group:可用于执行测试操作,这些线程的行为的行为完全像一个正常的线程组原件。类似于loadrunner中的init
teardown thread group:可用于执行测试后的动作,这些线程行为完全像一个正常的线程原件,类似loadrunner中的end
3Jmerter的两种录制脚本方式
一:badboy录制脚本。
打开badboy工具点击工具栏的红色圆形按钮,在地址栏目中输入被测试项目的地址
录制完成后,点击工具栏旁边的黑色按钮,结束录制,选择文件--exprot to Jmerter
打开Jmerter工具选择文件 打开 选择刚才保存的文件,将其导入进来
二:设置脚本
创建一个线程组(右键点击“测试计划”“添加”“线程组”)
在工作台-非测试原件-添加“http代理服务器”
代理服务器默认端口8080,可以自行修改,但不要和其他的端口有冲突
设置IE浏览器:选择Internet属性-链接-局域网设置-点击Jmerter上的启动按钮,打开浏览器输入需要录制的web羡慕地址,Jmerter会自动记录你在IE浏览器上的所有访问的页面,所以要记得关闭。
4测试步骤
测试计划、线程组、http请求、监听器、运行脚本、查看报告
首先是新建一个测试计划,那么我们新添加一个线程组
然后我们在线程组下添加一个Sampler--HTTP请求
HTTP请求设置-保持默认即可
名称:本属性用于标识一个取样器,建议使用一个有意义的名称
注释:对于测试队友任何左右,仅用户记录可读的注释信息
服务器名称或者IP:HTTP请求发送的目标服务器名称或IP地址
端口号:目标服务器的端口号默认为80,后面的超时定义可以不用填
协议:向目标服务器发送HTTP请求超时的协议,可以使HTTP和HTTPS,默认值是HTTP
方法:发送HTTP其你去的方法,可用方法包括get、post
head、put、options、trace、delete等
content enconding :内容的编码方式
路径:目标URL路径
自动重定向:如果选中该项,当发送Http请求后的得到的响应是302/301时,Jmerter自动重定向到新的页面
——
Use keep Alive:当选项被选中时,Jmerter和目标服务器之间使用
keep-Alive方式进行HTTP通信,默认选中
Usemultipart/from-data for HTTP POST:当发送http post 请求时,使用Use multipart/from-data发誓发送,默认不选中
同请求一起发送参数:在请求中发送URL参数,对于参数的URL,Jmerter提供了一个简单的对参数化的方法。用户可以将URL中的所有参数设置在本表中,表中的每一行是一个参数值
同请求一起发送文件:在请求中发送文件,通常HTTP文件上传行为可以通过这种方式模拟。
线程组设置
线程组:虚拟用户
ramp up period:设置的虚拟用户数需要多长时间全部启动,如果线程数为20.、,时间为10,也就是每秒启动2个线程
循环次数:每个线程发送请求的次数,如多线程数为20 ,循环次数为100,那么每个线程发送100次请求,总数为20*100=2000个请求,如果勾选了“永远”,那么所有的线程会一直发送请求,直到选择停止脚本运行。
调度器:可以灵活的设置运行时间等
5Jmerter原件作用域与执行顺序
一:Jmerter不像loadrunner那么容易上手,在里面杂乱的原件和不知道弄的树型图足以让初学者丧失很多热情了。
二:同时我们也发现里面有很多原件,其实我们没有必要把每个都弄成那么清楚,先把最常用的重要的搞清楚即可,后续碰到了在学习,这样学习成本下降下来,也不至于太受打击
三:这次咋们就一起看下原件以及他们执行顺序如何
四:原件的作用域
配置原件回影响作用范围呢你所有的原件
前置处理程序在其作用范围内的每一个sampler原件之前执行
定时器:对其作用范围内的每一个sampler有效
后置处理器:在作用范围内的每一个sampler原件之后执行
断言:对其作用范围呢内的每一个sampler原件执行后的执行结果
监听器:收集其作用范围的每一个sampler原件的信息并呈现
sampler原件不和其他原件相互作用,因此不存在作用域的问题
例子一:
循环监控器
图形结果
聚合报告
固定定时器
循环控制器
图形结果
响应断言
聚合报告所有
记住一句话:从各元件的层次结构判断每个原件的作用域
执行顺序:
配置原件--前置--定时器--sampler--后置--断言--监听器
如果在同一个作用域范围内有多个投医类型的原件,则这些原件按照他们在测试计划中的上下顺序依次执行
6参数化
熟悉loadrunner的童鞋肯定不会对参数化陌生
badboy里的参数化(在badboy里面已经讲过)
Jmerter李参数化
一:首先是在测试计划中做参数化L:新建一个参数名称,和输入参数的值
然后在录制好的脚本里面找到需要替换的值,将值替换为${key}那么我们就已经成功的将脚本做了参数化,这里是全局的参数,接下来我们可以再脚本里面做参数,首先是脚本里的参数,选择脚本点击用户参数,同上一步,可以添加多个参数,最后是做文本参数,在配置文件中点击CSV data config 这样一个东西就是我们一个CSV 的遮掩一个方式,他跟参数化方式是一样的,只不过是文件,这里需要写TXT文件的目录,第二行是写字符集的格式一般选择gbk的格式,第三行用来写变量的名称,中间用逗号隔开;
7Jmerter之集合点
那么接下来我们来一起学习Jmerter的集合点
注意:集合点的位置和loadrunner一样也是放在事物的操作之前,集合点策略可以设置多个用户在这里集合并发。
8Jmerter之检查点
断言:Jmerter其实也有类似检查点的功能,也就是断言中的响应断言
当然Jmerter中响应断言要比loadrunner中的断言更加强大一点
我们在badboy中你录制好脚本之后,导入到Jmerter中去,使用文本参数化,对应请求添加响应断言、对应相应的,一半成功就会显示一行
断言持续时间,可以通过断言持续时间,来判断网页的响应时间是否达到我们需要的标准。
Jmerter中的图形监控:Jmerter也有loadrunner一样的图形监控扩展
Jmerter的痛:图形监控,相比loadrunner还是比较逊色的,不过能够监控Windows和linux。就像loadrunner一样
扩展插件:
将Jmerterplugins包复制到Jmerter的lib目录下的ext目录下面,然后启动Jmerter
1、人力资源管理系统登录50个用户集合点并发5个用户的性能,需要做参数化,集合点完成
2、分别使用以下两种断言,给出断言结果
使用断言响应时间延迟1000毫秒,给出断言结果
使用响应断言判断登录用户是否存在,给出断言结果
3、使用结果树查看运行过程,查看测试结果。
4、使用聚合报告,查看测试结果
5、监控运行过程资源消耗
终结以上各项测试结果,输出结果测试报告