Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables jmeter Beanshell-调用bsh方法时出错:eval_Variables_Jmeter_Beanshell - Fatal编程技术网

Variables jmeter Beanshell-调用bsh方法时出错:eval

Variables jmeter Beanshell-调用bsh方法时出错:eval,variables,jmeter,beanshell,Variables,Jmeter,Beanshell,我试图打印同一线程组中3个不同HTTP请求的3个变量。 我用Jmeter写了以下BeanShell: try { hash1 = vars.get("var_Hash_1"); hash2 = vars.get("var_Hash_2"); hash3 = vars.get("var_Hash_3"); FileWriter fstream = new FileWriter("/tmp/result.txt",true); BufferedWriter o

我试图打印同一线程组中3个不同HTTP请求的3个变量。 我用Jmeter写了以下BeanShell:

try {
    hash1 = vars.get("var_Hash_1");
    hash2 = vars.get("var_Hash_2");
    hash3 = vars.get("var_Hash_3");
    FileWriter fstream = new FileWriter("/tmp/result.txt",true);
    BufferedWriter out = new BufferedWriter(fstream);
    out.write(hash1);
    out.write(",");
    out.write(hash2);
    out.write(",");
    out.write(hash3);
    out.write(",");
    out.write("\n");
    out.close();
    fstream.close();
}
catch (Throwable e) {
    log.error("Errror in Beanshell", e);
    throw e;
}
例外情况是:

2017/04/26 16:16:25警告-jmeter.extractor.BeanShell后处理器:BeanShell脚本org.apache.jorphan.util.JMeterException中存在问题:调用bsh方法时出错:eval 源文件:内联计算:`try{hash1=vars.get(“var_Hash_1”);hash2=vars.get(“var_Hash_2”);hash3=va…'':TargetError

有趣的是,如果我尝试只写hash1和hash2,则会发生相同的异常,但会将某些内容写入result.txt文件(hash1,hash2) 对于hash1、hash2、hash3,不会写出任何内容

当我执行3个类似的请求并且成功时,所有3个变量都应该存在。有什么想法吗

已编辑:来自异常的日志文件:

2017/04/26 17:30:29 ERROR - jmeter.util.BeanShellTestElement: Errror in Beanshell java.lang.NullPointerException
        at java.io.Writer.write(Writer.java:127)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at bsh.Reflect.invokeMethod(Reflect.java:134)
        at bsh.Reflect.invokeObjectMethod(Reflect.java:80)
        at bsh.Name.invokeMethod(Name.java:858)
        at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75)
        at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
        at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
        at bsh.BSHBlock.evalBlock(BSHBlock.java:130)
        at bsh.BSHBlock.eval(BSHBlock.java:80)
        at bsh.BSHBlock.eval(BSHBlock.java:46)
        at bsh.BSHTryStatement.eval(BSHTryStatement.java:86)
        at bsh.Interpreter.eval(Interpreter.java:645)
        at bsh.Interpreter.eval(Interpreter.java:739)
        at bsh.Interpreter.eval(Interpreter.java:728)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at org.apache.jmeter.util.BeanShellInterpreter.bshInvoke(BeanShellInterpreter.java:170)
        at org.apache.jmeter.util.BeanShellInterpreter.eval(BeanShellInterpreter.java:197)
        at org.apache.jmeter.util.BeanShellTestElement.processFileOrScript(BeanShellTestElement.java:151)
        at org.apache.jmeter.extractor.BeanShellPostProcessor.process(BeanShellPostProcessor.java:64)
        at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:750)
        at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:452)
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:261)
        at java.lang.Thread.run(Thread.java:745)

假设您已经有了try块-查看jmeter.log文件中的“正常”stacktrace,调用bsh method:eval时出现的
错误与根本原因无关。如果您自己无法解决问题,请将日志部分从Beanshell中的
Error开始发布到此处

我可以假设两个可能的原因:

  • 您的一个变量由于
    null
    (很可能)而未设置,请在Beanshell测试元素之前检查变量值,然后在侦听器中再次检查变量值
  • 您没有对
    /tmp/result.txt
    文件的写入权限(不太可能,但也可能)

  • 其他几项建议:

  • 存储JMeter变量值的最佳方法是使用属性
  • 如果您必须使用脚本,请使用而不是Beanshell

  • 假设您已经有了try块-查看jmeter.log文件中的“正常”stacktrace,调用bsh method:eval时出现的
    错误与根本原因无关。如果您自己无法解决问题,请将日志部分从Beanshell中的
    Error开始发布到此处

    我可以假设两个可能的原因:

  • 您的一个变量由于
    null
    (很可能)而未设置,请在Beanshell测试元素之前检查变量值,然后在侦听器中再次检查变量值
  • 您没有对
    /tmp/result.txt
    文件的写入权限(不太可能,但也可能)

  • 其他几项建议:

  • 存储JMeter变量值的最佳方法是使用属性
  • 如果您必须使用脚本,请使用而不是Beanshell

  • 这里的问题是,您在同一个采样器上使用了两个后处理器,它们的执行顺序是错误的。我假定您有如下情况:

    • 取样器1
      • Regex/Beanshell提取器
    • 采样器2
      • Regex/Beanshell提取器
    • 采样器3
      • 比恩希尔后处理器
      • Regex/Beanshell提取器
    在第三个采样器上,beanshell和您提供的脚本正在尝试访问尚未初始化的变量

    要解决此问题,您需要将beanshell后处理器bellow Regex/beanshell extractor移动到新的beanshell Sampler,将其放置在Sampler 3之后


    有关元素执行顺序的更多信息,请参阅。

    这里的问题是,您在同一个采样器上使用的两个后处理器的执行顺序错误。我假定您有如下情况:

    • 取样器1
      • Regex/Beanshell提取器
    • 采样器2
      • Regex/Beanshell提取器
    • 采样器3
      • 比恩希尔后处理器
      • Regex/Beanshell提取器
    在第三个采样器上,beanshell和您提供的脚本正在尝试访问尚未初始化的变量

    要解决此问题,您需要将beanshell后处理器bellow Regex/beanshell extractor移动到新的beanshell Sampler,将其放置在Sampler 3之后


    有关元素执行顺序的更多信息,请参阅。

    通过添加调试采样器检查值,或在beanshell脚本中使用以下代码以确保获得所有值

     log.info("Hash1 value :"+hash1);
    
     log.info("Hash2 value :"+hash2);
    
     log.info("Hash3 value :"+hash3);
    

    如果没有,请检查正则表达式提取器的顺序。

    通过添加调试采样器来检查值,或者在beanshell脚本中使用以下代码来确保获得所有值

     log.info("Hash1 value :"+hash1);
    
     log.info("Hash2 value :"+hash2);
    
     log.info("Hash3 value :"+hash3);
    

    如果没有,请检查正则表达式提取器的顺序。

    谢谢Dmitri,看起来变量hash3是空的,这是根本原因。我有3个几乎相同的HTTP采样器,如果beanshell脚本放在线程组的末尾,我可以从采样器1和采样器2访问变量。我无法从sampl访问变量er3,原因不明。如果我在每个样本中分别放置3个不同的脚本,而不更改任何其他内容,我也不例外,我可以打印所有3个变量。因此,看起来Sampler1和Sampler2在同一范围内,但Sampler3不在。我不明白为什么,因为它们都在同一线程组中感谢Dmitri,看起来像Variablelhash3是空的,这是根本原因。我有3个几乎相同的HTTP采样器,如果beanshell脚本放在线程组的末尾,我可以访问采样器1和采样器2中的变量。我无法访问采样器3中的变量,原因不明。如果我在每个样本中分别放置3个不同的脚本而不更改任何内容除此之外,我也没有例外,我可以打印所有3个变量。所以看起来采样器1和采样器2在同一范围内,但采样器3不在。我不明白为什么,因为它们都在同一线程组中。我执行了你的代码,似乎我可以将值写入文件。我只更改了这个