У меня есть этот заголовок в файле csv: TEST_ID; TEST_DESC; RQ_FIELD1; RQ_FIELD2; RQ_FIELD3; FIELD4; FIELD5; FIELD6; FIELD7; FIELD8
, и я использую это объявление для чтения его значений из csvв Jmeter Groovy:
String[] parameters = new String[]{vars.get("FIELD1"),vars.get("FIELD2"),vars.get("FIELD3")};
Затем я использовал значения из vars.get для создания моего запроса JSON.
Поскольку заголовок может меняться в зависимости от структуры csv, я бы хотелсоздать что-то динамическое, вместо использования объявления String[] parameters = new String[]{vars.get("FIELD1"),vars.get("FIELD2"),vars.get("FIELD3")};
Тогда я написал это:
public static String getFirstLine() throws IOException {
BufferedReader br = new BufferedReader(new FileReader(props.get("csvFilePath")));
String line = br.readLine();
br.close();
return line;
}
String line=getFirstLine();
String[] header = new String[20];
String[] parameters;
int j=1;
try {
header = line.split(";");
for (int i=1;i<header.length;i++){
if (header[i].toString().contains("RQ_")){
j++;
}
}
parameters = new String[j];
j=1;
for (int i=1;i<header.length;i++){
if (header[i].toString().contains("RQ_")){
header[i] = header[i].toString().replaceAll("RQ_", "");
header[i] = header[i].toString().trim();
if (j!=parameters.length-1){
parameters[j] = "vars.get(\""+header[i].toString()+"\"),";
}
else {
parameters[j] = "vars.get(\""+header[i].toString()+"\")";
}
log.info ("====parameters.length["+parameters.length+"====header.length["+header.length+"]====i["+i+"]====j["+j+"]=====paramters["+parameters[j]+"]");
j++;
}
}
for (p=1;p<parameters.length;p++){
log.info ("=====paramters["+parameters[p]+"]");
}
}catch (Exception e) {
log.info(e.toString());
log.info(result.sampleEnd());
}
вывод:
INFO o.a.j.m.JSR223PreProcessor: ====parameters.length[4====header.length[10]====i[2]====j[1]=====paramters[vars.get("FIELD1"),]
INFO o.a.j.m.JSR223PreProcessor: ====parameters.length[4====header.length[10]====i[3]====j[2]=====paramters[vars.get("FIELD2"),]
INFO o.a.j.m.JSR223PreProcessor: ====parameters.length[4====header.length[10]====i[4]====j[3]=====paramters[vars.get("FIELD3")]
Теперь я хотел быиспользовать параметры массива для чтения значений файла CSV:
String key;
for (String value : parameters) {
key = "";
if (value.length() > 0) {
log.info("value["+value+"]);
}
}
Я получил ошибку
javax.script.ScriptException: Sourced file: eval stream : Can't iterate over type: class bsh.Primitive : at Line: 81 : in file: eval stream : for ( String value : parameters ) {
in eval stream at line number 81
at bsh.engine.BshScriptEngine.evalSource(BshScriptEngine.java:93) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.engine.BshScriptEngine.eval(BshScriptEngine.java:52) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:212) ~[?:1.8.0_181]
at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:199) ~[ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44) [ApacheJMeter_components.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:849) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:467) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:416) [ApacheJMeter_core.jar:4.0 r1823414]
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:250) [ApacheJMeter_core.jar:4.0 r1823414]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_181]