2016-06-03 6 views
1

Ich versuche, die Zeit zwischen zwei Ereignissen in JMeter mit BeanShell PostProcessors zu berechnen.JMeter BeanShell-Eigenschaft Einstellung über Thread-Gruppe

Im ersten Block, bekomme ich die Zeit und speichern Sie es als eine Eigenschaft. Dies ist in einer Thread-Gruppe. Dann habe ich in einer anderen Thread-Gruppe den zweiten BeanShell-Block. Ich bekomme einen Fehler, den ich nicht verstehen kann. Ich habe den Fehler hier eingefügt. Vielen Dank für Ihre Tipps und Hinweise!

Hier sind die beiden Stücke von Beanshell Code:

FIRST Nachprozessor:

//Set the current time to the time_upload variable 
long time_upload = prev.getTime(); // get POST Time 

props.put("time_upload",(String.valueof(time_upload))); 
log.info("Time for Upload is: " + time_upload); // print difference to jmeter.log file 

SECOND Nachprozessor:

String no_saved_carts = vars.get("no_saved_carts"); 
String no_saved_carts_trimmed = no_saved_carts.trim(); 

String temp_description = vars.get("description"); 
String temp_description_no_space = temp_description.trim(); 

String time_upload_local = props.get("time_upload"); 


if(temp_description_no_space.equals("</") || no_saved_carts_trimmed.equals("No Saved Carts Found")){ 
    vars.put("description","true"); 
} else{ 
    vars.put("description","false"); 
    //set the time to time_processing based on time_upload 
    long time_processing_done = prev.getTime(); // get time 
    long time_upload_long = Long.parseLong(time_upload_local); // get HTTP Sampler 1 execution time from variable 
    long delta = (time_processing_done - time_upload); // calculate difference 
    log.info("Time difference is: " + delta + " ms"); // print difference to jmeter.log file 
} 

Der relevante Teil des ERROR LOG:

2016/06/03 17:21:22 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``//Set the current time to the time_upload variable long time_upload = prev.getTi . . . '' : Error in method invocation: Static method valueof(long) not found in class'java.lang.String' 
2016/06/03 17:21:22 WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``//Set the current time to the time_upload variable long time_upload = prev.getTi . . . '' : Error in method invocation: Static method valueof(long) not found in class'java.lang.String' 
2016/06/03 17:21:22 INFO - jmeter.threads.JMeterThread: Thread is done: Upload Saved Cart Thread Group 1-1 
2016/06/03 17:21:22 INFO - jmeter.threads.JMeterThread: Thread finished: Upload Saved Cart Thread Group 1-1 
2016/06/03 17:21:22 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String temp_description = vars.get("description"); String no_saved_carts = vars. . . . '' : Typed variable declaration : Method Invocation Long.parseLong 
2016/06/03 17:21:22 WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: ``String temp_description = vars.get("description"); String no_saved_carts = vars. . . . '' : Typed variable declaration : Method Invocation Long.parseLong 
2016/06/03 17:21:26 INFO - jmeter.threads.JMeterThread: Thread is done: Check Upload Status 2-1 

Antwort

1

Sie können nicht lange String konvertieren String.valueOf() Methode verwendet wird, gibt es folgende Möglichkeiten:

  1. Wenn Sie noch wollen String nur die Zeile lang in String zu konvertieren wie folgt aussehen:

    props.put("time_upload", Objects.toString(time_upload,null)); 
    
  2. Werden sie lange los -> String und umgekehrt Konvertierung props eine übliche java.util.Properties Klasseninstanz ist, so dass es Objects

    In erster Postprocessor speichert:

    long time_upload = prev.getTime(); 
    props.put("time_upload", time_upload); 
    

    Auf dem zweiten Postprocessor:

    long time_upload_long = props.get("time_upload"); // no need to cast from String 
    
  3. Sie können bsh.shared namespace verwenden, jedes Objekt zu halten - es wird von allen Themen-Gruppen

    In ersten Postprocessor zugänglich sein:

    bsh.shared.time_upload = prev.getTime(); 
    

    Im zweiten PostProzessor:

    long time_upload = bsh.shared.time_upload 
    

Sie können informative Fehlermeldungen in jmeter.log Datei im Fall von Beanshell Skriptfehlern erhalten, indem Sie Ihren Code mit try/catch-Block umgeben wie:

try { 
    //your code here 
} 
catch (Throwable ex) { 
    log.error("Something wrong", ex); 
    throw ex; 
} 

See How to Use BeanShell: JMeter's Favorite Built-in Component für weitere Tipps und Tricks von JMeter und Beanshell.

+0

ausgezeichnete Antwort! Danke, dass du mir geholfen hast und mir mehr über JMeter beigebracht hast :) – ProgrammedChem