【问题标题】:How can I write all values extracted via regex to a file?如何将通过正则表达式提取的所有值写入文件?
【发布时间】:2014-03-13 18:18:10
【问题描述】:

我有一段正则表达式,我使用正则表达式测试器在 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();

如何将通过正则表达式找到的所有值写入文件?谢谢。

【问题讨论】:

  • temp 是如何定义的?
  • 我没有定义 temp。我在搜索有关如何在 JMeter 中写入文件的解决方案时抓取了一些代码。
  • 不过,我知道你打算如何处理这个问题。 VALUES 是一个数组,所以当我执行 vars.get("VALUES") 时,我需要将它定义为一个数组。这是我想知道该怎么做。此外,一旦我们将 temp 定义为数组,我如何将其内容转储到文件中?我是否需要编写一个遍历每一行错误的循环?如果这些问题很愚蠢,请原谅我,我只是第一次学习这些东西。 :-)

标签: jmeter beanshell


【解决方案1】:

如果您查看Debug Sampler 输出,您会看到VALUES 将是一个前缀。

喜欢

  • 值=...
  • VALUES_g=...
  • VALUES_g0=...
  • VALUES_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();

【讨论】:

  • 感谢您的帖子。我完全按照你说的做了这个。非常感谢。
【解决方案2】:

要将值数组的内容写入文件,以下代码应该可以工作(未经测试):

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();

【讨论】:

  • 感谢您的回答,但这并没有将任何内容写入文件。 results.txt 文件已创建但不包含任何内容。使用正则表达式提取器,我使用以下值: 参考名称:VALUES 正则表达式:([^ 模板:$1$ 匹配号(0 表示随机): 1 默认值:失败
  • 检查日志并看到错误:错误 - 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:\\ . . . . '' : 类型变量声明
  • 我担心我无法真正帮助超出这一点,因为我不知道您通过某种正则表达式从某个地方检索的那些变量值是什么(我/我们需要更多详细信息才能继续尝试提供帮助)。我只能说,如果String[]数组被正确填充,我的代码会将其写入文件。
  • 嗨,你是对的,你的代码工作正常。我用 String[] values = {"a","b","c"} 替换了 String[] values = vars.get("VALUES") 并且效果很好。所以问题是如何从我的正则表达式提取器中检索 VALUES 中的整个结果数组?谢谢
  • 如果您可以发布一些显示正则表达式部分的额外代码行,有人可能会给您一些提示。
猜你喜欢
相关资源
最近更新 更多
热门标签