2017-04-26 5 views
0

Ich versuche, 3 Variablen aus 3 verschiedenen HTTP-Anfragen in derselben Thread-Gruppe zu drucken. schrieb ich folgendes in Jmeter Beanshell:jmeter Beanshell - Fehler beim Aufrufen der bsh-Methode: eval

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 in Beanshell Skript org. apache.jorphan.util.JMeterException: Fehler beim Aufrufen der bsh-Methode: eval Ausgelagerte Datei: Inline-Auswertung von: `` try {hash1 = vars.get ("var_Hash_1"); hash2 = vars.get ("var_Hash_2"); hash3 = va. . . TargetError

Was interessant geschnitten ist, dass wenn ich versuche nur hash1 und hash2 gleiche Ausnahme zu schreiben kommen, aber es ist etwas, was zu einer result.txt Datei geschrieben (hash1, hash2) mit hash1, hash2, hash3: ‚‘ nichts ist ausgeschrieben.

Alle 3 Variablen sollen existieren, da ich 3 ähnliche Anfragen ausführe und sie erfolgreich sind. Irgendwelche Ideen?

Edited: Datei von Ausnahme Log:

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) 
+0

Ich habe Sie Code ausgeführt, es scheint, ich bin in der Lage, den Wert in die Datei zu schreiben. Ich änderte nur diese Zeile 'FileWriter fstream = neuer FileWriter (" C: /Projects/result.txt ", wahr);' –

Antwort

1

Da Sie die try-Block bereits haben - schauen Sie in jmeter.log-Datei für den „normalen“ Stacktrace, diese Error invoking bsh method: eval Mist sagt nichts über die Ursache . Wenn Sie das Problem nicht selbst herausfinden können, schreiben Sie den Logteil beginnend mit Errror in Beanshell bis zum Ende hier.

Ich kann zwei mögliche Gründe annehmen:

  1. Einer Ihrer Variablen nicht gesetzt durch null zu sein (am wahrscheinlichsten), überprüfen Sie die Variablen Werte von Debug Sampler vor dem Beanshell Testelement platzieren und überprüfen Sie die Variablen Werte im View Results Tree Listener.
  2. Sie haben keinen Schreibzugriff auf /tmp/result.txt Datei (unwahrscheinlich aber auch möglich)

Ein paar andere Empfehlungen:

  1. Der beste Weg, JMeter Variablen Werte der Speicherung verwendet Sample Variables Eigenschaft
  2. Wenn Sie für die Skripterstellung gehen müssen, verwenden Sie JSR223 Test Elements and Groovy language anstelle von Beanshell.
+0

Danke Dmitri, Sieht aus wie Variable hash3 ist leer und das ist die Ursache. Ich habe 3 fast identische HTTP-Sampler, und wenn ein Beanshell-Skript am Ende der Thread-Gruppe platziert ist, kann ich auf die Variable von Sampler1 und Sampler2 zugreifen. Ich kann aus unbekannten Gründen nicht auf Variable von Sampler3 zugreifen. Wenn ich drei verschiedene Skripte in jede Probe separat lege, ohne etwas anderes zu ändern, habe ich keine Ausnahme und kann alle 3 Variablen drucken. –

+0

Es sieht also so aus, als ob Sampler1 und Sampler2 im gleichen Bereich liegen, Sampler3 aber nicht. Ich kann nicht verstehen, warum, weil sie alle in der gleichen Thread-Gruppe sind –

0

Das Problem hier ist, dass Sie zwei Postprozessoren auf dem gleichen Sampler verwenden, die in falscher Reihenfolge ausgeführt werden.Ich nehme an, Sie haben so etwas wie:

  • Sampler 1
    • Regex/Beanshell Extraktor
  • Sampler 2
    • Regex/Beanshell Extraktor
  • Sam PLER 3
    • Beanshell Postprozessor
    • Regex/Beanshell Extraktor

Am dritten Sampler, Beanshell mit Skript zur Verfügung gestellt haben versucht Variable zuzugreifen, die noch nicht initialisiert wurde.

dieses Problem zu beheben, müssen Sie Beanshell Postprozessor unten Regex/Beanshell Extraktor oder bewegen Ihr Skript neuen Sampler nach Beanshell Sampler

über die Ausführungsreihenfolge der Elemente beziehen sich auf 3. Für weitere Informationen platziert bewegen this link.

+0

Hallo Ivan, obwohl dies mögliche Ursache für so etwas ist, hatte ich meine Regex-Extraktoren/Beanshell-Postprozessoren in der richtigen Reihenfolge von Anfang an –

+0

Ich habe Setup aus meiner Antwort versucht. Es funktioniert nicht, bis ich Beanshell und Regex umgedreht habe. Haben Sie die zweite Option ausprobiert (Skript in Beanshell Sampler unter Sampler einfügen)? –

0

Überprüfen Sie den Wert von Debug-Sampler oder Verwendung folgenden Code in Beanshell Skript hinzugefügt, um sicherzustellen, Sie bekommen alle Werte

log.info("Hash1 value :"+hash1); 

log.info("Hash2 value :"+hash2); 

log.info("Hash3 value :"+hash3); 

wenn nicht, dann Reihenfolge der regulären Ausdruck Extraktoren überprüfen.

Verwandte Themen