前言
在jmeter中提供了功能强大的内置函数来帮助我们处理字符串、文件读写、计算、运行外部脚本等等能力。
要想在项目中切实运用来jmeter完成复杂的压测场景,函数和变量是必须掌握的高阶能力。
下面我们就函数和变量进行一一讲解。
函数
我们在哪可以知道jmeter支持哪些函数呢?通过在菜单 “选项” -> "函数助手对话框" 即可打开函数助手。
通过函数助手,我们可以快速的填充对应的参数来生成我们所需要的函数。
下面我们看一下函数调用示例说明:
${__functionName(param1, param2, param3)}
说明:
functionName: 指jmeter内置函数名称
param1, param2, param3: 指该函数调用时需要传入的参数
变量
在使用变量前,必须先定义变量,而定义变量有两个地方。
方式一是在测试计划的用户定义的变量处进行定义,如下图
方式二是“配置元件”中的“用户定义的变量”来进行定义,入下图
定义了变量,怎么引用呢? 下面我们展示下引用格式:
${VARIABLE}VARIABLE: 定义的变量名称
引用前面定义的username、password则是
${username}${password}
同样的道理,引用用户定义的变量组件中定义的host、port、count则是
${host}${port}${count}
下面我们看下如何把函数和变量结合一起应用的简单示例,如下图所示,先定义变量:
使用前面定义的变量,来参数化,HTTP请求相关参数:
看下请求结果:
函数列表
下面我们看下jmeter提供的所有内置函数的功能说明及使用示例。
总计七大类型。类型如下:
- 信息类: 用于读取线程、请求名等
- 输入类: 用于读取文件等
- 计算类: 用于计数、求和等
- 脚本类: 用于运行各类脚本,例如groovy、beanshell等等
- 属性类: 读取或设置jmeter配置
- 变量类: 用于对变量进行操作
- 字符串类: 用于字符串处理
信息类
主要用于获取一些常用的基本信息或是日志输出控制。
序号 |
函数名 |
描述 |
1 |
threadNum |
获取线程数 |
2 |
samplerName |
获取当前请求的名称(标签) |
3 |
machineIP |
获取本机的IP地址 |
4 |
machineName |
获取本机的名称 |
5 |
time |
返回指定格式的当前时间 |
6 |
log |
日志输出,并返回它的输入字符串 |
7 |
logn |
日志输出,并返回空字符串 |
输入类
主要用于从外部文件读取数据,进行参数化或是说关联
序号 |
函数名 |
描述 |
1 |
StringFromFile |
从文件读取一行数据 |
2 |
FileToString |
读取整个文件数据 |
3 |
CSVRead |
读取csv格式文件数据 |
4 |
XPath |
使用xpath读取xml文件中的数据 |
计算类
主要用于计算或是随机生成数据
序号 |
函数名 |
描述 |
1 |
counter |
生成一个自增数 |
2 |
intSum |
整数求和 |
3 |
longSum |
长整数求和 |
4 |
Random |
生成一个随机数 |
5 |
RandomFromMultipleVars |
从一组数据中提取一个数据 |
6 |
RandomString |
生成随机字符串 |
7 |
UUID |
生成随机的唯一的UUID |
脚本类
主要用于调用外部脚本或是解析执行脚本
序号 |
函数名 |
描述 |
1 |
groovy |
执行groovy脚本 |
2 |
BeanShell |
执行BeanShell脚本 |
3 |
javaScript |
执行javascript脚本 |
4 |
jexl2 |
执行jexl2表达式 |
5 |
jexl3 |
执行jexl3表达式 |
属性类
用于读取和设置jmeter配置
序号 |
函数名 |
描述 |
1 |
property |
读取属性值 |
2 |
P |
读取属性值(property简写方法) |
3 |
setProperty |
设置属性值 |
变量类
主要用于验证变量表达式引用是否正确
序号 |
函数名 |
描述 |
1 |
split |
通过分隔符来拆分传递给它的字符串,并返回原始的字符串。 |
2 |
V |
执行变量名表达式并返回结果 |
3 |
eval |
执行字符串表达式,并返回结果 |
4 |
evalVar |
执行保存在变量中的表达式,并返回结果 |
字符串类
用于字符串操作
序号 |
函数名 |
描述 |
1 |
regexFunction |
使用正则表达式来解析之前的响应内容 |
2 |
escapeOroRegexpChars |
用于转义正则表达式中的字符 |
3 |
char |
将一串数字转换成unicode字符值,并返回 |
4 |
unescape |
用于反转义java-escape字符串,并返回 |
5 |
unescapeHtml |
解码hmlt-encoded字符串 |
6 |
escapeHtml |
使用html coding编码目标字符串 |
7 |
escapeXml |
使用xml coding编码目标字符串 |
8 |
urldecode |
解码Application/x-www-form-urlencoded字符串 |
9 |
urlencode |
将字符串编码为Application/x-www-form-urlencoded格式 |
10 |
TestPlanName |
获取当前测试计划名称 |
必须掌握的函数
在上述内容中,并没有把所有的函数都一一列出来,但基本把个大类中主要的函数都已列出,需要大家对其有个基本印象,知道有哪些内置函数,这些函数能解决什么问题,以便在实际项目中走太多弯路。
下面把笔者在实际项目中常用的函数重点列出来。我想这也是大家在项目中常用的,也是重点掌握的,必须熟练能熟练的应用。
注:在本篇中不进行示例讲解,后续实战专题在分享。
从文件读取数据,进行参数化
- StringFromFile
- CSVRead
- XPath
脚本支持
- BeanShell(推荐这个)
- groovy
随机数据生成
- RandomString
- UUID
字符串处理
- urldecode
- urlencode
- char
注:并不是其他函数不重要,而是上述函数是笔者日常项目实践中用得最为频繁,建议必须掌握的。
总结
本文就jmeter函数和变量进行了分享,这是进一步掌握jmeter必备的技能。也是在项目实践中进行参数化、关联必备的技能。对于所有函数要做到心中有数,对于关键重点的函数要做到随时会用,灵活应用