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

У меня есть кусок регулярного выражения, который я тестировал в 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();

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


person ratsstack    schedule 12.03.2014    source источник
comment
Как определяется temp?   -  person Philip Allgaier    schedule 13.03.2014
comment
Я не определил темп. Я схватил код, пока искал решение о том, как писать в файлы в JMeter.   -  person ratsstack    schedule 13.03.2014
comment
Я понимаю, к чему вы клоните. VALUES - это массив, поэтому мне нужно было бы определить его как массив, когда я делаю vars.get (VALUES). Это то, что я хотел бы знать, как это сделать. Также, если у нас есть temp, определенный как массив, как мне выгрузить его содержимое в файл? Мне нужно было бы написать цикл, который проходил бы каждую строку с ошибкой? Простите, если эти вопросы глупые, я только впервые учусь этому. :-)   -  person ratsstack    schedule 13.03.2014


Ответы (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();
person Dmitri T    schedule 13.03.2014
comment
Спасибо за ваш пост. Я понял это, сделав именно то, что вы сказали. Очень признателен. - person ratsstack; 13.03.2014

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

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();
person Philip Allgaier    schedule 12.03.2014
comment
Спасибо за ответ, но в файл ничего не записано. Файл results.txt был создан, но ничего не содержал. С экстрактором регулярных выражений я использую следующие значения: Имя ссылки: VALUES Регулярное выражение: ‹td class = right› ([^ ‹] *) ‹/td› Шаблон: $ 1 $ Номер совпадения (0 для случайного выбора): 1 По умолчанию Значение: FAIL - person ratsstack; 13.03.2014
comment
Проверил журнал и обнаружил ошибку: ОШИБКА - 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: \\... '': Объявление типизированной переменной - person ratsstack; 13.03.2014
comment
Боюсь, что я не могу помочь дальше этого момента, так как я не знаю, что это за значения переменных, которые вы извлекаете откуда-то через какое-то регулярное выражение (мне / нам понадобятся дополнительные сведения, чтобы продолжить попытки помочь). Могу только сказать, что если массив String[] заполнен правильно, мой код запишет его в файл. - person Philip Allgaier; 13.03.2014
comment
Привет, ты прав, твой код работает нормально. Я заменил String [] values ​​= vars.get (VALUES) на String [] values ​​= {a, b, c}, и он работал нормально. Итак, вопрос в том, как я могу получить весь массив результатов в VALUES из моего экстрактора регулярных выражений? Спасибо - person ratsstack; 13.03.2014
comment
Если вы можете опубликовать несколько дополнительных строк кода, которые показывают часть регулярного выражения, кто-то может дать вам несколько советов. - person Philip Allgaier; 13.03.2014
comment
Я не использую код для извлечения части регулярного выражения. Я использую компонент экстрактора регулярных выражений в JMeter. Я упомянул переменные, которые я использую для настройки этого компонента, в комментарии выше. - person ratsstack; 13.03.2014
comment
@ratsstack Хорошо, теперь я получил то, что вы пытаетесь. Итак, относительно ошибки: 1. Является ли VALUES ссылочным именем, которое вы установили в экстракторе регулярных выражений jMeter? 2. Можете ли вы использовать System.out.println(vars.get("VALUES")) для тестирования, чтобы увидеть, есть ли вообще что-нибудь. Также может быть способ запросить код ответа экстрактора, но вы сказали, что эта часть наверняка работает нормально. - person Philip Allgaier; 13.03.2014
comment
1) Да, VALUES - это ссылочное имя в JMeter для экстрактора регулярных выражений 2) хорошее предложение, оно возвращает только ОДНО значение и, следовательно, почему это не удается. Я решил эту проблему на основании вашего ответа. Я использую несколько экстракторов регулярных выражений для получения разных значений и записываю их все в файл. Большое спасибо за вашу помощь. Мне может понадобиться больше позже! :-) - person ratsstack; 13.03.2014