本篇文章主要介绍如何对JMeter进行二次开发,添加自己所需的功能。这里以Json验证为例进行说明。在web接口测试过程中,JSON的应用已经非常普遍,但原声的JMeter并没有提供Json及JsonPath的验证,这里以JSON格式验证为例进行JMeter二次开发简单说明。

准备工作:1)JMeter本地开发环境;2)gson.jar-用于做json数据有效性验证(也可以自己编写验证逻辑)

具体步骤:

1.引用gson.jar

2.添加JSONAssertion及JSONAssertionGui

2.1 src/components/org.apache.jmeter.assertions下,新建JSONAssertion

public class JSONAssertion extends AbstractTestElement implements Serializable, Assertion, ThreadListener {
    private static final Logger log = LoggingManager.getLoggerForClass();

    private static final long serialVersionUID = 240L;

    /**
     * Returns the result of the Assertion. Here it checks wether the Sample
     * took to long to be considered successful. If so an AssertionResult
     * containing a FailureMessage will be returned. Otherwise the returned
     * AssertionResult will reflect the success of the Sample.
     */
    @Override
    public AssertionResult getResult(SampleResult response) {
        // no error as default
        AssertionResult result = new AssertionResult(getName());
        String resultData = response.getResponseDataAsString();

        if (resultData.length()==0) {
            return result.setResultForNull();
        }else{
            Gson gson = new Gson();
            if(!gson.toJsonTree(resultData).isJsonObject()){
                log.debug("Cannot parse result content"); // may well happen
                result.setFailure(true);
                result.setFailureMessage("ResultData is not Json");
            }
        }
        return result;

    }

    @Override
    public void threadStarted() {
    }

    @Override
    public void threadFinished() {
    }
}

2.2 src/components/org.apache.jmeter.assertions.gui下,新建JSONAssertionGui

public class JSONAssertionGui extends AbstractAssertionGui {

    private static final long serialVersionUID = 240L;

    /**
     * The constructor.
     */
    public JSONAssertionGui() {
        init();
    }

    /**
     * Returns the label to be shown within the JTree-Component.
     */
    @Override
    public String getLabelResource() {
        return "json_assertion_title"; // $NON-NLS-1$
    }

    @Override
    public TestElement createTestElement() {
        JSONAssertion el = new JSONAssertion();
        modifyTestElement(el);
        return el;
    }

    /**
     * Modifies a given TestElement to mirror the data in the gui components.
     *
     * @see org.apache.jmeter.gui.JMeterGUIComponent#modifyTestElement(TestElement)
     */
    @Override
    public void modifyTestElement(TestElement el) {
        configureTestElement(el);
    }

    /**
     * Inits the GUI.
     */
    private void init() {
        setLayout(new VerticalLayout(5, VerticalLayout.BOTH, VerticalLayout.TOP));
        setBorder(makeBorder());

        add(makeTitlePanel());
    }
}

3.配置properties文件

在src/core/org/apache/jmeter/resources/下的.properties文件中进行设置

4.Run As Java Application —>[New Driver]

5.JMeter运行后,新建项目进行验证

添加Assertion Listener,查看运行结果

关于新加功能的加载过程:

controllser、samplser、listener、assertion等内容,并不是在代码中new出来的,而是在jmeter启动时,通过扫描工作路径下的class,分析class类型,反射生成到jmeter中的。所以,在写完JSON Assertion的GUI之后,并不需要更改jmeter其他内容。具体的扫描反射过程,在org.apache.jmeter.testbeans.gui.TestBeanGUI中进行。

完整代码地址

https://github.com/buaawp/jmeter/tree/json_assertion

JMeter二次开发(2)-编写 JSON Assertion 插件的更多相关文章

  1. Jmeter二次开发——自定义函数

    在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...

  2. jmeter 二次开发

    基于jmeter的java请求的二次开发 常用的方法: ①.addArgument("name", "value")    定义参数 ②.sampleStart ...

  3. Jmeter二次开发——基于Java请求

    简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...

  4. JMeter二次开发(1)-eclipse环境配置及源码编译

    1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi   2.获取所需jar包,编译 ant download_jars ant instal ...

  5. 性能测试基础---jmeter二次开发

    ·Jmeter的二次开发,常见的有以下几种类型: ·扩展.修改Jmeter已有的组件(源代码) ·扩展.修改Jmeter已有的函数. ·完全自主开发一个新的组件(依赖于Jmeter提供的框架). ·扩 ...

  6. JMeter二次开发环境配置

    本文主要介绍如何在Eclipse中配置JMeter开发环境. 一.下载JMeter源码 1.在JMeter官网下载二进制包和源码包: 解压备用: 二进制解压后文件夹名称为“jmeter_release ...

  7. Jmeter二次开发

    Jmater函数扩展的步骤1. 导入Jmeter源码,或使用maven项目,引入依赖的jar包 2. 继承AbstractFunction,实现自定义Function 3. 继承JMeterTestC ...

  8. jmeter二次开发----Loadrunner或Jmeter发送邮件报告

    Loadrunner支持Java Vuser,而Jmeter本身就是基于Java开发的,所以两者都可以通过JMail组件实现邮件发送.本人使用的是mail-1.4.7.jar,可以通过下载获得:htt ...

  9. Jmeter二次开发之代码环境搭建(QQ交流群:577439379)

    一.创建项目 1. 分别下载apache3.1 binaries和source两个压缩包,前者为release版本,后者为jmeter最新的源码,下载地址:http://jmeter.apache.o ...

随机推荐

  1. 用Bouncy Castle的C#版API产生公钥和私钥

    开源API链接地址:The Legion of the Bouncy Castle Bouncy Castle,简称为BC,原本是java的一个开源JCE提供者,后来也提供了C#版本的API,我下载其 ...

  2. Redis容灾部署(哨兵Sentinel)

    Redis容灾部署(哨兵Sentinel) 哨兵的作用 1. 监控:监控主从是否正常2. 通知:出现问题时,可以通知相关人员3. 故障迁移:自动主从切换4. 统一的配置管理:连接者询问sentinel ...

  3. IntelliJ IDEA安装AngularJS插件

    Settings→Plugins→Install JetBrains plugins... 输入an后选择AngularJS,然后点击Install进行安装 按照提示重启IDEA 下图为插件管理窗口, ...

  4. bzoj2618: [Cqoi2006]凸多边形

    Description 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. Input 第一行有一个整数n,表示凸多边形的个数,以下依 ...

  5. Saltstack系列4:Saltstack之Grains组件

    grains说明 grains是Saltstack最重要的组件之一,grains的作用是手机被控主机的基本信息,这些信息通常都是一些静态类的数据,包括CPU.内核.操作系统.虚拟化等,在服务器端可以根 ...

  6. java.io.FileNotFoundException:SESSIONS.ser (系统找不到指定的路径。)

    问题如下: java.io.FileNotFoundException: E:\apache-tomcat-8.0.37\work\Catalina\localhost\20161013Shoppin ...

  7. PHP “Warning: session_start()...”、"correct (..\..\php5\Temp) in Unknown on line 0" 的解决方法

    运行php的时候出现了一下警告: Warning: Unknown: open(D:/Program Files/php5/temp1\sess_l5b1a48m6kmb1g0t5cs33690v0, ...

  8. (C#) 引用工程中发现有黄色叹号

    一个Project 引用 另外 一个Project 显示黄色叹号,后来发现 后一本Project的build设定为.Net4.5, 前一个为4.0, 将版本改为一致后,问题解决.

  9. PLSQL_Oracle簇表和簇表管理Index clustered tables(案例)

    2012-06-08 Created By BaoXinjian

  10. Tornado (and Twisted) in the age of asyncio》

    Tornado (and Twisted) in the age of asyncio>