JMeter函数和变量11

前言

在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必备的技能。也是在项目实践中进行参数化、关联必备的技能。对于所有函数要做到心中有数,对于关键重点的函数要做到随时会用,灵活应用

原文发布于微信公众号 - 开源优测(DeepTest)

原文发表时间:2017-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

golang的内存模型与new()与make()

要彻底理解new()与make()的区别, 最好从内存模型入手. golang属于c family, 而c程序在unix的内在模型: |低地址|text|dat...

6.4K70
来自专栏企鹅号快讯

Go 系列教程——8.if-else 语句

这是我们 Golang 系列教程的第 8 篇。 if 是条件语句。if 语句的语法是 如果 为真,则执行 和 之间的代码。 不同于其他语言,例如 C 语言...

216100
来自专栏北京马哥教育

只需9个步骤,完美实现自动化运维异常处理!

1异常 异常就是非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,程序的执行过程就会发生改变,抛出异常对象,程序流进入异常处...

32250
来自专栏大内老A

ASP.NET Web API的Controller是如何被创建的?

Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对...

42950
来自专栏王磊的博客

web.config中配置字符串中特殊字符的处理

配置文件中往往要用到一些特殊的字符,                Web.Config默认编码格式为UTF-8,对于XML文件,要用到实体转义码来替换。对应...

44340
来自专栏程序员宝库

JavaScript 深拷贝性能分析

作者:justjavac 链接:https://segmentfault.com/a/1190000013107871 如何在 JavaScript 中拷贝一个...

461130
来自专栏Pulsar-V

CTF随笔(二)

##PWN001 ssh fd@pwnable.kr -p2222 (pw:guest) 送分题 ? #include <stdio.h> #includ...

31060
来自专栏我爱编程

Day14IO编程

读文件 Python引入了with语句来自动帮我们调用close()方法: with open('/path/to/file', 'r') as f: ...

33350
来自专栏chenssy

【死磕Java并发】—–Java内存模型之重排序

在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改...

26660
来自专栏desperate633

深度解析Java多线程的内存模型内部java内存模型硬件层面的内存模型Java内存模型和硬件内存模型的联系小结

Java内存模型很好的说明了JVM是如何在内存里工作的,JVM可以理解为java执行的一个操作系统,作为一个操作系统就有内存模型,这就是我们常说的JAVA内存模...

8010

扫码关注云+社区

领取腾讯云代金券