JMeter私人定制之取样器定制
我们同样可以通过自定义全新的取样器来实现。本文以JMeter5.1.1版本为例,通过创建Maven项目来简单介绍如何自定义全新取样器来实现前端设备Web端登录。
开始之前,我们先了解下简单的开发流程:
1.首先,设计GUI布局,创建GUI类,也就是绘制一个页面(要实现AbstractSamplerGui类才能被JMeter加载)
2.其次,创建取样器处理类(要实现AbstractSampler类才能被JMeter加载)
3.最后,集成取样器,编译、打包,放到%JMETER_HOME%/lib/ext下
取样器GUI布局设计
取样器GUI布局设计如下:
创建Maven项目
步骤1 创建Maven工程(Maven工程项目创建这里不在赘述),创建后得到如下项目结构:
步骤2 在pom.xml文件中将JMeter相关的依赖包进行引入
<!--引入JMeter的依赖jar包;version与本地Jmeter版本一致-->
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_http</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.27</version>
</dependency>
</dependencies>
这里一定要引入JMeter相关的依赖包(ApacheJMeter_core/ApacheJMeter_java),只有引入相关的依赖包,才能继承相关的类和重新实现类中相应的方法。其他引入的包,根据设计需要,按照如上格式自行引入。
取样器GUI类实现
步骤1 导入依赖的JMeter类引用
//GUI类创建依赖
import org.apache.jmeter.samplers.gui.AbstractSamplerGui;
import org.apache.jmeter.testelement.TestElement;
//GUI组件创建依赖
import com.test.jmeter.sampler.RPC3LoginSampler;
import org.apache.jmeter.gui.util.HorizontalPanel;
import org.apache.jmeter.gui.util.VerticalPanel;
import org.apache.jorphan.gui.JLabeledTextField;
import javax.swing.*;
import java.awt.*;
步骤2 新建Java类并继承以获取父类的能力
public class RPC3LoginSamplerGui extends AbstractSamplerGui
步骤3 定义全局变量,用于创建GUI组件
private JLabeledTextField ipAddressField;
private JLabeledTextField portField;
private JLabeledTextField userNameField;
private JLabeledTextField passwordField;
步骤4 定义构造器,初始化取样器页面
public RPC3LoginSamplerGui() {
super();
this.createPanel();
}
步骤5 根据GUI设计图,每一行单独看作一个组件,比如将“平台地址”一行看作一个组件进行绘制(其他同理)
private JPanel getIpAddressPanel() {
ipAddressField = new JLabeledTextField();
JLabel ipAddressLabel = new JLabel("平台地址:");
ipAddressLabel.setLabelFor(ipAddressField);
JPanel panel = new HorizontalPanel();
panel.add(ipAddressLabel, BorderLayout.WEST);
panel.add(ipAddressField, BorderLayout.CENTER);
return panel;
}
步骤6 组件组装,从而获取取样器整个面板GUI
private void createPanel() {
JPanel panel = new VerticalPanel();
panel.add(getIpAddressPanel());
panel.add(getPortPanel());
panel.add(getUserNamePanel());
panel.add(getPasswordPanel());
//取样器-名称、注释头布局
setLayout(new BorderLayout(0, 5));
setBorder(makeBorder());
add(makeTitlePanel(),BorderLayout.NORTH);
//自定义面板布局
add(panel, BorderLayout.CENTER);
}
步骤7 重写getStaticLabel方法,设置取样器页面上展示的名称
//导航菜单&取样器页面-取样器的名称
@Override
public String getStaticLabel(){
return "RPC3LoginSampler";
}
步骤8 重写getLabelResource方法,和getStaticLabel的差别在于,getLabelResource会根据properties文件进行语言的国际化,优先采用getStaticLabel。需要与makeTitlePanel配合使用
//从message_zh_CN.prepertities读取
@Override
public String getLabelResource() {