2016-07-11 22 views
2

Ich versuche, ein BeanShell-Skript in JMeter zu erstellen, eine XML-Nachricht zu erstellen und speichern Sie es als eine Variable (und dann einen SOAP-Sampler senden Sie die Nachricht natürlich, aber das ist nicht wirklich der Punkt). Innerhalb des Skripts habe ich eine Schleife, die nach dem Zufallsprinzip ein paar Zeilen erstellt, und der Punkt ist, dass jede Schleife das Skript liest eine neue Zeile aus einer CSV-Datei. Die Schleife funktioniert gut, aber aus irgendeinem Grund scheint die CSVread next nicht so zu funktionieren, jedes Mal, wenn es nur die gleiche Zeile aus der CSV-Datei verwendet. HierNächste Zeile aus CSV-Datei in Jmeter-Beanshell-Skript

ist der Code Ich verwende:

try{ 

    //Use a random variable to loop for a random amount of times 
    randomnr = vars.get("randomvariable"); 
    int randomint = Integer.parseInt(randomnr); 
    int FiNr = 123456789; 

    //I'm using a stringbuilder to create the xml message 
    StringBuilder multi = new StringBuilder(); 

    for (int i=1; i<randomint; i++){ 
    multi.append("SomeXML"); 
    FiNr = ${__CSVRead(data.csv,0)}; //get a line from the csv 
    multi.append(""+FiNr); 
    multi.append("SomeMoreXML"); 
    ${__CSVRead(data.csv,next)}; //Go to the next line in the csv - doesn't seem to be working 
    } 

    vars.put("xmlmessage",multi.toString()); //put all of it in a variable 

} 
catch(Exception ex){ 
    log.warn("Something bad happened", ex); 
    throw ex; 
} 

Alles funktioniert, außer, dass es nicht innerhalb der Schleife in die nächste Zeile voran. Irgendwelche Gedanken?

+0

Ich bin mit dieser Funktion nicht vertraut, also würde ich es vorziehen, dies nicht als Antwort zu belassen, aber ich würde annehmen, dass Sie 'int FiNr = $ {__ CSVRead (data.csv, 0)}; Ihre for-Schleife und '$ {__ CSVRead (data.csv, next)};' sollte 'FiNr = $ {__ CSVRead (data.csv, next)};' sein. – RowlandB

+0

@RowlandB Danke, dass du darauf hingewiesen hast, es war ein Anfänger-Programmierfehler. Leider hat es das Problem mit der CSV-Datei nicht gelöst. Ich habe den Code aktualisiert. Außerdem funktioniert 'FiNr = $ {__ CSVRead (data.csv, next)};' nicht, da Sie die Spalte angeben müssen, in der die Funktion einen Wert zurückgeben soll. –

+0

Mögliches Duplikat von [Parsing einer CSV-Datei für mehrere Zeilen mit der neuen Java 8 Streams API] (http://stackoverflow.com/questions/37865492/parsing-a-csv-file-for-a-multiple-row- rows-mit-new-java-8-streams-api) –

Antwort

0

Leider _csvread() Funktion funktioniert nicht mit Schleife innerhalb der Beanshell-Sampler. Versuchen Sie, jmeter Loop Controller zu implementieren und fügen Sie Funktion darunter.