最近笔者的一位老朋友咨询了一个问题:在自定义的Java请求中如何编写多个请求?老朋友反应他们发送请求只能基于这种Java请求形式(代码调需用三方封装的jar包)。这个问题恰巧不久前在笔者所在的飞测QQ群中有人咨询过,当时只回答了用SubResult.html
本次的目的就是深挖下:JMeter的JavaRequest请求如何编写过个SamplerResult(笔者本想网上找找资料,一看全是比较常规的JavaRequest请求编写,没有相关SubResult的使用方法,只能靠本身)spa
笔者在以前已经屡次写过Java请求脚本,本次如何搭建脚本编写环境就及Java请求中有哪些约定好结构本文不赘述,你们自行百度下。其实主要仍是讲思路,包括之后笔者写文章大都主要是讲解决问题的思路。翻译
而后就开始撸代码:xml
恩,感受很完美!然而在执行后:htm
从上图看出,抛出了:sampleEnd called twice 异常,笔者将代码作了微调:blog
恩,感受应该没问题了,再次执行下:ci
我擦,咋又报错了。。。此次报了setEndTime must be called after setStartTime ,笔者因而看了JMeter底层代码,看看哪里抛出的这个异常。以下图:文档
恩? startTime值为零才会抛出这个异常,感受愈来愈有意思了。带着这个疑问笔者去查看了JMeter的API文档,这才发现致使此现象的真凶。get
当回翻译官:源码
addRawSubResult(SampleResult subResult) | 向集合中添加子结果,而不更新任何父字段。 |
addSubResult(SampleResult subResult) | 添加子结果并调整父字节计数和结束时间。 |
addSubResult(SampleResult subResult, boolean renameSubResults) | 添加子结果并调整父字节计数和结束时间。 |
咱们代码中用的是addSubResult(SampleResult subResult, boolean renameSubResults),笔者又调整了代码:
执行结果:
ok,执行成功(出现Log4j2异常是由于笔者没有配置log4j2.xml,不要在乎这个细节),但总感受仍是缺点什么?为了更真实笔者有微改了下代码:
OKay,打包到JMeter运行以下:
笔者在看聚合报告时,又遇到问题了。。。
恩?只显示父请求聚合数据,咋不显示子请求数据呢?笔者目前发现解决办法是:执行的时候先保存JTL结果见文件,场景结束后再次用聚合报告打开此JTL结果文件。
okay,最终问题解决。。。若是你们发现更好的解决方式,请不吝赐教!