• 【JMeter】Beanshell介绍


    什么是Beanshell

    Beanshell是一种完符合java语法规范的脚本语言,同时它又有自己的语法。
    应用场景:

    1. 在做一些复杂的接口测试的时候或者业务场景(自定义的加密接口,签名接口),开发给你一个java文件/class文件/jar包。调用里面的方法。
      //开发给的是java文件:引用java文件
      source("E:\\Test.java");
      //调用java文件中的类Test,生成一个对象并调用它的方法add
      int result = new Test().add(1,2);
      
      //开发给的是jar包:引入jar包再导包
      import packageName.Test;
      int result = new Test().add(1,2);
      
      //开发给的是class文件:增加class文件的路径>>导包
      addClassPath("E:\\")
      import packageName.Test;
      int result = new Test().add(1,2);
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    2. CSV数据驱动之后如何断言?数据库断言?
    3. 跨线程组共享变量

    Beanshell有哪些?
    (1) Beanshell前置处理器
    (2) Beanshell定时器
    (3) Beanshell后置处理器
    (4) Beanshell断言
    (5) Beanshell监听器
    (6) Beanshell取样器

    Beanshell自带的语法:内置变量

    作用:内置变量的作用就是和JMeter本身的组件交互数据。

    log:打印日志的内置变量

    信息日志:log.info("码尚教育”);
    错误日志:log.error("百里老师”);
    java打印:System.out.printIn("我是java的打印语法”);
    注意:java的日志不是打印在JMeter日志窗中,而是打印在控制台中。
    在这里插入图片描述

    JMeter日志查看:

    1. 在选项Options>日志级别Log Level中设置显示日志的级别(默认显示全部)
      在这里插入图片描述
    2. 运行完点击右上角!按钮即可调出日志窗口查看日志。在这里插入图片描述

    vars:操作JMeter局部变量

    本质是map,键值对。
    局部变量只能在当前线程使用,全局变量可以跨线程使用。

    vars.put(key,value); 设置变量的值
    vars.get(key);	获取变量的值
    
    • 1
    • 2

    示例:
    提取豆瓣高分电影Top10接口中排名第一的豆瓣高分电影的title并使用《》格式化输出。

    log.info("处理前: " + vars.get("title"));	//日志打印局部变量title
    String title = vars.get("title"); //获取局部变量title的值并赋值给字符串变量title
    title = "《"+title+"》"; //对字符串变量title进行拼接
    log.info(title);	//日志打印输出处理后的title
    vars.put("new_title",title);	//设置局部变量new_title并将变量title的值赋值给他
    log.info("处理后: " + vars.get("new_title"));	//日志打印局部变量new_title
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    props:操作JMeter全局变量

    全局变量可以跨线程使用。

    props.put(key,value);	设置变量的值
    props.get(key);	获得变量的值
    
    • 1
    • 2

    示例:
    将线程组1提取出来的new_title传递到线程组2中进行查询。

    //线程组1:
    String title = vars.get("title"); //获取局部变量title的值并赋值给字符串变量title
    title = "《"+title+"》"; //对字符串变量title进行拼接
    props.put("new_title",title);	//设置全局变量new_title并将变量title的值赋值给他
    
    //线程组2:
    String movie = props.get("new_title");	//获取全局变量new_title的值并赋值给字符串变量movie
    log.info(movie);	//日志打印变量movie
    vars.put("movie", movie);	//设置局部变量movie并将变量movie的值赋值给他。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    注意:

    1. 在线程组2中需将全局变量vars.put转换为局部变量才可调用。无此语句无法调用成功,如下:
      在这里插入图片描述
    2. 多线程运行需勾选测试计划下的”独立运行每个线程组“才能实现从上到下按顺序执行。
      在这里插入图片描述

    prev:获取前面取样器返回的信息

    log.info(prev.getResponseCode());
    log.info(prev.getResponseDataAsString()):
    
    • 1
    • 2

    在这里插入图片描述

  • 相关阅读:
    猿创征文|瑞吉外卖——管理端_订单明细
    linux下Nerdtree安装方法
    LeetCode 739 每日温度(单调栈的初步了解)
    Java多线程-进程和线程概念
    基于昇腾AI 使用AscendCL实现垃圾分类和视频物体分类应用
    【20221201】【每日一题】划分字母区间
    WuThreat身份安全云-TVD每日漏洞情报-2023-10-13
    git log
    Python的self作用,以及__init__,__new__
    R语言使用plot函数可视化数据散点图,自定义设置xaxt参数移除X轴的刻度线
  • 原文地址:https://blog.csdn.net/weixin_49026134/article/details/127338954