使用Beanshell的Java可以使用干净的代码访问字段和对象

Kar*_*ani 10 java beanshell

1).我知道如何从我的问题访问beanshell中的java字段和对象使用beanshell中的java类字段.但是,实现起来并不是那么干净,因为我需要先在beanshell中设置java变量,然后才能使用它.但是,在Jmeter中,它提供了非常干净的方式在beanshell中使用map,就像在java中一样,但是JMeter开发了它的知道库(类),它有助于访问map的get/put方法.我想以类似的方式在beanshell中访问Map.

我已经检查了JMeter以获取更多信息,我想知道,我已经创建了用户定义变量temp和赋值错误,现在在BSF过程中我只写了一行vars.put('Name','temp Value')并且它已更新临时变量的值.所以,问题是我还没有创建JMeterVariables对象变量,但仍然beanhell允许更新map中的值而不设置你的答案中提到的任何值.我想知道这是如何工作的,需要更深入的信息.

2).我在java和beanshell中创建了自己的类我正在导入这个类,但Command not found: BSClass()下面给出的是整个代码

Java类

package test;

public class BSClass {

public void BSCMethod(){
    System.out.println("I am from BSClass method BSCMethod");
    }
}
Run Code Online (Sandbox Code Playgroud)

sample.bsh

import test.BSClass;

c=BSClass();
c.BSCMethod();
print("I am from BeanShell Script");
Run Code Online (Sandbox Code Playgroud)

调用sample.bsh文件java类

package test;

import java.io.FileNotFoundException;
import java.io.IOException;
import bsh.*;

public class DynamicVariable {
   public static void main(String[] args) throws FileNotFoundException, IOException, EvalError {
    new bsh.Interpreter().source("\\src\\test\\sample.bsh");
   }
}
Run Code Online (Sandbox Code Playgroud)

注意:

  1. 我在JMeter中不需要帮助,它在核心java和beanshell中使用.
  2. 所有文件都在我的项目中.
  3. BSClass.class位于我项目的bin文件夹下

我很感激您的意见

use*_*900 2

在 Beanshell 中,您可以添加任何您想要的对象,包括地图

在 JMeter 中,JMeterVariables是 Map 的特殊实现,在评估之前添加到 Beanshell Interpreter 中,并且还JMeterContext添加了特殊的 Object,甚至包含JMeterVariables在内部。代码:

    JMeterContext jmctx = JMeterContextService.getContext();
    JMeterVariables vars = jmctx.getVariables();

    try {
        bshInterpreter.set("ctx", jmctx);//$NON-NLS-1$
        bshInterpreter.set("Label", getName()); //$NON-NLS-1$
        bshInterpreter.set("prev", jmctx.getPreviousResult());//$NON-NLS-1$
        bshInterpreter.set("props", JMeterUtils.getJMeterProperties());
        bshInterpreter.set("vars", vars);//$NON-NLS-1$
Run Code Online (Sandbox Code Playgroud)

在您使用地图的情况下,您可以按照评论中的描述进行类似的操作:

 bshInterpreter.set("myMap", javaMyMapObject);"
Run Code Online (Sandbox Code Playgroud)

然后在Beanshell中从map中获取特定的key:

 myMap.get("aField");
Run Code Online (Sandbox Code Playgroud)

要创建类,您应该使用new关键字,调用:

c= new BSClass();
Run Code Online (Sandbox Code Playgroud)

代替c=BSClass();

如果您创建自己的类,则类应该位于相关包中的 jar 内。

jar 应该位于lib文件夹中,而不是 bin 文件夹中,请参阅JMeter 的入门

该目录中的任何 jar 文件都会自动包含在 user.classpath 中,子目录中的 jar 文件将被忽略。给定值是在 lib 目录中找到的任何 jar 之外的值。所有条目都将添加到系统类加载器的类路径以及 JMeter 内部加载器的路径中。