JMeter二次开发插件实例
时间:2022-07-22
本文章向大家介绍JMeter二次开发插件实例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
很多人面试时候被问,有没有做过JMeter一些插件,不少人一头雾水,其实这个本身并不难,根据我下面介绍就能完成。
1.首先看下JMeter5.3的代码结构,这个只需要了解下就可以了;
解析:
Bin:执行文档,配置文件
Lib:依赖包
Src:源码
1)components—包含与协议无关的组件,如可视化、断言等等。
2)core —JMeter的核心代码,包括所有的核心接口和抽象类。
3)examples —演示采样器如何使用新bean框架的例子。
4)functions —所使用的组件的标准功能。
5)jorphan—提供常见实用功能的实用工具类
6) protocol—包含了JMeter支持的不同协议(ftp http、tcp—socket协议,没有webservice)
2 JMeter运行原理
3 JMeter二次开发插件
新建一个maven项目:
注意点新建的包名是固定的functions,否则之后放入JMeter不能识别,如图示意:
这里我做一个生成电话号码的插件:
Pom .xml文件配置:
<?xml version="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.3</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.3</version>
</dependency>
</dependencies>
<build>
<defaultGoal>compile</defaultGoal>
</build>
</project>
代码:
package com.functions;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.apache.jmeter.engine.util.CompoundVariable;
importorg.apache.jmeter.functions.AbstractFunction;
importorg.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.threads.JMeterVariables;
public class PhoneNumber extends AbstractFunction {
//定义function名称
private static final StringKEY = "__cctesterMobile";
private static finalList<String> desc = new LinkedList<String>();
private static final String[]telFirst = "134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");
//自定义function描述
static{
desc.add(JMeterUtils.getResString("Nameof variable in which to store the result (optional)"));
}
private CompoundVariable varName;
//执行部分
@Override
public Stringexecute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException{
int index =getNum(0,telFirst.length - 1);
String first = telFirst[index];
String second = String.valueOf(getNum(1, 888) + 10000).substring(1);
String third = String.valueOf(getNum(1, 9100) + 10000).substring(1);
String mobile = first + second + third;
if (varName != null) {
JMeterVariables vars =getVariables();
final String varTrim= varName.execute().trim();
if (vars != null&& varTrim.length() > 0) {
vars.put(varTrim, mobile);
}
}
return mobile;
}
//设置参数
public voidsetParameters(Collection<CompoundVariable> parameters)throwsInvalidVariableException
{
checkParameterCount(parameters, 0, 1);
Object[] values =parameters.toArray();
if (values.length > 0) {
varName = (CompoundVariable)values[0];
} else {
varName = null;
}
}
/** {@inheritDoc} */
@Override
public StringgetReferenceKey() {
return KEY;
}
/** {@inheritDoc} */
public List<String>getArgumentDesc() {
return desc;
}
private static int getNum(int start,int end)
{
return (int)(Math.random()*(end-1));
}
}
将工程打包后,放到jmeter的lib下ext中
重启jmeter看下函数助手:
这样一个简单的插件就完成了,本身并不难哦!
持续关注cctester,更多展现;
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP设计模式之解释器(Interpreter)模式入门与应用详解
- Laravel 实现在Blade模版中使用全局变量代替路径的例子
- PHP实现关键字搜索后描红功能示例
- 如何在CentOS中安装PHP7.4的方法步骤
- Linux安装Python3如何和系统自带的Python2并存
- Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
- PHP学习记录之常用的魔术常量详解
- laravel orm 关联条件查询代码
- PHP实现财务审核通过后返现金额到客户的功能
- Laravel框架中的路由和控制器操作实例分析
- php利用array_search与array_column实现二维数组查找
- Python实现手绘图效果实例分享
- php如何把表单内容提交到数据库
- Laravel5.5 视图 – 创建视图和数据传递示例
- 浅谈Python爬虫原理与数据抓取