1.背景

最近笔者的一位老朋友咨询了一个问题:在自定义的Java请求中如何编写多个请求?老朋友反应他们发送请求只能基于这种Java请求形式(代码调需用三方封装的jar包)。这个问题恰巧不久前在笔者所在的飞测QQ群中有人咨询过,当时只回答了用SubResult.

2.目的

本次的目的就是深挖下:JMeter的JavaRequest请求如何编写过个SamplerResult。

3.实战

笔者在之前已经多次写过Java请求脚本,本次如何搭建脚本编写环境就及Java请求中有哪些约定好结构本文不赘述,大家自行百度下。其实主要还是讲思路,包括以后笔者写文章大都主要是讲解决问题的思路。

  • 碰到这个问题,我第一时间想到的是用SubResult(因为笔者长期研究JMeter底层源码)

然后就开始撸代码:

恩,感觉很完美!然而在执行后:

从上图看出,抛出了:sampleEnd called twice 异常,笔者将代码做了微调:

恩,感觉应该没问题了,再次执行下:

我擦,咋又报错了。。。这次报了setEndTime must be called after setStartTime ,笔者于是看了JMeter底层代码,看看哪里抛出的这个异常。如下图:

恩? startTime值为零才会抛出这个异常,感觉越来越有意思了。带着这个疑问笔者去查看了JMeter的API文档,这才发现导致此现象的真凶。

当回翻译官:

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,最终问题解决。。。如果大家发现更好的解决方式,请不吝赐教!

JMeter的JavaRequest探究的更多相关文章

  1. 关于JMeter原子性相关探究

    1.背景 最近宝路遇到个项目,在使用JMeter过程中引发了一些思考,宝路尝试用各种方式去验证,进而有了今天"JMeter原子性"相关主题. 2.目的 探究JMeter的事务的原子 ...

  2. JMeter下Groovy和BeanShell语言在不同组件中性能差异实践探究

    一般而言JMeter下性能最好的是jar包这类java原生请求,对于JMeter并没有原生支持的请求,一般都会将其直接编译为jar包,然后再JMeter中调用,这样性能最好. 但是有些需求并不适合用j ...

  3. Jmeter javaRequest插件开发

    1. 适用场景 Jmeter工具当前支持的协议或协议所支持的传输方式及传输内容不能满足当前项目的测试要求时,就需要根据实际要求手动编写java测试代码(实现对应的Jmeter规范),以插件方式加载到J ...

  4. jmeter之自定义java请求性能测试

    一.环境准备         1.新建一个java工程         2.导入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar         ...

  5. 性能测试Jmeter压测ZooKeeper-自定义java请求

     要想通过自定义java请求来压测ZooKeeper,那么我们就需要做两件事情,第一我们需要知道java如何操作ZooKeeper,第二就是怎么能将我们写的jar包让jmeter识别,首先我们先来干第 ...

  6. Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!

    有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能.查看最流行的扩展机制,比较性能并分析哪一个是最好的. 这是乐队之战,JMeter风格. Beanshell V. JSR223 V ...

  7. Jmeter自定义Java请求开发

    一.本次实验目的 IDEA新建maven项目,使用java开发自定义jmeter的请求. 本次开发使用的代码,会百度云分享给大家. 二.本次实验环境 Idea 2017.02 Jmeter 5.1.1 ...

  8. JMeter概念

    1. Test Plan  测试计划 Test Plan也就是测试计划,概念有点类似eclipse里面的project(项目.工程). 一个JMeter测试计划有很多种测试元素组成.一般至少包含一个T ...

  9. jmeter学习之安装篇(一)

    一.Jmeter简介 Jmeter是Apache组织开发的基于Java开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常被用做接口功能测试和性能测试. Jme ...

随机推荐

  1. infiniband 网卡驱动安装

    硬件:Mellanox InfiniBand,主要包括 HCA(主机通道适配器)和交换机两部分软件:CentOS 6.4MLNX_OFED_LINUX-2.1-1.0.0-rhel6.4-x86_64 ...

  2. Postgresql_fdw

    Postgresql_fdw 测试环境 Ubuntu 16.04 LTS云主机2台,主机名为pg1(192.168.0.34)和pg2(192.168.0.39). 安装postgresql 下面这个 ...

  3. [记录]python异步编程async/await实现

    from selectors import DefaultSelector, EVENT_READ, EVENT_WRITE import socket from types import corou ...

  4. 简介SoftICE是Compuware NuMega公司1的产品,是目前公认最好的系统级调试工具

    简介SoftICE是Compuware NuMega公司1的产品,是目前公认最好的系统级调试工具

  5. .NET Core CSharp初级篇 1-5 接口、枚举、抽象

    .NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...

  6. Spring的注解问题

    Annotation(注解)概述 从JDK5.0开始, Java增加了对元数据(MetaData)的支持,也就是 Annotation(注解). Annotation其实就是代码里的特殊标记,它用于替 ...

  7. 深入理解 JavaScript 单例模式 (Singleton Pattern)

    概念 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在. 核心:确保只有一个实例,并提供全局访问. 实现思路 一个类能返回对象一个引用(永远是同 ...

  8. http面试笔试常考知识点(二)

    接上一篇随笔 1. https协议为什么比http安全? 内容加密:建立一个信息安全通道,确保信息传输安全: 身份认证:确保网站的真实性: 数据完整性校验:防止内容被第三方冒充或者篡改 2.常见状态码 ...

  9. 前端响应式のmedia文件分离

    响应式cssのmedia文件分离 media简介 1.媒体查询,添加自CSS3 2.一个媒体查询由一个可选的媒体类型和零个或多个使用媒体功能的限制了样式表范围的表达式组成,允许内容的呈现针对一个特定范 ...

  10. 蓝牙Beacon广播数据包格式以及解析

    目录 1. 获取原始蓝牙广播包 2. 安装WireShark软件 3. 分析Beacon广播包数据 3.1 第一个数据包格式 3.2 第二个数据包格式 3.3 Android程序开发中的蓝牙广播包 4 ...