基于项目需求开发JMeter插件
来源:互联网 发布:域名注册查询工具 编辑:程序博客网 时间:2024/06/05 19:12
前言
由于项目的接口并非传统的HTTP或者socket请求,建立socket长连接以后,开发使用自己代码对包头和包体进行加密,并约定成协议号,而我们需要根据这个协议号,通过开发的源码把包头和包体进行加密,再传到服务器,才能得到我们想要的返回结果。我们可以通过开发脚本来对每个接口进行测试,测试接口工作是否正常,但是如何对这些接口进行压力测试。
工具引入
引入JMeter的原因是它是一个开源的纯Java桌面应用程序,也就是说,我们可以自己来开发插件,满足性能测试的需要,但是由于JMeter是一个纯Java的程序,所以插件只支持Java语言,所以必须在Java环境下面开发JMeter的插件。
插件开发
通过Eclipse新建一个Java项目,导入JMeter的两个包,ApacheJMeter_core.jar和ApacheJMeter_java.jar,src目录下面新建一个包,包名按需定义,包下面新建一个类,类的代码如下
package jmeter_socket;import org.apache.jmeter.config.Arguments;import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;import org.apache.jmeter.samplers.SampleResult;/*****继承JMeter暴露出来的抽象类,并重写该抽象类中的以下方法,这是开发插件前提**/public class TestSocket extends AbstractJavaSamplerClient { private String protocol; private String host; SampleResult results; /** ***测试开始前的准备工作,比如设置测试需要多少参数 */ @Override public void setupTest(JavaSamplerContext arg0) { protocol = arg0.getParameter("protocol"); //JMeter需要调用的参数 host = arg0.getParameter("host"); } /** ***获取传入的参数,JMeter界面上显示的需要输入的参数值 */ @Override public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("host", ""); params.addArgument("protocol", ""); return params; } /** ***测试的主要方法 */ @Override public SampleResult runTest(JavaSamplerContext arg0) { Main cs = new Main(); results = new SampleResult(); //实例化测试结果 String SignInResult = ""; results.sampleStart(); //测试开始 //下面这个方法是建立服务器的Socket连接,并加密传入的包头和包体的方法 SignInResult = cs.getSocketBody(host, Integer.parseInt(protocol)); results.sampleEnd(); //测试结束 System.out.println(results.getResponseCode()); //下面是判断测试成功或者失败,我这里写的是从服务器得到的返回内容如果为空,则接口测试失败,返回不为空,则测试成功。 if (SignInResult.isEmpty()) results.setSuccessful(false); else results.setSuccessful(true); results.setResponseMessage(SignInResult); return results; } //测试结束需要运行的 @Override public void teardownTest(JavaSamplerContext context) { }}
下面是后台约定的协议号和加密的过程
每个协议都对应其加密包头和包体的过程,然后返回服务器的应答内容。
public String getSocketBody(String host, int protocol) { this.host = host; String resBody = ""; switch (protocol) { case 1802: resBody = Protocol1802(); break; case 4200: resBody = Protocol4200(); break; case 4201: resBody = Protocol4201(); break; case 4202: resBody = Protocol4202(); break; case 4203: resBody = Protocol4203(); break; case 4205: resBody = Protocol4205(); break; case 4206: resBody = Protocol4206(); break; case 4207: resBody = Protocol4207(); break; case 4212: resBody = Protocol4212(); break; case 4213: resBody = Protocol4213(); break; case 4220: resBody = Protocol4220(); break; case 4223: resBody = Protocol4223(); break; case 4225: resBody = Protocol4225(); break; case 4226: resBody = Protocol4226(); break; case 4400: resBody = Protolcol4400(); break; case 4410: resBody = Protolcol4410(); break; case 4411: resBody = Protolcol4411(); break; case 4401: resBody = Protolcol4401(); break; case 4402: resBody = Protolcol4402(); break; case 4403: resBody = Protolcol4403(); break; case 4404: resBody = Protolcol4404(); break; case 4405: resBody = Protolcol4405(); break; case 4406: resBody = Protolcol4406(); break; case 4407: resBody = Protolcol4407(); break; case 4408: resBody = Protolcol4408(); break; case 4409: resBody = Protolcol4409(); break; case 5003: resBody = Protocol5003(); break; case 5033: resBody = Protocol5033(); break; case 5067: resBody = Protocol5067(); break; case 5071: resBody = Protocol5071(); break; } return resBody; }
部署JMeter源码开发环境,调试开发的插件
在官网下载JMeter源码apache-jmeter-2.13_src.zip和发布版本apache-jmeter-2.13.rar,解压后保存在本地。
在Eclipse中新建一个项目,点击下一步,勾选”Allowoutput folders for source folders”,防止导入源码时把bin目录做为输出目录给清理掉。点击”Finish”,完成新项目的创建。点击”Import“选择General-FileSystem,从文件系统导入源码。在源码目录下把eclipse.classpath中的内容复制到新建的项目的.classpath文件中。在新项目的lib目录下,新建api目录,存储bcmail-jdk15on-1.49.jar、bcpkix-jdk15on-1.49.jar、bcprov-jdk15on-1.49.jar三个jar包。把发布版本的lib目录下所有jar包拷贝到新项目的lib目录下。在新项目下,用ant执行build.xml文件,生成相应jar包,若build失败,请用command命令在新项目下面执行”ant download_jars“,再用ant执行一次build.xml。
新项目的目录结构为
修改新项目的Run Configuration的Arguments配置中Working directory为${workspace_loc:%{新项目名}/bin}。
调试插件
将开发的插件项目导出成jar文件并放到新项目的”lib/ext“文件夹下面
右键点击新项目,Run As Java Application,选择NewDriver类,即可运行JMeter,在JMeter的界面中新建一个线程组,在线程组下面新建一个Java请求的Sampler,即可看到开发的插件
执行测试在查看结果树中可以看到取样器结果。
这里显示的Response Message正是我们所想要的返回内容,插件测试成功,当然,如果插件有问题,也可以通过调试的模式调试插件。
JMeter基于项目需求开发插件基本就完成了,这里有个问题,就是我的结果树中的请求和响应数据均为空,跟一般的HTTP请求的结果是不一样的,还望高手告知如何把请求内容放在请求界面,以及Response message放到响应数据界面中。
- 基于项目需求开发JMeter插件
- Jmeter开发插件分享
- jmeter插件开发
- Jmeter开发Sampler测试插件
- 基于Jmeter的MQTT测试插件-上
- 关于基于插件式开发的软件项目
- jmeter - 开发java插件,进行测试
- 基于Jmeter开发性能自动化测试平台
- 项目开发的需求分析
- 网站开发项目需求分析
- 项目开发系列 -- 需求评审
- 浅析软件项目需求开发
- OA项目管理开发需求
- 基于NPAPI插件开发
- jmeter插件
- jmeter环境需求
- 如何为Apache JMeter开发插件(二)——第一个JMeter插件
- 软件项目需求开发过程实践之软件需求说明书
- 色情图片识别
- android ListView 几个重要属性
- JAR命令&JAR包详解
- 高德地图开发【覆盖物显示——Marker的使用(一)】
- android 键盘与输入框问题
- 基于项目需求开发JMeter插件
- oracle 中clob数据在Java类 里sql处理
- HTTP响应头和请求头信息对照表
- 我的第一篇博客
- jmeter测试脚本
- Triangle
- cocoapods导入Nimbus库报错
- 关于位运算——状态压缩DP预备知识
- java基础