网站首页 > 精选教程 正文
百度搜索:小强测试品牌
背景:为什么要做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来驱动运行。
更多内容请关注微信公众号:测试帮日记
猜你喜欢
- 2024-11-04 使用JavaSnoop测试Java应用程序 java怎么测试程序
- 2024-11-04 java开发中常见编译报错和解决举例汇总
- 2024-11-04 Java单元测试技巧之JSON序列化 json序列化是什么意思
- 2024-11-04 2022最全java面试题及答案(208道)你能坚持到哪一道呢?
- 2024-11-04 Java 接口改造:UserTest 变 BaseTest,一键重构搞定
- 2024-11-04 自动化测试、回归测试平台调研,基于流量回放
- 2024-11-04 测试开发java常见面试题_Java常见面试题
- 2024-11-04 JAVA考试真题测试 java试题百度文库
- 2024-11-04 使用Jtest 2022.2简化严格的Java测试
- 2024-11-04 如何用TestNG进行java单元测试? java怎么单元测试
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)