JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

jmeter二次开发 jmeter二次开发Http组件

wys521 2024-11-04 15:37:20 精选教程 28 ℃ 0 评论

百度搜索:小强测试品牌

背景:为什么要做JMeter的二次开发及插件开发

前提:主要针对于JAVA请求或者应用

有时候我们的协议不是标准的

有时候我们希望我们的功能/性能测试能够更加的细化,那么我们有可能需要模拟开发实现环节中的每一步都进行单独的性能测试,以得到更加客观的测试结果

有时候我们为了借助JMeter的开发框架来完成一个自己的插件或者满足自定义的测试需求

有时候,我们不仅希望JMeter只是一个性能测试工具

Web page:http://jmeter-plugins.org/

学习建议:

熟悉JMeter的使用和其独有的概念定义(thread, controller,sampler,processeor,assertion,listener)

下载JMeter源码(当前最新为:apache-jmeter-2.11)

下载一个Jmeter编译后的完整工具应用,您还需要注意里面很多有用的东西(docs, printable_docs路径下,值得去看看)对了,如果你想看看别人是怎么实现插件的,建议装一个JAVA反编译器,去JMeter的ext文件下,那里有很多灵感。JMeter自带了一个插件开发文档,但是讲解不是很清晰而且有点过时了。

插件开发实现方式:目前有两种方式实现

利用JavaBean绑定机制(JMeter中叫TestBean),不需要设置UI的布局,只需要给需要的UI设置必要的属性,由JMeter自动渲染UI实现层。

直接继承JMeterGUIComponent接口的抽象实现类(要求掌握相关的JAVA Swing的基础知识)

推荐web page: http://jolestar.com/jmeter-plugin-develop/

注:本文档以JMeter工具目录中的jmeter_tutorial.pdf的例子为例,展开插件开发介绍。

Bean方式插件开发(傻瓜式讲解):

JMeter中的原始工具名:Config Element/CSV Data Set Config

源码中的位置:

/apache-jmeter-2.11/src/components/org/apache/jmeter/config/CSVDataSet.java

/apache-jmeter-2.11/src/components/org/apache/jmeter/config/CSVDataSetBeanInfo.java

/apache-jmeter-2.11/src/components/org/apache/jmeter/config/CSVDataSetResources.properties

CSVDataSet.java--- 开发步骤

因为是一个Config组件,因此此类必须extends ConfigTestElement

因为采用bean模式制作插件,所以需要implements TestBean

值得注意的是,JMeter中有一个叫JMeterContext缓存器,用于储存该线程中的所有测试信息和一些变量,很多插件开发中都需要用到这个关键的类。

每个组件一般都需要JMeter去监控(目的在于控制和反馈信息),所以一般都需要implements一个监视器,本例中由于需要迭代执行读取CSV文件中的每一行内容,因此继承了LoopIterationListener接口,继承此接口后,必须要去重写方法iterationStart(LoopIterationEvent iterEvent),具体实现方法不在此处解释。

5.配置项变量定义 ,如:“private transient String fileEncoding;” 对应于JMeter上的Csv Data Set Config中File encoding的变量名,用于存储来源于用户设置的编码格式,我修改了默认显示,为“UTF-8”,那么变量从CSV文件中读取后的格式全部采用UTF-8格式。

6.实现配置项的读取和设置,如:

public String getFileEncoding() {

return fileEncoding;

}

public void setFileEncoding(String fileEncoding) {

this.fileEncoding = fileEncoding;

}

依此类推,每一个类变量都需要实现如上的getter/setter方法,注意返回值类型的调整。

背景:为什么要做JMeter的二次开发

前提:主要针对于JAVA请求或者应用

有时候我们的协议不是标准的

有时候我们希望我们的功能/性能测试能够更加的细化,那么我们有可能需要模拟开发实现环节中的每一步都进行单独的性能测试,以得到更加客观的测试结果

有时候我们为了借助JMeter的开发框架来完成一个自己的插件或者满足自定义的测试需求

Super(CSVDataSet.Class),目的是调用BeanInfoSupport的构造函数,将CSVDataSet中的属性值传递到CSVDataSetBeanInfo中。

设置UI中的各项元素的属性,如设置CSV Path:

PropertyDescriptor p = property(FILENAME);

p.setValue(NOT_UNDEFINED, Boolean.TRUE);

p.setValue(DEFAULT, ""); //$NON-NLS-1$

p.setValue(NOT_EXPRESSION, Boolean.TRUE);

6:设置CSVDataSetResources.properties 这部分很简单,需要注意的是,properties属性文件中的属性头必须和CSVDataSetBeanInfo中属性名下对应的属性值一致,如private static final String FILENAME = “filename”;则在CSVDataSetResources.properties中必须为filename.displayName=Filename

7:其他properties文件,如CSVDataSetResources_zh_TW.properties,是支持中文繁体现实的属性文件,Unicode编码,如需转换,有很多在线转码工具可供使用。

7:最后需要强调的是:所有TestBean模式开发的JMeter插件的文件必须满足以下命名规则:

[ComponentName].java

[ComponentName]BeanInfo.java

[ComponentName]Resources.properties

[ComponentName]Resources_zh_TW.properties(中文繁体)

自定义协议实现思路

1: 新建一个你自己的JAVA测试类,并且继承 AbstractJavaSamplerClient 抽象类

2: 分别重写方法 (因为具体实现需求不统一,在此处不做具体描述)

getDefaultParameters()

setupTest()

runTest()

teardownTest()

3:新写的JAVA测试类打包成一个JAR包,在JMeter中用JAVA Request来驱动运行。

更多内容请关注微信公众号:测试帮日记

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表