3

我正在使用带有 JSF 和 Beanshell 脚本的 Java。我想在 beanshell 中使用 java 类的字段和对象。我已尽力从谷歌获得帮助,但找不到任何有用的信息。例如

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import bsh.EvalError;
import bsh.Interpreter;

public class C {

static Map<String,Object> map = new HashMap<String,Object>();
static List<String> list = new ArrayList<String>();
static Map<String,Integer> integerMap = new HashMap<String,Integer>();

public static void main(String[] arg) throws EvalError{
    list.add("Hello");
    list.add("World");
    Interpreter i = new Interpreter();  // Construct an interpreter
    map.put("stringList", list);//in java
    i.eval("map.put(\"stringList\", list)");// gives error
    List list = (List) map.get("stringList");
    for(String str:(List<String>)list){
        System.out.println(str);
    }
  }
}

我想对 beanshell 中的同一对象执行所有可用于在 java 中收集的操作。

Jmeter提供了这样的工具,用户可以在 beanshell 中更新变量,并根据链接上给出的详细信息,似乎 Jmeter 正在使用字符串映射,我想做同样的事情,但它是对象。

如果任何可用于实现我的要求的技术或框架中的任何技术或框架对于 java、beanshell、JSF 或 java 中的其他可用选项都是好的,我将不胜感激。

4

1 回答 1

1

在 JMeter 的 Beanshell 或更好的 JSR223 Sampler(Java 语言)中,您可以将对象放入 JMeter 变量中,如下所示:

JMeterVariables vars = JMeterContextService.getContext().getVariables();
vars.putObject("stringList", stringList);

并得到:

vars.getObject("stringList");

在 Java 一般情况下,您需要向Beanshell Interpreterwithset方法添加变量:

    list.add("Hello");
    list.add("World");
    Interpreter i = new Interpreter();  // Construct an interpreter

    map.put("stringList", list);//in java
    try {
        i.set("map", map); 
        i.set("list", list); 
        System.out.println(i.eval("map.put(\"stringList\", list)"));
    } catch (EvalError e1) {
        e1.printStackTrace();
    }
于 2017-09-17T10:51:13.873 回答