Jmeter JSR223 Sampler - 无法将数据写入 CSV 文件

2024-03-06

我正在使用 Jmeter v4.0 r1823414。根据这个答案 https://stackoverflow.com/questions/50820389/unable-to-set-incremental-variable-in-jmeter?noredirect=1#comment88652169_50822368,有一个使用 JSR223 PostProcessor 的建议,逐字:

建议考虑使用 Groovy 进行任何形式的脚本编写 迁移到 JSR223 后处理器

在这种方法之前,我尝试使用 BeanShell Sampler 将数据简单地写入 csv 文件。我从以下位置获取的代码示例火焰计教程 https://www.blazemeter.com/blog/saving-data-to-csv-files-with-java-through-jmeter页。但是,我收到了错误

Sourced file: inline evaluation of: ``import java.io.FileWriter; import java.util.Arrays; import java.io.Writer; impor . . . '' : Typed variable declaration : Attempt to access property on undefined variable or class name

好吧,既然有人建议搬到JSR223采样器(或者PostProcessor,不确定它们在功能方面有什么区别),我稍微修改了代码,使其更加基于Java,以便在JSR223采样器:

import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.io.Writer;
import java.util.List;

public class Main {

    //Default separator
    private static char SEPARATOR = ',';

    //get path of csv file (creates new one if its not exists)
    private static String csvFile = "C:/TiredOfProgramming/Work/results.csv"; // for example '/User/Downloads/blabla.csv'

    private static String[] params = {"hello", "world", "jmeter"};

    //function write line in csv
    private static void writeLine(FileWriter writer, String[] parameters, char separator) throws IOException
    {
        boolean firstParameter = true;
        StringBuilder stringBuilder = new StringBuilder();
        String parameter = " ";

        for (int i = 0; i < parameters.length; i++)
        {
            //get param
            parameter = parameters[i];
            log.info(parameter);

            //if the first param in the line, separator is not needed
            if (!firstParameter)
            {
                stringBuilder.append(separator);
            }

            //Add param to line
            stringBuilder.append(parameter);

            firstParameter = false;
        }

        //prepare file to next line
        stringBuilder.append("\n");

        //add to file the line
        log.info(stringBuilder.toString());
        writer.append(stringBuilder.toString());
    }

        FileWriter fileWriter = new FileWriter(csvFile, true);
        writeLine(fileWriter, params, SEPARATOR);

        //proper close to file
        fileWriter.flush();
        fileWriter.close();
}

此特定脚本失败并显示以下消息:

Script8.groovy: 15: 意外标记:hello @ 第 15 行,第 39 列。 private static String[] params = {"hello", "world", "jmeter"};

如果我测试这个智能集成开发环境只需将 writeLine 方法包装到 main 方法中,一切正常

package com.tiredofprogramming;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.io.Writer;
import java.util.List;

public class Main {

    //Default separator
    private static char SEPARATOR = ',';

    //get path of csv file (creates new one if its not exists)
    private static String csvFile = "C:\\TiredOfProgramming\\Work\\results.csv"; // for example '/User/Downloads/blabla.csv'

    private static String[] params = {"hello", "world", "jmeter"};

    public static void main(String[] args) throws IOException {
        FileWriter fileWriter = new FileWriter(csvFile, true);
        writeLine(fileWriter, params, SEPARATOR);
        //proper close to file
        fileWriter.flush();
        fileWriter.close();
    }


    //function write line in csv
    private static void writeLine(FileWriter writer, String[] parameters, char separator) throws IOException
    {
        boolean firstParameter = true;
        StringBuilder stringBuilder = new StringBuilder();
        String parameter = " ";

        for (int i = 0; i < parameters.length; i++)
        {
            //get param
            parameter = parameters[i];
            System.out.println(parameter);

            //if the first param in the line, separator is not needed
            if (!firstParameter)
            {
                stringBuilder.append(separator);
            }

            //Add param to line
            stringBuilder.append(parameter);

            firstParameter = false;
        }

        //prepare file to next line
        stringBuilder.append("\n");

        //add to file the line
        System.out.println(stringBuilder.toString());
        writer.append(stringBuilder.toString());

  }
}

我的问题是:groovy 采样器是否理解 Java(在一篇 SO 帖子中我看到提到 Groovy 理解 99% 的 java 语法)。有人曾经成功使用 Jmeter 将数据写入 csv 文件吗?


尝试一下这个小小的修改:

//Default separator
char SEPARATOR = ',';

//get path of csv file (creates new one if its not exists)
String csvFile = "C:\\TiredOfProgramming\\Work\\results.csv"; // for example '/User/Downloads/blabla.csv'

def params = ["hello", "world", "jmeter"];

//function write line in csv
def writeLine(FileWriter writer, List<String> parameters, char separator) throws IOException {
    boolean firstParameter = true;
    StringBuilder stringBuilder = new StringBuilder();
    String parameter = " ";

    for (int i = 0; i < parameters.size(); i++) {
        //get param
        parameter = parameters[i];
        log.info(parameter);

        //if the first param in the line, separator is not needed
        if (!firstParameter) {
            stringBuilder.append(separator);
        }

        //Add param to line
        stringBuilder.append(parameter);

        firstParameter = false;
    }

    //prepare file to next line
    stringBuilder.append("\n");

    //add to file the line
    log.info(stringBuilder.toString());
    writer.append(stringBuilder.toString());
}

FileWriter fileWriter = new FileWriter(csvFile, true);
writeLine(fileWriter, params, SEPARATOR);

//proper close to file
fileWriter.flush();
fileWriter.close();

然而,在 Groovy 中还有更简单的方法可以实现相同的目的,请查看:

  • Groovy 的优点:处理文件 http://mrhaki.blogspot.com/2009/08/groovy-goodness-working-with-files.html
  • Apache Groovy - 为什么以及如何使用它 https://www.blazemeter.com/blog/groovy-new-black
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jmeter JSR223 Sampler - 无法将数据写入 CSV 文件 的相关文章

  • Pandas 读取缺少一个标头的 csv

    我正在尝试使用 Pandas 读取 csv 文件 但第一列包含用逗号分隔的名字和姓氏 这会导致 Pandas 认为有 5 列而不是 4 列 因此最后一列现在没有标题 因此无法选择它 该文件如下所示 CustomerName ClientID
  • 包含多个双引号的 CSV 拆分正则表达式

    我有一个包含文本的 CSV 列数据 每行用双引号分隔 一行中的示例文本类似于此 notice 新行和每行之前的空格是故意的 Lorem ipsum dolor sit amet consectetur adipisicing elit se
  • 逐列读取 CSV 文件

    我想从多列 csv 文件中读取特定列 并使用 Java 在其他 csv 文件中打印这些列 有什么帮助吗 以下是我逐行打印每个标记的代码 但我希望只打印多列 csv 中的几列 import java io BufferedReader imp
  • 在合并的 csv 文件中添加附加列

    我的代码合并 csv 文件并使用 pandas 删除重复项 是否可以向单个合并文件添加带有值的附加标头 应该调用附加标头Host Alias并且应该对应于Host Name E g Host Name is dpc01n1以及相应的Host
  • 如何让石斑鱼和轴一样长?

    对于我的作业 我应该使用 matplotlib 在地图上绘制 20 场飓风的轨迹 但是 当我运行我的代码时 出现错误 AssertionError Grouper and axis must be the same length 这是我的代
  • PhantomJS CPU(核心)受限吗?

    我开始做一些基于并行浏览器的测试 并想看看在达到 100 CPU 之前我可以在 EC2 大型机器上并行运行多少个浏览器 我正在使用 JMeter webdriver 插件来实际运行浏览器 对于 FireFox 实际上每个 CPU 核心有 1
  • 让 csv.Sniffer 使用带引号的值

    我正在尝试使用python 的 CSV 嗅探工具 https docs python org 3 library csv html csv Sniffer正如许多 StackOverflow 答案中所建议的那样 猜测给定的 CSV 文件是否
  • 为什么 com.ibm.jms.JMSTextMessage 类型的变量会打印截断的内容和省略号 (...)?

    我想了解为什么 com ibm jms JMSTextMessage 类型的变量在转换为字符串时会打印出截断的内容和省略号 我在 JMeter 的 JSR223 Sampler 中有以下代码 import com ibm msg clien
  • Python 正确解析 CSV

    我对 Python 很陌生 我想解析 csv 文件 以便它能够识别带引号的值 例如 1997年 福特 E350 超级豪华卡车 应该拆分为 1997 福特 E350 超级豪华卡车 and NOT 1997 福特 E350 超级 豪华卡车 如果
  • 如何通过电子邮件发送保存的 CSV 文件或在 Android 中使用 Google Drive 上传?

    我有一个简单的日志记录应用程序 它将数据收集到三个数组列表中 我想将其保存到 CSV 文件中 然后共享到 Google Drive 电子邮件等 这是我保存数据的方法 StringBuilder data new StringBuilder
  • 如何在 CSV 文件中插入新行?

    我正在创建一个系统 其中涉及创建用于错误记录的 CSV 我当前的代码成功创建了一个具有唯一名称的新文件 然后将现有数据 来自数组 添加到 CSV 中 我遇到的问题是在文件中添加新行 这是维持正确结构所必需的 我现有的代码 current f
  • 如何使用 Python 将表格从 CSV 写入 PDF [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个CSV文件包含下表 users passwords company Admin test psw test cmp test
  • 使用 PHP 将列标题添加到 CSV 文件

    我正在尝试将 php mysql 生成的表转换为可下载的 csv 文件 当用户输入搜索参数时 将调用 mysql 表并将结果作为表返回 我使用了该线程中提供的解决方案 效果非常好 在 PHP 中为用户创建 CSV 文件 https stac
  • 保存的数据带有不需要的引号

    我使用以下代码将数据框导出到 csv data write format com databricks spark csv options delimiter t codec org apache hadoop io compress Gz
  • 将 CSV 文件上传到 SQL 服务器

    上传大文件的最佳方式是什么csv使用 C 将数据文件导入 SQL Server 该文件包含大约 30 000 行和 25 列 首先 你不需要编程的东西 您可以使用 SQL 管理工具直接将 CSV 文件上传到 SQL 数据库 但是 如果您确实
  • 将 csv 写入谷歌云存储

    我试图了解如何将多行 csv 文件写入谷歌云存储 我只是没有遵循文档 https googlecloudplatform github io google cloud python stable storage blobs html hig
  • 如何确定 CSV 文件字段是制表符分隔还是逗号分隔?

    我试图确定 CSV 文件字段是制表符分隔还是逗号分隔 我需要 PHP 验证 我怎样才能确定这一点 现在回答这个问题已经太晚了 但希望它能对某人有所帮助 这是一个简单的函数 它将返回文件的分隔符 function getFileDelimit
  • Scala 和 Spark:Windows 上的 Dataframe.write._

    有人设法使用 Spark 写入文件 尤其是 CSV 吗 数据框 http spark apache org docs latest api scala index html org apache spark sql Dataset在 Win
  • 导入 csv 文件数据以填充 Prolog 知识库

    我有一个 csv 文件example csv其中包含两列 标题为 var1 和 var2 我想填充一个最初为空的 Prolog 知识库文件import pl具有重复的事实 而每一行example csv处理方式相同 fact A1 A2 f
  • 使用jmeter测试多个网站

    如何使用jmeter测试100个不同的网站 来自DMOZ 我认为可以通过将jmeter与脚本集成来完成 基本上 该脚本是告诉 jmeter 从文本或 csv 文件中读取 URL 并将 http 请求采样器更改为文件中的 URL 以运行测试

随机推荐

  • 一旦禁用了 ios 中的空闲计时器(以允许显示器再次休眠),如何重新启用它?

    我已经找到了如何阻止 iOS 设备进入睡眠状态 见下文 但我在撤消该设置时遇到了麻烦 根据苹果文档 https developer apple com documentation uikit uiapplication 1623070 id
  • 在 emacs python-mode 中不正确地退出缩进

    我正在使用 Emacs python 模式 我在我的中使用它来调用它 emacs add to list load path emacs python mode el 6 0 3 autoload python mode python mo
  • 为什么在测试 ui.sender 时,jquery sortable 中的更新事件似乎运行了两次

    我正在使用 jQuery UI sortable 对连接列表进行排序 更新事件似乎运行了两次 这是完整的可排序调用 pageContent sortable handle quesText connectWith pageContent c
  • JavaScript 性能评估 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Jquery如何通过数组中的属性查找对象

    鉴于我有一系列 目的 对象 array of purpose objects var purposeObjects purpose daily purpose weekly purpose monthly 为了简单起见 我省略了其他属性 现
  • 如何使用 classList 获取 React 组件引用来更改其类?

    我已经创建了一个反应组件使用以下代码 在此我创建选项卡并添加类并将其引用存储在全局命名空间接口中以供进一步处理 var TabBody React createClass getInitialState function return cl
  • Metro 应用程序中的异步调用链接

    我对 Metro 开发很陌生 我只希望能够以一种可以理解的方式表达我的问题 实际上我正在将旧应用程序的一部分移植到 Metro 逻辑部分是一个单独的项目 便携式库 它应该服务于 1 旧的 WPF 应用程序和 2 新的 Metro 应用程序
  • Socket.IO确认发货

    在我深入研究代码之前 有人可以告诉我 Socket IO 中是否有任何可用于确认交付的文档吗 以下是我迄今为止收集到的信息 可以提供回调 以便在消息被确认时调用 有一种特殊模式 不稳定 不保证交付 有一个默认模式不是 易失性 的 这给我留下
  • JAVAFX 2.0 如何将滑块中的滑块图标更改为图像?

    我想将图标更改为我的图像 我浏览了 CSS 参考指南 但似乎找不到任何相关内容 有可能吗 无论是使用 CSS 还是通过主 JavaFX 脚本进行声明 都没有关系 看一下示例代码和图像 了解如何在此处呈现自定义滑块音频播放器 http fxe
  • jQuery:使用 carouFredSel 插件进行延迟加载

    我正在尝试对使用以下命令创建的轮播内的图像实现延迟加载卡鲁 弗莱德 塞尔 http caroufredsel dev7studios comjQuery 插件 您有什么建议或者您已经取得了类似的成就吗 默认情况下好像做不到 Stefano
  • Identity 2.0 无效登录尝试

    由于某种原因 我尚未发现 但在成功注册和激活后 我无法使用电子邮件地址登录 而是收到错误 无效登录尝试 由于 ASP NET Identity 2 0 通过使用电子邮件登录进行了改进 因此我修改了注册表单以实际存储真实的用户名 因为现有的注
  • 让 DLL 使用函数指针调用 exe 函数

    谁能告诉我我做错了什么 我正在尝试在不同的线程上运行自定义主程序 这是代码 exe主程序 include dll class h include
  • 为多个类生成单个 WSDL 文件

    我们使用 自下而上 的方法来构建网络服务 我们有 10 个 Java 类 希望将其公开为 Web 服务 我们怎样才能为这些类只创建一个 WSDL 文件呢 java2wsdl实用程序及其 Ant 任务仅使用一个类作为生成 WSDL 文件的参数
  • 为什么 RelayCommands 通常使用延迟初始化?

    当使用约什 史密斯的中继命令 http msdn microsoft com en us magazine dd419663 aspx id0090051 我见过的大多数示例都使用延迟初始化 例如 public class ViewMode
  • defaultdict 的嵌套 defaultdict

    有没有办法使 defaultdict 也成为 defaultdict 的默认值 即无限级递归defaultdict 我希望能够做到 x defaultdict stuff x 0 1 0 所以 我可以做x defaultdict defau
  • Shadow DOM 是否像 React.js 中的 Virtual DOM 一样快?

    在我的项目中实现 Shadow DOM 是否会让它们像 React 使用的虚拟 DOM 一样更快 它们是用于不同目的的不同事物 因此比较性能没有意义 虚拟DOM 虚拟 DOM 旨在避免对 DOM 进行不必要的更改 这种更改在性能方面代价高昂
  • 如何在Python中解决递归关系

    我正在尝试编写代码来给出递归关系的数值答案 该关系本身很简单 定义如下 变量 x 是一个整数 p i p i 2 2 p i 1 2 如果 i gt 0 且 i p 0 p 2 2 如果 i gt x 则 p i 1 这也在这段代码中 fr
  • 如何使用 NUnit 模拟属性?

    如何使用 NUnit 模拟属性 NOTE 我发现这个外围的嘲笑答案 https stackoverflow com questions 591174 how to mock the property which returns the li
  • 如何在 mongodb 中使用构面操作查找字段的不同值

    FilteredAccording 部分和categorizedBy 使用我在链接中提供的查询按预期工作 但我在 findDistinct 部分遇到问题 在 mongodb 中我有以下数据 id 10001 university SPYU
  • Jmeter JSR223 Sampler - 无法将数据写入 CSV 文件

    我正在使用 Jmeter v4 0 r1823414 根据这个答案 https stackoverflow com questions 50820389 unable to set incremental variable in jmete