【问题标题】:Jmeter beanshell Sampler_ Getting Error invoking bsh methodJmeter beanshell Sampler_调用bsh方法时出错
【发布时间】:2015-09-14 08:10:51
【问题描述】:

我们可以使用 vars.put 来添加数组列表的成员吗?

下面是我的代码,它在第 10 行第 25 列抛出异常 错误是:

调用 bsh 方法时出错:eval 在文件中:内联评估: ``导入java.util.List;导入 java.util.ArrayList;公共静态 void main(Strin . . . '' 在第 10 行第 25 列遇到“vars”。

import java.util.List;
import java.util.ArrayList;
public static void main(String[] ard)
{
    String OperationNme = ${op};
    String[] serviceTypeVal = {12,19,20,21,22,23,26,27,28,31,32,11};
    String serviceType;
    switch (OperationNme) {
            case 1:  OperationNme.contains("sdv")
                     vars.put("serviceType",serviceTypeVal[0]);
                     break;
            case 2:  OperationNme.contains("doorUnlock")
                     vars.put("serviceType",serviceTypeVal[1]);
                     break;
            case 3:  OperationNme.contains("doorLock")
                     vars.put("serviceType",serviceTypeVal[2]);
                     break;
            case 4:  OperationNme.contains("hornLights")
                    vars.put("serviceType",serviceTypeVal[3]);
                     break;
            case 5:  OperationNme.contains("engineOn")
                     vars.put("serviceType",serviceTypeVal[4]);
                     break;
            case 6:  OperationNme.contains("engineOff")
                     vars.put("serviceType",serviceTypeVal[5]);
                     break;
            case 7:  OperationNme.contains("dtc")
                     vars.put("serviceType",serviceTypeVal[6]);
                     break;
            case 8:  OperationNme.contains("vrc")
                     vars.put("serviceType",serviceTypeVal[7]);
                     break;
            case 9:  OperationNme.contains("vhc")
                     vars.put("serviceType",serviceTypeVal[8]);
                     break;
            case 10: OperationNme.contains("chgPrf")
                     vars.put("serviceType",serviceTypeVal[9]);
                     break;
            case 11: OperationNme.contains("evNotif")
                     vars.put("serviceType",serviceTypeVal[10]);
                     break;
            case 12: OperationNme.contains("vehStatus")
                     vars.put("serviceType",serviceTypeVal[11]);
                     break;
            default: OperationNme.contains("Invalid Operation Name")
                     break;
        }



}

【问题讨论】:

  • 您应该查看实际错误。在我看来,您似乎忘记了上面一行的分号(以及所有case 声明)。

标签: java jmeter jmeter-plugins


【解决方案1】:

您的测试存在多个问题:

  1. String[] serviceTypeVal = {12,19,20,21,22,23,26,27,28,31,32,11}; - 声明无效
  2. 如果你打开OperationNme这个字符串,你不能使用case 1case 2等,因为它类型不匹配
  3. Beanshell 不支持打开字符串

所以你应该重构你的代码看起来像这样:

String OperationNme = vars.get("op");
String[] serviceTypeVal = {"12", "19", "20", "21", "22", "23", "26", "27", "28", "31", "32", "11"};       
if (OperationNme.contains("sdv")) {
    vars.put("serviceType", serviceTypeVal[0]);
}
if (OperationNme.contains("doorUnlock")) {
    vars.put("serviceType", serviceTypeVal[1]);
} 
// etc. 

有关 JMeter 中 Beanshell 脚本的更多信息,包括故障排除建议,请参阅 How to Use BeanShell: JMeter's Favorite Built-in Component 指南。

其实推荐使用JSR223 Test Elements和Groovy语言编写脚本。安装就像下载 groovy-all-*.jar 一样简单,将其放入 JMeter 安装的 /lib 文件夹并重新启动 JMeter。

之后,您将能够从“语言”下拉列表中选择“groovy”,它正在积极开发和支持,因此它比 Beanshell 更兼容 Java。

【讨论】:

  • 您好 Dimitri,谢谢,按照您的建议修改代码后,我能够获得所需的结果,但是我有几个问题: 1. 当我在 java 方法中合并以下代码时,我无法正确执行。您能否建议 beanshell 是否支持在方法体中执行代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多