У меня есть кусок регулярного выражения, который я тестировал в JMeter с помощью тестера регулярных выражений, и он возвращает несколько результатов (10), чего я и ожидал.

Я использую средство извлечения регулярных выражений для получения значений, и я хотел бы записать их ВСЕ в файл CSV. Я использую почтовый процессор Beanshell, но мне известен только способ записи 1 значения в файл.

Мой сценарий на Beanshell:

temp = vars.get("VALUES"); // VALUES is the Reference Name in regex extractor

FileWriter fstream = new FileWriter("c:\\downloads\\results.txt",true);
BufferedWriter out = new BufferedWriter(fstream);
out.write(temp);
out.close();

Как я могу записать все значения, найденные с помощью регулярного выражения, в файл? Спасибо.

0
ratsstack 13 Мар 2014 в 02:07
Как определяется temp?
 – 
Philip Allgaier
13 Мар 2014 в 02:12
Я не определил темп. Я взял некоторый код, когда искал решение о том, как писать в файлы в JMeter.
 – 
ratsstack
13 Мар 2014 в 02:18
Хотя я вижу, к чему ты клонишь. VALUES - это массив, поэтому мне нужно определить его как массив, когда я делаю vars.get("VALUES"). Это то, что я хотел бы знать, как это сделать. Также, как только мы определили temp как массив, как мне сбросить его содержимое в файл? Нужно ли мне писать цикл, который проходит через каждую строку ошибки? Простите, если эти вопросы глупы, я просто изучаю этот материал в первый раз. :-)
 – 
ratsstack
13 Мар 2014 в 02:21

2 ответа

Лучший ответ

Если вы посмотрите на вывод Debug Sampler, то увидите, что VALUES будет префиксом.

Подобно

  • ЦЕННОСТИ = ...
  • VALUES_g = ...
  • VALUES_g0 = ...
  • ЗНАЧЕНИЯ_g1 = ...

И т.п.

Вы можете использовать ForEach Controller для итерации по ним.

Если вы хотите продолжить работу с Beanshell, вам потребуется перебирать все переменные, например:

    import java.io.FileOutputStream;
    import java.util.Map;
    import java.util.Set;

    FileOutputStream out = new FileOutputStream("c:\\downloads\\results.txt", true);
    String newline = System.getProperty("line.separator");
    Set variables = vars.entrySet();

    for (Map.Entry entry : variables) {
        if (entry.getKey().startsWith("VALUES")) {
            out.write(entry.getValue().toString().getBytes("UTF-8"));
            out.write(newline.getBytes("UTF-8"));
            out.flush();
        }
    }

    out.close();
3
Dmitri T 13 Мар 2014 в 14:18
Спасибо за ваш пост. Я понял это, сделав именно то, что вы сказали. Очень признателен.
 – 
ratsstack
13 Мар 2014 в 23:34

Чтобы записать содержимое вашего массива значений в файл, должен работать следующий код (непроверенный):

String[] values = vars.get("VALUES");

FileWriter fstream = new FileWriter("c:\\downloads\\results.txt", true);
BufferedWriter out = new BufferedWriter(fstream);

for(int i = 0; i < values.length; i++)
{
   out.write(values[i]);
   out.newLine();
   out.flush();
}
out.close();
2
Philip Allgaier 13 Мар 2014 в 02:36
Спасибо за ваш ответ, но это ничего не записало в файл. Файл results.txt был создан, но ничего не содержал. С экстрактором регулярных выражений я использую следующие значения: Имя ссылки: VALUES Регулярное выражение: ([^<]*) Шаблон: $1$ Номер совпадения (0 для случайного): 1 Значение по умолчанию: НЕУДАЧА
 – 
ratsstack
13 Мар 2014 в 02:52
Проверил журнал и увидел ошибку: ОШИБКА - jmeter.util.BeanShellInterpreter: ошибка при вызове метода bsh: eval Исходный файл: встроенная оценка: String[] values = vars.get("VALUES"); FileWriter fstream = new FileWriter("c:\\ . . . '' : Typed variable declaration 2014/03/13 12:30:45 WARN - jmeter.extractor.BeanShellPostProcessor: Problem in BeanShell script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval Sourced file: inline evaluation of: String[] values ​​= vars.get("VALUES"); FileWriter fstream = new FileWriter("c:\\ . . . . '' : Объявление типизированной переменной
 – 
ratsstack
13 Мар 2014 в 03:32
Я боюсь, что не смогу помочь дальше этого момента, так как я не знаю, что это за значения переменных, которые вы извлекаете откуда-то с помощью какого-то регулярного выражения (мне/нам потребуется больше деталей, чтобы продолжить попытки помочь). Могу лишь сказать, что при правильном заполнении массива String[] мой код запишет его в файл.
 – 
Philip Allgaier
13 Мар 2014 в 03:38
Привет, ты прав, твой код работает нормально. Я заменил String[] values ​​= vars.get("VALUES") на String[] values ​​= {"a","b","c"}, и все заработало нормально. Итак, вопрос в том, как я могу получить весь массив результатов в VALUES из моего экстрактора регулярных выражений? Спасибо
 – 
ratsstack
13 Мар 2014 в 03:55
Если вы можете опубликовать несколько дополнительных строк кода, которые показывают часть регулярного выражения, кто-то может дать вам несколько советов.
 – 
Philip Allgaier
13 Мар 2014 в 03:58