JMeter二次开发(2)-编写 JSON Assertion 插件
本篇文章主要介绍如何对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 插件的更多相关文章
- Jmeter二次开发——自定义函数
在之前的博文中,Jmeter二次开发--基于Java请求,已介绍了Jmeter二次开发的基础情况,上次分享的是java请求开发,今天来分享下Jmeter中的函数开发.聊到Jmeter的函数,知道Jme ...
- jmeter 二次开发
基于jmeter的java请求的二次开发 常用的方法: ①.addArgument("name", "value") 定义参数 ②.sampleStart ...
- Jmeter二次开发——基于Java请求
简述 这近几年,越来越多非http的协议需要进行性能测试,包括不仅限于各类rpc.mq.缓存等.对于这些协议,市面上可能没有现成的工具可以直接使用,这个时候,我们可以自己动手,通过编写相应的JavaS ...
- JMeter二次开发(1)-eclipse环境配置及源码编译
1.下载src并解压 http://jmeter.apache.org/download_jmeter.cgi 2.获取所需jar包,编译 ant download_jars ant instal ...
- 性能测试基础---jmeter二次开发
·Jmeter的二次开发,常见的有以下几种类型: ·扩展.修改Jmeter已有的组件(源代码) ·扩展.修改Jmeter已有的函数. ·完全自主开发一个新的组件(依赖于Jmeter提供的框架). ·扩 ...
- JMeter二次开发环境配置
本文主要介绍如何在Eclipse中配置JMeter开发环境. 一.下载JMeter源码 1.在JMeter官网下载二进制包和源码包: 解压备用: 二进制解压后文件夹名称为“jmeter_release ...
- Jmeter二次开发
Jmater函数扩展的步骤1. 导入Jmeter源码,或使用maven项目,引入依赖的jar包 2. 继承AbstractFunction,实现自定义Function 3. 继承JMeterTestC ...
- jmeter二次开发----Loadrunner或Jmeter发送邮件报告
Loadrunner支持Java Vuser,而Jmeter本身就是基于Java开发的,所以两者都可以通过JMail组件实现邮件发送.本人使用的是mail-1.4.7.jar,可以通过下载获得:htt ...
- Jmeter二次开发之代码环境搭建(QQ交流群:577439379)
一.创建项目 1. 分别下载apache3.1 binaries和source两个压缩包,前者为release版本,后者为jmeter最新的源码,下载地址:http://jmeter.apache.o ...
随机推荐
- 08 Linux下MySQL的下载、安装及启动
测试环境 主机系统:Win7 64位 虚拟机:VMware® Workstation 11.1.0 虚拟机系统:CentOS 6.5 64位 Kernel 2.6.32-431.e16.x86_6 ...
- CSS设置DIV背景色渐变显示
本文转载自:http://blog.csdn.net/gingerredjade/article/details/12191741 <style type="text/css" ...
- Spring整合activiti-modeler5.16遇到的小问题
接上一篇整合activiti-modeler并成功创建model:Spring整合activiti-modeler5.16 之后,我尝试运用自定义的model部署流程,但是在部署的过程中又遇到了一 ...
- css设置背景图片,ie显示不了
本来是想给导航栏<div class="nav"></div>添加背景图片的,设置css样式如下: .nav{background:url("ht ...
- (C#) 判断相等?
值类型直接用 == 号判断就好. 但是对于引用类型,需要实现IComparable 接口,或者重写 Equal 方法,来实现自己的比较目的. 因为对于引用类型,==号比较的是入口地址,对于同一个cla ...
- ARM NEON 编程系列2 - 基本指令集
ARM NEON 编程系列2 - 基本指令集 前言 本系列博文用于介绍ARM CPU下NEON指令优化. 博文github地址:github 相关代码github地址:github NEON指令集 主 ...
- C4.5决策树算法概念学习
数据挖掘一般是指从大量的数据中自动搜索隐藏于其中的有着特殊关系性的信息的过程. •分类和聚类 •分类(Classification)就是按照某种标准给对象贴标签,再根据标签来区分归类,类别数不变. • ...
- ylbtech-Unitity-CS-Arrays:数组
ylbtech-Unitity-CS-Arrays:数组 1.A,效果图返回顶部 1.B,源代码返回顶部 1.B.1, using System; class DeclareArraysSampl ...
- 03.product.js
/* item.jd.com Compressed by uglify Author:keelii Date: 2014-08-05 6:52:26 [PM] */ function insertSc ...
- [ActionScript 3.0] AS3 3D星形贴图
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieCl ...