Jmeter 杰米。比恩希尔后处理器

Jmeter 杰米。比恩希尔后处理器,jmeter,beanshell,Jmeter,Beanshell,我已经在jmeter中完成了BeanShell脚本编写,但没有找到 任何这样的例子,它在jmeter中是如何有用的,以及哪种方式表示读取 采样值等。 有人能用example.in解释Jmeter中的BeanShell脚本吗 我们编写脚本的beanshell后/预处理器脚本。 我正在努力解决这个问题。它的实际用途是什么。请解释一下 这对我或其他人的理解都会有很大的帮助 它的用法。如果您想在请求之间执行计算,Beanshell将帮助您在jmeter中实现它。我们有,也有。例如,创建一个线程组并添加一

我已经在jmeter中完成了BeanShell脚本编写,但没有找到 任何这样的例子,它在jmeter中是如何有用的,以及哪种方式表示读取 采样值等。 有人能用example.in解释Jmeter中的BeanShell脚本吗 我们编写脚本的beanshell后/预处理器脚本。 我正在努力解决这个问题。它的实际用途是什么。请解释一下 这对我或其他人的理解都会有很大的帮助
它的用法。

如果您想在请求之间执行计算,Beanshell将帮助您在jmeter中实现它。我们有,也有。例如,创建一个线程组并添加一个beanshell采样器,如图所示。 在脚本下输入

var a=1;
var b=2;
var c=a+b;
log.info("sum="+c);
并在启用日志查看器的情况下运行(选项菜单>日志查看器)

您可以使用beanshell脚本调用jar的java方法(应该在jmeter_文件夹/lib/ext中)

Beashell预处理器用于执行计算并随请求发送值。假设您希望在发送之前加密用户名和密码。您可以提供凭据,使用beanshell/java方法对其进行加密,并将其设置为beanshell脚本中的变量(
vars.put(“variablename”,variablevalue)
)。您可以将变量作为
http://test.com?parameter=${variablename}

类似地,Beashell后处理器用于处理响应。假设您要从响应中解密一个值,提取该值(使用正则表达式提取器)并使用beanshell脚本进行解密。

如果查看beanshell后处理器的“脚本”部分,您将看到以下内容:

Script(variables: ctx, vars, props, prev, data, log)
  • ctx代表,提供对JMeter上下文API的访问(有关详细信息,请参阅JavaDoc)。用法示例:

    int threadNum = ctx.getThreadNum(); // get current thread number 
    
    String code = prev.getResponseCode(); 
    String message = prev.getResponseMessage();
    
  • vars-代表。使用
    vars
    可以获取/设置变量值

    String myvar = vars.get("myvar"); // get ${myvar} variable value and store it to myvar string 
    myvar = myvar + "something"; // append "something" to myvar
    vars.put("myvar", myvar); // put new value into ${myvar} variable
    
  • 道具-代表JMeter属性。基本上与变量相同,但变量可见性仅限于当前线程组,属性为“全局”

  • prev-上一个的简写。似乎正是你要找的。您可以获取/设置开始时间、结束时间、执行时间、延迟、URL、响应代码、响应消息等。有关详细信息,请参阅JavaDoc。用法示例:

    int threadNum = ctx.getThreadNum(); // get current thread number 
    
    String code = prev.getResponseCode(); 
    String message = prev.getResponseMessage();
    
  • 数据-包含父采样器响应数据的字节数组

    String samplerData = new String(data);
    System.out.println(samplerData);
    
  • 日志-可用于将某些内容打印到jmeter.log文件

    log.info("This line has been written by Beanshell Post Processor");
    

有关更多详细信息和实际示例,请参见指南

例如,我使用JMeter创建客户。如果响应消息已创建,则将结果设置为通过;否则,将结果设置为
失败
,将失败消息设置为
注意:创建失败
。这些步骤是:

  • 使用
    TTP请求采样器
    组装http请求
  • 在它下面添加一个
    BSF断言采样器
  • 从中查找我需要使用的方法。因为我需要操作
    Http请求采样器
    ,所以直接转到package
    org.apache.jmeter.protocol.Http.Sampler
    。如果您熟悉这些方法,请跳过此步骤
  • 完成BSF取样器。
    prev
    代表先前的样本结果
  • 您可以使用BeanShell(或更好的:JSR223预处理器/后处理器/采样器)脚本引擎来计算测试所需的参数。我将其用于几种不同类型的操作:

    • 从目录中选择要上载的随机文件
    • 计算上传/下载授权的hmac密钥(Swift所需)
    • 为特定环境设置变量(基于参数)
    下面是一个示例脚本,用于选择一个随机文件并将该文件的细节写入变量,您可以在接下来的步骤中访问该变量:

    File folder = new File(vars.get("image_path"));
    File[] imageFiles = folder.listFiles(new FileFilter() {
        public boolean accept(File pathname) {
            return !pathname.isHidden();
        }
    });
    Random rnd = new Random();
    File selected = imageFiles[rnd.nextInt(imageFiles.length)];
    String file = selected.getAbsolutePath();
    String extension = file.substring(file.lastIndexOf('.')+1);
    String mimetype = URLConnection.guessContentTypeFromName(file);
    
    vars.put("CURRENT_FILE", file);
    vars.put("FILE_EXT", extension.toUpperCase());
    vars.put("MIME_TYPE", mimetype);
    

    谢谢你回答得很详细,帮帮我!也许您知道:如何使用Beashell后处理器提取值?您可以使用正则表达式提取器从响应中提取值。或者顺便说一句,BSF代表“Beanshell脚本框架”,您不仅可以编写java代码,还可以编写Python Perl JavaScript等。我不擅长java,所以我更喜欢BSF。这可能是显而易见的,但对于Beanshell后处理器来说,prev.getResponseDataAsString()和新字符串(数据)似乎是相同的。