10.Jmeter属性和变量初识


目录

0、JMeter支持的变量和属性?

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、测试计划 --->【用户定义的变量】

  • 测试计划下也可以添加变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值