JMeter开发一个最简单的Sampler

如何开发一个简单的Sampler

创建maven项目,并选择对应版本的jmeter核心依赖

在这里,我先选择5.4.1版本的jmeter,如果有其他的依赖jar包,可以一并放在这里

	<properties>
        <jmeter.version>5.4.1</jmeter.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_core</artifactId>
            <version>${jmeter.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_java</artifactId>
            <version>${jmeter.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_http -->
        <dependency>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_http</artifactId>
            <version>${jmeter.version}</version>
        </dependency>
        
        <!-- other dependencies -->
        ...

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

创建对应的GUI类(基于SWING)

本例中 ,先尝试生成一个简单的Http请求的取样器,期望元素包括名称、注释、请求地址、请求参数:

public class MyHttpSenderGui extends AbstractSamplerGui {
    private JTextField urlField;

    private HTTPArgumentsPanel argumentsPanel;


    public MyHttpSenderGui() {
        init();
    }

    @Override
    public String getLabelResource() {
        return null;
    }

    @Override
    public String getStaticLabel() {
        return "我的HTTP请求";
    }

    @Override
    public TestElement createTestElement() {
        return new MyHttpSampler();
    }

    @Override
    public void modifyTestElement(TestElement element) {
        element.clear();
        configureTestElement(element);


        element.setProperty("url", urlField.getText());

        element.setProperty("requestBody", JSON.toJSONString(argumentsPanel.getParameters().getArgumentsAsMap()));
    }

    public void init() {
        argumentsPanel = new HTTPArgumentsPanel();

        setLayout(new VerticalLayout(30, 50));
        setBorder(makeBorder());
        Box box = Box.createVerticalBox();
        box.add(makeTitlePanel());
        box.add(makeUrlPanel());
        box.add(argumentsPanel);
        add(box,BorderLayout.NORTH);
    }

    private Container makeUrlPanel() {
        JPanel urlPanel = new JPanel(new BorderLayout(5, 0));

        urlField = new JTextField(150);
        JLabel label = new JLabel("请求地址:");
        label.setLabelFor(urlField);

        urlPanel.add(label, "West");
        urlPanel.add(urlField, "Center");


        HorizontalPanel vp = new HorizontalPanel();
        vp.add(urlPanel);
        return vp;
    }

}

关键方法和代码说明

getStaticLabel:页面上展示的名称

getLabelResource: 和 getStaticLabel的差别在于,getLabelResource会根据properties文件进行语言的国际化,优先采用getStaticLabel。需要和makeTitlePanel配合使用

modifyTestElement:在取样器提交的时候,通过该方法将界面的参数传递给Sampler。缺少element.clear();configureTestElement(element);会导致icon无法找到,并导致取样器无法使用

createTestElement:创建该取样器的处理方法。

init:创建GUI,具体请参考Swing。

创建取样器处理类

public class MyHttpSampler extends AbstractSampler {
    @Override
    public SampleResult sample(Entry e) {
        String url = getPropertyAsString("url");
        String requestBody = getPropertyAsString("requestBody");

        SampleResult sampleResult = new SampleResult();

        // 设置请求参数
        sampleResult.setSamplerData(
                String.format("url:%s\n\trequestBody:%s", url, requestBody)
        );

        sampleResult.sampleStart();
        try {
            String body = HttpClientUtil.getPostJsonBody(url, requestBody);
            sampleResult.setSuccessful(true);
            sampleResult.setResponseData(body, "utf-8");
            sampleResult.setSampleLabel("我的HTTP请求-成功");
        } catch (Exception exception){
            sampleResult.setSuccessful(false);
            sampleResult.setResponseData("请求失败,没为什么", "utf-8");
            sampleResult.setSampleLabel("我的HTTP请求-失败");

        } finally {
            sampleResult.sampleEnd();
        }

        return sampleResult;
    }
}

集成取样器

  • 将程序打包生成对应的jar包
  • 将对应的jar包放到%JMETER_HOME%/lib/ext下,重新打开JMeter,取样器会自动加载

功能简述

将一个普通的HTTP请求,参数转化成json格式后,通过POST的方式传到目标服务器

相关补充见下:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值