源码实现Jmeter界面(GUI测试计划树)的调整

今天我们来谈谈Jmeter源码中关于界面GUI操作的相关类,用于对界面的操作进行定制开发。基于此,我们再来分析一个Java代码调整Jmeter GUI的案例。

【GUI相关的Java类分析】:

1.GuiPackage类:

首先得从GuiPackage类获取instance,后续的界面操作都要基于此instance来进行。

示例代码:GuiPackage guiInstance = GuiPackage.getInstance();

2.JmeterTreeModel类:

Jmeter界面左侧的测试计划树,都要基于JmeterTreeModel类来进行。

该类,要重点掌握getChild(Object parent, int index )方法,getChildCount(Object parent)方法,和getTestPlan()方法。

注意:

getChild方法,返回的Object类型,后续使用需要进行类型转换。

getTestPlan()返回的并非TestPlan类型,而是HashTree类型

示例代码:

JMeterTreeModel jm = guiInstance.getTreeModel();
Object obTestPlan = jm.getChild(jm.getRoot(), 0);
HashTree testPlanTree = jm.getTestPlan();

3. JmeterTreeNode类:

重点掌握getUserObject() 方法。

注意:

getUserObject()返回的虽然是Object类型,但全都可转换为TestElement类型,再根据需要转换成具体的测试对象,如HTTPSampler类型。

【案例分析】:

承接上一篇:Jmeter源码实现多请求关联压测-CSDN博客。我们知道Jmeter中如果有多个请求,界面中上面的请求会先执行,如下图。在界面操作时,我们可以直接拖拽来实现上下调整;而通过代码如何能是实现这样一个简单的操作呢。

Jmeter请求执行顺序

【核心代码】:
1.通过GuiPackage类获取Instance,再获取JmeterTreeModel,进而获取TestPlan(注意是Object类型)。

GuiPackage guiInstance = GuiPackage.getInstance();
JMeterTreeModel jm = guiInstance.getTreeModel();
Object obTestPlan = jm.getChild(jm.getRoot(), 0);

2.遍历obTestPlan,以获取SetupThreadGroup(注意也是Object类型)。

int TP_childCount = jm.getChildCount(obTestPlan);
Object obThreadGroup = new Object();
for(int i=0; i<TP_childCount; i++){
    obThreadGroup = jm.getChild(obTestPlan, i);
    if(obThreadGroup.toString().contains("SetupThreadGroup")){
        break;
    }
}

3.继续遍历obThreadGroup,以获取各个HTTPSampler(注意也是Object类型)。

注意,这时可以通过类型转换将Object转换为JMeterTreeNode,再使用getUserObject()方法和类型转换得到TestElement,接着就可以判断具体类型如HTTPSampler

int TG_childCount = jm.getChildCount(obThreadGroup);
Object obHTTPSampler;
for(int i=0; i<TG_childCount; i++){
    obHTTPSampler = jm.getChild(obThreadGroup, i);
    JMeterTreeNode JTN = (JMeterTreeNode) obHTTPSampler;
    TestElement testElement = (TestElement) JTN.getUserObject();
    if(testElement instanceof HTTPSampler) {
//此处可以将你想要的对象存储下来
    }
}

4.在得到具体的TestElement(或HTTPSampler)类后,就可以通过getName()等方法来获取对象标识,用于调整其上下顺序了。

5.界面上下顺序调整:

注意:index为int,也就是你想调整的位置;其他参数均可以是JmeterTreeNode类型,在第3步转换为JmeterTreeNode类型后,需要将对象存下来,在这里使用。

guiInstance.getTreeModel().removeNodeFromParent(child);

guiInstance.getTreeModel().insertNodeInto(child,(JMeterTreeNode) obThreadGroup, index);

【验证结果】:

如下图,不管代码运行多少遍,3个http请求都会按顺序生成。

通过代码调整多请求上下顺序

【后续】:

在分析了Jmeter GUI相关的类的后,本文只是介绍了一个最简单案例。基于此,还可以继续进行源码的定制和扩展。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值