本篇文章主要介绍如何对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. Angular学习(8)- directive

    <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 9</ti ...

  2. 安卓ROOT后禁用/隐藏导航栏/虚拟按键

    安卓ROOT后禁用/隐藏导航栏/虚拟按键 提醒:提前装好EASY TOUCH 等类似工具. 用ROOT EXPLORER 或 ROOT BROWSER system\bulid.prop 最后加一行: ...

  3. PHP析构函数与垃圾回收

    析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行. GC (Garbage Collector) 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾.PHP会将其在内存中销毁.这是PHP ...

  4. String、StringBuffer、StringBuilder之间的区别

    String                      字符串常量 StringBuffer         字符串变量(线程安全) StringBuilder       字符串变量(非线程安全) ...

  5. Python 通过pickle标准库加载和保存数据对象

    import pickle with open('mydata.pickle','wb') as mysavedata: pickle.dump([1,2,'three'], mysavedata) ...

  6. C#读取系统信息

    using System; using System.Management; namespace Soyee.Comm { /// <summary> /// Computer Infor ...

  7. SVN代码回滚命令之---merge的使用

    一.改动还没被提交的情况(未commit) 这种情况下,见有的人的做法是删除work copy中文件,然后重新update,恩,这种做法达到了目的,但不优雅,因为这种事没必要麻烦服务端. 其实一个命令 ...

  8. Java compiler level does not match the version of the installed Java project facet. springmvc1 和 Target runtime Apache Tomcat v7.0 is not defined.

    Java compiler level does not match the version of the installed Java project facet.springmvc1 : Targ ...

  9. DBA_Oracle Erp R12中文补丁安装升级(案例)

    2014-07-11 Created By BaoXinjian

  10. MVC项目发布错误

    下面各个方法尝试采用: 重装Framework 32位的Windows: --------------------------------------------------------------- ...