解锁JMeter(三)——JMeter自带函数与自定义函数

Git Parameter

阅读本文大约需要10分钟

自带函数

JMeter提供了丰富的函数,编写脚本过程中可以直接使用,便于生成指定类型数据。但是,JMeter提供的函数虽然众多,编写脚本的时候却不会像IDEA一样输入首字母就可以智能地提示方法名及入参等,也因此误以为JMeter的函数很难使用。然而,事实不是这样子的。JMeter提供了函数助手对话框,使用者可以快速找到场景合适的函数以及输入入参后自动生成调用代码。

首先,我们先看一下函数对话框的打开方式,总共有3种:

1.点击工具栏图标

Git Parameter

2.点击菜单栏菜单

Git Parameter

3.默认快捷键: Ctrl+Shift+F1

打开函数助手对话框之后,可以选择合适的功能,根据提示填入函数参数,然后点击“生成按钮”,即会生成函数的调用代码以及函数的调用结果,将函数调用结果拷贝至需要的脚本处即可。

Git Parameter

比如,可以将生成0-100之间的随机数函数填写到上一节(JMeter自定义JavaSampler)的入参中

Git Parameter

测试结果如下:

Git Parameter

自定义函数

即使JMeter自带了丰富的函数,可以满足大部分场景需求。也偶尔存在一些没有已有函数能支持的场景,此时,自定义函数就因运而生了。

代码工程

同上一节(JMeter自定义JavaSampler)一致,但需要增加ApacheJMeter_functions的依赖。如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_functions</artifactId>
<version>${jmeter-version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>

代码实现

新建类,如RadomName,继承AbstractFunction,并重写以下方法。
为让读者更好地理解重写的方法,此处先提供RadomName定义的成员变量。

1
2
3
4
5
6
7
8
9
final String FUNCTION_NAME = "_RadomName";
final String ARG_1_DESC = "Your family Name";
final String ARG_2_DESC = "Boy or Girl";
final int ARG_COUNT = 2;
Object[] objects;
List<String> girlNames = Arrays.asList("Abby", "Aline", "Daryl", "Lauren", "Dove", "Sally", "Ophelia", "Maggie", "Tania", "Theresa");
List<String> boyNames = Arrays.asList("Felix", "Fox", "Keith", "Edison", "Egan", "Evan", "Jack", "Jasper", "Nash", "Major");
String sex;
String familyName;

1.getReferenceKey

1
2
3
4
@Override
public String getReferenceKey() {
return FUNCTION_NAME;
}

获取函数名称,函数助手对话框中,下拉框中显示的名称,同时也勇于测试脚本调用的函数名。

2.getArgumentDesc

1
2
3
4
5
@Override
public List<String> getArgumentDesc() {
List<String> argumentDesc = Arrays.asList(ARG_1_DESC, ARG_2_DESC);
return argumentDesc;
}

设置入参的描述语,用于函数助手对话框中,显示函数名称提示。

3.setParameters

1
2
3
4
5
6
7
@Override
public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
checkParameterCount(collection, ARG_COUNT);
objects = collection.toArray();
familyName = ((CompoundVariable)objects[0]).execute().trim();
sex = ((CompoundVariable)objects[1]).execute().trim();
}

获取函数参数,对应函数助手对话框中,传入的参数值。

4.execute

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Override
public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
Random ra = new Random();
int nameCount = 0;
switch (sex) {
case "Girl":
nameCount = girlNames.size();
return girlNames.get(ra.nextInt(nameCount)) + " " +familyName;
case "Boy":
return boyNames.get(ra.nextInt(nameCount)) + " " + familyName;
default:
return "Anonymous " + familyName;
}
}

函数执行的实现逻辑写在这个方法中,返回的值即是函数最终的返回结果。

jar包生成及引用

jar包生成依然同上一节(JMeter自定义JavaSampler)一致,但引用jar包时,只能放在%JMETER_HOME%\lib\ext路径下。

调用示范

同自带函数一样,可以通过函数助手对话框生成示例代码。

Git Parameter

然后,将随机生成名字的函数填写到上一节(JMeter自定义JavaSampler)的示例入参中。

Git Parameter

查看结果:

Git Parameter

从结果可见,自定义的函数已经生效。