jmeter是设计成做负载测试和性能评估的java应用。它能够测试的类型包括
- Web – HTTP,HTTPS
- SOAP / REST 服务
- FTP
- 通过JDBC的数据库
- LDAP
- 基于JMS的面向消息的中间件
- 邮件 – SMTP(s),POP3(s)以及IMAP(s)
- shell脚本
- TCP
- java对象
以下以TCP为主
GUI界面简介
下载完jmeter之后,进入jmeter源码目录
⇒ ls
LICENSE NOTICE README.md bin docs extras lib licenses printable_docs
在当前目录下执行命令 ./bin/jmeter
便可以看到图形化的界面
jmeter概念
ThreadGroup
线程组是是所有测试计划的起点。一切的controller和sampler都必须在线程组下面,其它的元素,比如listener,可能直接放在了测试计划下面,这种情况下它就适用于所有的线程组。线程组控制着
1、 线程的数量
2、 线程全部启动的时间
3、 执行测试的次数
Pre-Processor
在sampler请求之前执行,一般它用来修改设置或者更新一些变量
Samplers
用来发送请求给服务器,并且等待结果,Jmeter的sampler包括
- FTP request
- HTTP request
- JDBC request
- java object request
- JMS request
- JUnit Test request
- Mail request
- OS Process request
- TCP request
Assertion
用来校验请求的返回结果
configuration
它会被添加到请求,或者是修改请求
Post-Processor
在sampler执行之后执行
logic controller
自定义jmeter在发送请求时的一些处理逻辑
Listener
用来获取jmeter运行时搜集的信息,比如 Graph Result listener用来绘制返回时间
Timer
在每个sampler执行前,延迟一段时间执行
Properties
JMeter的Properties定义在了 jmeter.properties,它是全局的
variables
它对于每个线程来说都是本地的,如果在一个线程里面改变了,仅影响这个线程
Jmeter的scope
jmeter的测试结构既是分层的又是顺序的,一些元素是严格按照层次来的,比如(Listeners, Config Elements, Post-Processors, Pre-Processors, Assertions, Timers),一些是按照顺序来的,比如(controllers, samplers)
1、 一个典型的按照顺序执行的测试树如下,它的请求顺序是 One Two Three Four。
![93\_2.png][93_2.png]
2、 受层次影响的测试树,Assertion #1 仅用于 One,而 Assertion #2则是用于 TWO和Three
![93\_3.png][93_3.png]
3、 加上timer之后, Timer #1 会用于 Two/Three/Four,Assertion # 1则仅会用于Three,而 Timer #2则会影响所有的请求
![93\_4.png][93_4.png]
可以简要的理解成 子集功能只能给当和他同一级目录和他的子集使用,其它的是按照顺序执行
执行顺序说明
总的来看,执行顺序是
1、 Configuration elements
2、 Pre-Processors
3、 Timers
4、 Sampler
5、 Post-Processors (除非SampleResult 是 null)
6、 Assertions (除非SampleResult 是 null)
7、 Listeners (除非SampleResult 是 null)
比如以下的测试计划
- Controller
- Post-Processor 1
- Sampler 1
- Sampler 2
- Timer 1
- Assertion 1
- Pre-Processor 1
- Timer 2
- Post-Processor 2
它的执行顺序就是
Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-Processor 2
Assertion 1
Pre-Processor 1
Timer 1
Timer 2
Sampler 2
Post-Processor 1
Post-Processor 2
Assertion 1
图形界面
通过图形界面配置好的结果,保存下来后,可以再通过./bin/jmeter -t xxx.jmx
的方式打开。
保存配置的方式为 找到应用目录 File -> save test plan as 即可
启动测试操作如下
停止测试操作如下
对于左侧栏也提供了展开和收起
线程组的界面如下
如果想通过非图形界面的方式启动,则可以使用 ./bin/jmeter-server 来执行,远程测试可以通过添加 -Jremote_hosts 的方式来添加服务列表 远程测试详情戳这里
监控结果
如果需要测试完成后自动产生图形界面的结果,可以执行
./jmeter -n -t ~/Desktop/MyServerHandler.jmx -l ~/Desktop/MyServerHandlerLog.txt -e -o ~/Desktop/MyserverHandlerReport
- ~/Desktop/MyServerHandlerLog.txt是一个存储结果的空文件
- ~/Desktop/MyserverHandlerReport 是一个存储监控结果的空
- ~/Desktop/MyServerHandler.jmx 通过界面配置生成的压测计划
如果已经执行完了,日志放在了 MyServerHandlerLog.txt 中,可以通过命令直接产生
/bin/jmeter -g MyServerHandlerLog.txt -o ./MyserverHandlerReport
可以在 bin/user.properties 文件定制相关的内容
jmeter体验测试案例
nettyServer长连接服务提供了简单的心跳和echo服务,通过启动配置好的jmx
就可以看到对应的界面,然后开始压测