jmeter Beanshell - Fehler aufrufen bsh-Methode: eval
Ich versuche zu drucken 3 Variablen aus 3 verschiedenen HTTP-requests in der gleichen Thread-Gruppe .
Ich schrieb folgenden BeanShell in Jmeter:
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;
}
Und die Ausnahme ist:
2017/04/26 16:16:25 WARN - jmeter.extractor.BeanShellPostProcessor: Problem bei der BeanShell-Skript org.apache.jorphan.util.JMeterException: Fehler beim Aufruf bsh-Methode: eval
Bezogen Datei: inline-Bewertung: `try { hash1 = vars.get("var_Hash_1"); hash2 = vars.get("var_Hash_2"); hash3 = va . . . ": TargetError
Was interessant ist, dass, wenn ich zu schreiben versuche nur hash1 und hash2 gleichen-Ausnahme tritt auf, aber es ist etwas geschrieben, um eine result.txt Datei (hash1,hash2)
mit hash1,hash2,hash3 nichts geschrieben.
Alle 3 Variablen sind vorhanden, wie führe ich 3 ähnliche Anfrage, und Sie sind erfolgreich. Irgendwelche Ideen?
Bearbeitet: Log-Datei von der Ausnahme:
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)
- Ich ausgeführt Sie code, es scheint, ich bin in der Lage, schreiben Sie den Wert in die Datei. Ich änderte nur diese Zeile
FileWriter fstream = new FileWriter("C:/Projects/result.txt",true);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, Sie haben den try-block schon - Blick in jmeter.melden Sie - Datei für den "normalen" stacktrace, diese
Error invoking bsh method: eval
Mist sagt nichts über die Ursache. Wenn Sie nicht in der Lage zu Abbildung das problem nicht selbst beheben - poste das log Teil, beginnend mitErrror in Beanshell
bis zum Ende hier.Kann ich davon ausgehen 2 mögliche Gründe:
null
(wahrscheinlich) sind, prüfen Sie die Variablen Werte durch die Platzierung Debug Sampler vor dem Beanshell-test-element und überprüfen Sie die Variablen-Werte in der Ergebnisse Anzeigen-Baum Zuhörer./tmp/result.txt
Datei (unwahrscheinlich aber auch möglich)Ein paar andere Empfehlungen:
Das problem hier ist, dass Sie mit zwei post-Prozessoren auf dem gleichen sampler, die ausgeführt werden, in der falschen Reihenfolge. Ich nehme an, Sie haben so etwas wie:
Auf dem Dritten sampler, beanshell mit Skript, das Sie zur Verfügung gestellt haben versucht, Zugriff auf variable wurde noch nicht initialisiert.
Um dieses problem zu beheben, müssen Sie zu bewegen, beanshell post-Prozessor Balg Regex/Beanshell extractor oder verschieben Sie Ihr Skript, um neue Beanshell Sampler nach Sampler 3.
Weitere Infos über die Reihenfolge der Ausführung der Elemente beziehen sich auf dieser link.
Überprüfen Sie den Wert durch hinzufügen von debug-sampler oder verwenden Sie folgenden code in beanshell-Skript, um sicherzustellen, dass Sie immer alle Werte
wenn nicht, dann überprüfen Sie, um von Ihrer regulären Ausdruck Extraktoren.