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 ...
随机推荐
- ios外包公司——技术分享:IOS开发教程
iOS入门培训,适合已经有C/C++/Java/C#基础的人学习. 本大仙主讲,总共4讲(第4讲尚在制作中),这仅仅是iOS开发的入门而已.学完本教程,应该已经足够你自学并开发app了. ...
- Windows 7无线网卡启用wifi共享蓝屏!
我的笔记本是联想Y460P,装的是Windows 7 Ultiame(x64)系统,通过设置笔记本的无线(Intel WiFi Link 1000 BGN)搭建Wifi环境并共享,使手机能够通过笔记本 ...
- 通过FTP自动上传当天的备份数据
@echo off del f:\ftpcfg.txt echo open 192.168.123.2>f:\ftpcfg.txt echo WMS>>f:\ftpcfg.txt e ...
- TSP(旅行者问题)——动态规划详解(转)
1.问题定义 TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短. 假设现在有四个城市,0,1,2,3,他们之间的代价如图一,可以存成 ...
- 黄聪:VS2010开发T4模版引擎之基础入门
原文:http://www.cnblogs.com/lzrabbit/archive/2012/07/15/2591085.html 额,T4好陌生的名字,和NuGet一样很悲催,不为世人所熟知,却又 ...
- PLSQL_Oracle簇表和簇表管理Index clustered tables(案例)
2012-06-08 Created By BaoXinjian
- RabbitMQ介绍3 - 运行和管理RabbitMQ
安装.官方介绍:http://www.rabbitmq.com/download.html.一般产品环境会部署到Linux环境,但做为简单尝试,可以部署到Windows上(这里是部署介绍:http:/ ...
- jquery实现的下拉和收缩代码实例
<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta ...
- 文件下载(只需要简单的四步),Java中都通用
我们就直接切入主题啦,文件下载只需要四步: 1.设置文件ContentType类型 2.设置文件头 3.通过response获取ServletOutputStream对象(out) 4.写到输出流(o ...
- php读取数据库数据,出现中文乱码(数据库中没有出现乱码)
添加header(“content-type: text/html; charset=utf-8”) php header() 函数向客户端发送原始的 HTTP 报头, 认识到一点很重要,即必须在任何 ...