一、变量的定义与引用
1、怎么命名变量名称
建议使用 字母、数字或下划线(不要使用数字开头)
2、用户定义的变量
全局变量,可以跨线程组被引用,在脚本启动运行时,获取一次值,在运行过程中,不会动态获取值
3、用户参数
局部变量,启动脚本时获取一次值,在运行过程中,还会动态获取值
4、引用
${变量名称}
二、函数
函数(双下划线开头+函数名称+小括号+参数间使用英文逗号)
java中的方法
Jmeter的函数
Jmeter自带函数:在函数助手中可以直接使用
扩展函数:需要引入第三方jar包,才能在函数助手中找到和使用,但有些找不到文档
Tools -> 函数助手 -> 选择函数 -> 生成函数
用法:字符串直接跟上函数 相当于字符串的连接 ,例如 182$...
思考:在做性能测试时,我们要注册用户,每次注册的账号都是不一样的,然后我想要用新注册的账号去登录,我怎么让新注册的账号,能登陆成功?
实验一:采用用户定义的变量,因为它只获取一次值,但只有第一次成功,但多次使用时,会出现注册不了的情况:
如果在线程组下面,直接添加用户自定义变量 用户参数 (值使用随机函数,动态生成),实际满足不了要求(用户定义变量注册成功一次,后面的用户登录不了;用户参数注册成功没登陆失败)
实验二:如果把用户参数放在注册接口下面,则每次注册的账号都不一样,注册都能成功,登录,于注册的账号一致,每次也都能登录成功了 可采用该方式
实验三:如果把用户定义变量放在注册接口下面,不能满足要求
实验四:如果把用户参数,放在线程组下面,同时,勾选用户参数中的【每次迭代更新一次】可采用该方式
每次注册的号码都发生了变化,注册都成功,注册和登录,在一个线程组下面,是1个迭代整体,两个接口都执行完才完成1次完整的迭代,所以,在一个迭代内部,我们注册和登录用户的账号是同一个账号,所以,也能成功
迭代一次 VS 循环一次
迭代一次:是线程组下所有的取样器执行完1次
循环一次:只是对其内部循环体进行循环,不包含外部循环
1、随机函数 __Random
2、计数器函数 __counter VS 计数器元件
只能实现简单加1
如果想要自定义步长的加减法,需要使用配置原件>计数器元件
计数器元件
自定义步长
设置了最大值,当运行过程中超过了最大值,就会从起始值开始循环
【与每个用户独立跟踪计数器】每个线程都有自己独立的计数器
3、读取CSV函数 __CSVRead VS CSV文件设置
只能实现简单的读取,不建议使用
4、时间函数
(1)时间格式转换 __dateTimeConvert
(2)随机日期函数 __RandomDate
(3)当前时间戳获取 __time
(4)时间偏移函数 __timeShift
5、加密函数 __digest
要实现复杂加密,需要写代码,但不要使用beanshell,因为性能低,请使用jsr223元件
jsr223支持多种语言,如python2、js、java等
需要引入加密的算法jar包时,需要开发提供,并放到jmeter的lib文件夹下
6、整数3加法运算 __intSum
7、运行简单代码的函数 __grocvy VS __jexl3
8、获取属性函数 __P VS __property
9、设置属性函数 __setProperty
属性:.properties结尾的文件
静态属性
动态属性
10、拼接函数 __V
我定义了 user_1 user_2 user_3 三个变量
我想在脚本中,循环的时候,依次使用这三个变量的值
可能会想到拼接的方式,如${user_$m},但这种方式不生效
解决上述问题可以这样使用: ${__V(user_ ${m},)}
三、关联
1、如果想要从响应信息为json格式的数据中提取出想要的数据,请优先选择json后置处理器
2、后置处理器,对响应数据进行处理
常用:json提取器、正则提取器
3、json表达式
$ 开头,接上节点名称,多个节点之间用英文 “.” 连接 (绝对值写法)
$.. 节点名称 (相对路径写法)
4、关联
指的是前一个请求的动态响应值,作为后续接口的传入参数