最近改用 Jmeter 了,记录点东西
# 和 LoadRunner 的区别
## 编写脚本
LR 提供.net,java,c 三种语言的支持,Jmeter 只支持 Java 一种语言的开发,直接提供 api 的只是其中一种叫 JavaRrequest 的 Sampler
只要继承他的 AbstractJavaSamplerClient 类,打个包丢 lib 下面,就可以了,有点像 Junit
不过开源项目嘛,各种 Processer,Listener 之类的东西都是可以自定义开发的,就是麻烦一点
## 接口
LR 里面有个 transcation 的概念,主要有三个属性:name,duration,status.
通过它提供的 api,可以在业务开始的时候调用 lr.start_transcation(name) 开始一个事件,在结束的时候 lr.end_transcation(name,passOrNot) 来完成一个事件,这样就自动计算了处理花费的时间,并记录了最终状态
,在 contorller 上就会体现出 name 业务的一次执行,TPS 或者 RPS 图标上可以观察到相应的曲线
Jmeter 里也有这么个东西,不过因为 Jmeter 里的业务处理部分叫 Sampler,所以叫 SampleResult.
每个 Sampler 每次执行,都需要 return 一个 SampleResult.这个 Result 包含的内容很多,不光上面的包含 name,duration,status,还可以保存 request 和 respones,而且还能嵌套,一个 Result 可以包很很多 SubResult.
最终这些结果都被"Listener"接收到 (Sampler,Listener 的概念不说了,网上 google 一下一堆)
主要接口
ampleStart()
sampleEnd()
setSuccessful()
setSampleLabel()
setRequestHeaders()
setResponseData()
## 监控,结果展示和分布式
这方面 Jmeter 相比来说太弱,不说了
推荐个插件 jmeter-plugin
Transactions per Second
Response Times Over Time
PerMon Metrics Collector
## 多线程
LR 里面有个叫 Vuser 的东西,一个 Vuser 可以认为是一个独立的线程,也可以设置让他是一个独立的进程,不设置默认 50 个 Vuser 一个进程.每个 Vuser 是一个测试脚本的完整实例.
顺便说一句,LR 的 api 只有从主线程里调用才起作用,别的现成调用都不干活,不过这都不是事
Jmeter 么...... 一个测试计划下面可以有多个线程池,线程池是用来执行各种 Sampler 的,可以设置线程的数量,执行次数
每个线程会都会把线程池下面的东西 (sampler,controller 之类的) 顺序执行一遍
## 上下文
LR 没有
Jmeter 通过 JMeterContextService.getContext() 可以获得一个 JMeterContext,这里面能包含一个工作线程中的大部分有用的信息,比如:
getPreviousResult() 获取上一个 sampler 的结果
getVariables() 获得一个 JMeterVariables,这个东西就是个 Map,Value 是个 Object,这样可以在线程里任何地方存取你需要的任何类型,很灵活也很好用
未完待续...
目前,个人感觉性能测试还是 LR 好用,可惜收费,还很贵,而且只能 Windows
Jmeter 怎么看怎么像个自动化接口测试的东西