目录
0、JMeter支持的变量和属性?
-
变量:
-
①、可以在八大组件中的大多数输入元素中使用,用法:${变量名}
-
②、可以在脚本中(Bean shell/JSR等)使用,用法: vars.get("变量名")
-
特点:
-
一般来说,是线程内部共享
-
当然,一些特殊的,也是属于全局共享,如CSV配置元件,全局计数器等
-
-
-
属性:
-
①、可以在八大组件中的大多数输入元素中使用,用法:${__P(属性名)}, ${__property(属性名)}
-
②、可以在脚本中 (Bean shell/JSR等) 使用,用法:props.get(“属性名")
-
特点:
-
可以跨线程组使用
-
-
-
-
按变量作用域分有三种:
-
线程变量
-
线程变量的修改,一般只对本线程有效,只会影响本线程的下一次迭代(就是线程组里面设置的循环啊),不会跨线程
-
一般是一些元件里面做的一些设置,如只对单用户生效,对当次的线程生效等
-
-
-
线程组变量
-
线程组变量的修改,会对整个线程组生效,在线程组内跨线程【比如像csv配置元件中的线程组共享】
-
大部分都是这样的,一般是默认的
-
-
全局共享变量
-
全局的变量的修改会对所有线程组生效【比如像csv配置元件中的全局共享,全局Counter计数器等】
-
相当于跨线程组了
-
1、用户参数
-
适合数据不多的情况
-
🔺用户参数和用户定义的变量的区别:
-
①、用户定义的变量属于配置元件;用户参数属于前置处理器
-
②、用户定义的变量属于全局变量(因为是配置元件了);用户参数属于局部变量(前置处理器是不是只针对sampler有效,它都不能独立sampler存在的,能好理解点么?)
-
全局变量意味着,对整个测试计划生效
-
用户参数,只作用于自己所在的作用域
-
比如我在线程组1下定义用户定义的变量,那么在线程组2下是可以获取到这个变量的
-
但是我在线程组1下定义用户参数,那么在线程组2下是不能获取到这个用户参数变量的!!!
-
-
③、用户定义的变量在启动加载过程中只会加载一次,运行过程中不会变;用户参数会变,会动态获取值,比如迭代运行的时候
-
对于多个用户、多次循环
-
如果你是用户定义的变量,如随机数,它每次都不会变
-
如果你是用户参数,如随机数,它每次都会变
-
-
-
④、执行顺序不同,如果用户定义的变量和用户参数同时存在相同的变量
-
那么用户定义的变量先执行,用户参数后执行
-
意味着,用户参数最后运行,会覆盖掉 用户定义的变量里面同名的变量
-
-
所以,其实理解的话 ---> 就抓住一个是配置元件,一个是前置处理器就行了,理解了配置元件和前置处理器的适用场景,也很好理解!!!
-
-
设置步骤:
-
选中请求--->添加--->前置处理器--->用户参数
-
-
请求时引用变量格式如下:
-
${xxx}
-
这种方式,需要注意,在脚本里面,需要加引号
-
-
脚本里面也可以通过 vars.get( “变量名" ) 的方式来获取
-
-
-
-
用户参数使用实例
-
用户参数位置随便放,【如果多个用户参数之间不冲突的话】,但是建议放到最外面,最前面
-
用户参数可以放到控制器外
-
可以放控制器内
-
可以放取样器的请求前
-
也可以放取样器的请求后
-
-
取样器中使用:
-
-
-
BeanShell中使用:
-
-
查看结果:
-
-
用户参数还可以做参数化
-
定义多组值,不同线程执行的时候取不同的值
-
-
-
2、函数生成变量
-
工具--->函数助手对话框---选择函数
-
可以自定义一些规则,然后点生成函数
-
使用这个函数生成一些变量的值
-
-
-
-
3、BeanShell变量
-
什么是BeanShell?
-
BeanShell是一种完全符合java语法规范的脚本语言,并且又拥有自己的一些语法和方法;
-
BeanShell是一种松散类型的脚本语言【这点与js类型】
-
BeanShell是用java写成的,一个小型的、免费的、嵌入式的java源代码解释器,具有对象脚本语言特性,非常精简
-
BeanShell执行标准java语句和表达式,另外包括一些脚本命令和语法。
-
但是由于性能问题,目前逐渐被JSR方式取代
-
-
BeanShell常用的内置变量
-
vars
-
vars引用了JMeter线程中的局部变量
-
vars.put(String key, String value); # 定义jmeter变量
-
vars.get(String key); # 获取jmeter变量
-
这个一般不能跨线程组
-
-
props
-
props引用了JMeter的属性
-
可以跨线程组
-
-
log
-
log写入信息到jmeter.log文件
-
log.info("hello jmeter");
-
-
-
示例:
-
BeanShell里面还可以写java代码,然后使用java代码定义的对象
-
比如java的时间对象,然后传参,传body就可以使用了
-
4、CSV数据文件变量
-
csv数据文件变量是指从外部的csv文件中读取数据出来作为变量
-
设置步骤:
-
选择请求--->添加--->配置元件--->CSV数据文件设置
-
创建csv文件【最好不用记事本创建,推荐使用notepad++】文件编码为utf-8
-
csv文件取数据的时候
-
对于单个线程来说,不会循环取数据
-
意思就是单个用户,无论循环多少次,变量取的是一样的啊
-
对于多个线程来说,会循环取数据
-
示例:
-
-
5、正则表达式用户参数【Regular User Parameter】
-
前置处理器 ---> 正则表达式用户参数
-
适用场景:
-
正则表达式用户变量,用来引用前一次的正则表达式提取器提取的响应数据
-
这个响应数据是由取样器返回的
-
如对请求1用正则表达式提取器提取其返回数据的list,然后在请求2中用Regular User Parameter来引用list中的值
-
其实就是Jmeter的关联,关联里面在详细看吧
-
-
6、测试计划 --->【用户定义的变量】
-
测试计划下也可以添加变量
-