目录[-]

取一个简单的案例,其中包括:HTTP信息头管理器、HTTP请求默认值、用户定义的变量、beanshell 预处理程序、beanshell 取样器、常数吞吐量定时器,下面依次解释各组件的作用

在真正介绍之前,需要解释“作用域”,这个可以说是Jmeter很重要的一个属性,可简单理解为全局变量、局部变量

  • 当部分组件如“HTTP请求头管理器”,放置在“测试计划”里,那它就是全局变量
  • 如果放在“线程组”里,就是局部变量
  • 如果同时存在全局变量和局部变量,以“局部变量”为准,但是如果全局变量包含局部变量没有的属性,也会同时生效
  1. HTTP信息头管理器:
    1. 也就是HTTP请求头,以字典格式存在
  2. HTTP请求默认值:
    1. 填写一次后,不用每一次都在“取样器—HTTP请求”中添加属性,节省劳动力
  3. 用户定义的变量 
  4. beanshell 预处理程序、beanshell 取样器、beanShell 后置处理程序,这三个放在一起说明
    1. beanshell 预处理程序,第一句:读取XfacSn的值;第二句:写入变量名 XfacSn ,问题来了,第一句读取的值是从哪里来的?
      String XfacSn = props.get("XfacSn");    
      
      vars.put("XfacSn",XfacSn);
      
      
    2. 先说结论,数据来源于:后置处理器,包括 JSON提取器、政策表达式提取器、beanshell 后置处理器等等,它们需要把变量,写入到局部变量里,而props.get()就是读取局部变量
    3. 那么后置处理器,是如何把一个变量,变成局部变量?第一句,获取JSON PATH获取到的值,bsh.args[0]就是获取第一个匹配到的值,而第二句这一长段语句,就是将“局部变量”转换为“全局变量“,之前我们说过,每个线程组里都是局部变量,现在这一句转换全局变量,就可以提供给其他线程组使用,比如:登录模块,单独有一个线程组,写完将cookies或者token写入到全局变量,以供其他线程组调用
    4. beanshell 取样器:
    5. 它既然是一个取样器,就遵守执行顺序,从上到下,顺序执行,支持beanshell语法(参考java语法),比如下图,设计了好几个日期,因为在做订单时,需要用到日期,在这里统一维护
    6. 定时器:
      1. 定时器比较简单,常用的就2个,固定定时器/随机定时器、Synchronizing Timer,第二个定时器专门用于性能测试,可理解为类似loadrunner的集合点,集中并发
    7. 监听器
      1. 常用“查看结果树”、“断言结果”,性能测试常用“聚合报告”、“jp@gc一系列“组件
    8. 整体逻辑,要执行一整套操作,一定有先后顺序,比如第二个接口,需要第一个接口的返回值作为入参,第一个接口,将XfacName、XfacSn,从相应结果取出并赋值一个变量名
    9. 在后续的接口,就可以直接调用变量名
    10. 还有一些其他可用的操作,比如IF判断语句,如下图