尝试使用 JMeter API 生成 JMeter 测试计划 (jmx):从代码创建的 jmeter jmx 文件与 JMeter 创建的文件不匹配

2024-04-17

我正在尝试使用 jmeter java api 创建 jmeter jmx 文件。这就是我所做的,

  1. gui.jmx

使用 jmeter gui 应用程序创建一个参考 jmx 文件,我可以将其进行比较。对于测试计划,我仅添加一个线程组和线程组内的 java 采样器。所有值均为默认值。

  1. code.jmx

使用 jmeter java api,我创建一个包含测试计划、线程组和 java 采样器的 jmx 文件。所有值均按照情况 1 设置。

从代码创建 jmx 文件后,我注意到以下差异,

1)gui.jmx中的节点在code.jmx中替换为以下内容

    <org.apache.jorphan.collections.HashTree>

虽然这不是问题,但在 GUI 保存时是否可以以某种方式生成以下标签

    <hashTree>

2) 测试元素节点包含 gui.jmx 中的属性“guiClass”和“testClass”,例如 这些属性不是在 code.jmx 中生成的,我也没有找到任何 API 来显式设置它们-> 因此,生成的 code.jmx 不会在 jmeter gui 控制台中打开。这可能意味着生成的 jmx 只能在非控制台模式下使用。这是设计使然吗?有没有什么方法可以使用 jmeter api 通过代码添加这些属性? (不使用 DOM 作为 hack)

3)gui.jmx的xml结构如下,

    <hashTree>
    <TestPlan ...>
    ...
    </TestPlan>
    <hashTree>
    <ThreadGroup ...>
    ...
    </ThreadGroup>
    **<hashTree/>**
    </hashTree>
</hashTree>

请注意 HashTree 元素的嵌套。当它在 JMeter GUI 中打开时,元素相互嵌套。

code.jmx的xml结构如下,

<org.apache.jorphan.collections.HashTree>
    <TestPlan ...>
    ...
    </TestPlan>
    **<org.apache.jorphan.collections.HashTree/>**
    <ThreadGroup ...>
    ...
    </ThreadGroup>
    **<org.apache.jorphan.collections.HashTree/>**
</org.apache.jorphan.collections.HashTree>

请注意标签位置的差异。没有嵌套。他们都处于同一水平。为什么会出现这种情况。使用 jmx api 添加测试元素以便哈希树元素像第一种情况一样相互嵌套的正确方法是什么?


最后,在查看了 jmeter 源代码之后,我发现除了我正在做的事情之外,我还需要显式设置 guiClass 和 testClass 参数

testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName()); testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());

对于其他测试元素(如 ThreadGroup、JavaSampler 等)也是如此。

完整代码如下,

package com.test;

import java.io.FileOutputStream;

import org.apache.jmeter.control.LoopController;
import org.apache.jmeter.control.gui.LoopControlPanel;
import org.apache.jmeter.control.gui.TestPlanGui;
import org.apache.jmeter.protocol.java.control.gui.JavaTestSamplerGui;
import org.apache.jmeter.protocol.java.sampler.JavaSampler;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.threads.ThreadGroup;
import org.apache.jmeter.threads.gui.ThreadGroupGui;
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jorphan.collections.HashTree;

public class JMXCreator {
    public static void main(String[] argv) throws Exception {
        // Initialize the configuration variables
        String jmeterHome = "D:\\apache-jmeter-2.11";
        JMeterUtils.setJMeterHome(jmeterHome);
        JMeterUtils.loadJMeterProperties(JMeterUtils.getJMeterBinDir()
                + "\\jmeter.properties");
        JMeterUtils.initLogging();
        JMeterUtils.initLocale();

        // TestPlan
        TestPlan testPlan = new TestPlan();
        testPlan.setName("Test Plan");
        testPlan.setEnabled(true);
        testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());
        testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());

        // ThreadGroup controller
        LoopController loopController = new LoopController();
        loopController.setEnabled(true);
        loopController.setLoops(5);
        loopController.setProperty(TestElement.TEST_CLASS,
                LoopController.class.getName());
        loopController.setProperty(TestElement.GUI_CLASS,
                LoopControlPanel.class.getName());

        // ThreadGroup
        ThreadGroup threadGroup = new ThreadGroup();
        threadGroup.setName("Thread Group");
        threadGroup.setEnabled(true);
        threadGroup.setSamplerController(loopController);
        threadGroup.setNumThreads(5);
        threadGroup.setRampUp(10);
        threadGroup.setProperty(TestElement.TEST_CLASS,
                ThreadGroup.class.getName());
        threadGroup.setProperty(TestElement.GUI_CLASS,
                ThreadGroupGui.class.getName());

        // JavaSampler
        JavaSampler javaSampler = new JavaSampler();
        javaSampler.setClassname("my.example.sampler");
        javaSampler.setEnabled(true);
        javaSampler.setProperty(TestElement.TEST_CLASS,
                JavaSampler.class.getName());
        javaSampler.setProperty(TestElement.GUI_CLASS,
                JavaTestSamplerGui.class.getName());

        // Create TestPlan hash tree
        HashTree testPlanHashTree = new HashTree();
        testPlanHashTree.add(testPlan);

        // Add ThreadGroup to TestPlan hash tree
        HashTree threadGroupHashTree = new HashTree();
        threadGroupHashTree = testPlanHashTree.add(testPlan, threadGroup);

        // Add Java Sampler to ThreadGroup hash tree
        HashTree javaSamplerHashTree = new HashTree();
        javaSamplerHashTree = threadGroupHashTree.add(javaSampler);

        // Save to jmx file
        SaveService.saveTree(testPlanHashTree, new FileOutputStream(
                "d:\\test.jmx"));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用 JMeter API 生成 JMeter 测试计划 (jmx):从代码创建的 jmeter jmx 文件与 JMeter 创建的文件不匹配 的相关文章

  • Apache JMeter 的 Cookie 管理器未将 cookie 添加到 POST 请求

    我制定了非常简单的测试计划 登录 POST 返回会话cookie 获取状态 GET 返回用户状态 创建资源 POST 为资源提供 JSON 正文 所以我的 测试计划 如下所示 Test Plan Thread Group HTTP 请求默认
  • 负载测试kafka消费者

    我正在编辑问题 因为我认为它不够清楚 如何对我的 kafka 消费者进行负载测试 我看过很多关于 apache kafka 负载测试的文章 但没有一篇关于消费者负载测试的文章 对于前 我在jsr223中编写了jmeter kafka生产者测
  • 如何监控 Tomcat 服务器上的多个 Web 应用程序(使用 JMX)?

    有没有办法监控单个 Web 应用程序的 CPU 和内存消耗Tomcat server I have Tomcat打开其 JVM 下的所有 Web 应用程序 因此我只能看到一个 JVM 无法单独监控每个 Web 应用程序 Web 应用程序是密
  • 通过 Jmeter 从 Phantomjs 收集客户端性能指标

    在整个 PhantonJS 驱动程序配置中 我们有什么方法可以通过 phantomjs 使用 Jmeter DomLoad WindLoad ResourceCount 资源大小来捕获以下客户端性能指标 Thanks 我建议使用捕获指标WD
  • 使用 JMeter 时陷入嵌套循环。嵌套循环控制器和 CSV 数据集配置。

    在我的网站上 我有两个商家操作 搜索和浏览 一次搜索通常会触发三次浏览 我有一个 JMeter 测试 它使用商家和商家 ID 号的 CSV 文件 在大规模运行此测试时 我希望使用我网站上的所有商家 我已经在 J Meter 中映射了它 如下
  • 为什么 com.ibm.jms.JMSTextMessage 类型的变量会打印截断的内容和省略号 (...)?

    我想了解为什么 com ibm jms JMSTextMessage 类型的变量在转换为字符串时会打印出截断的内容和省略号 我在 JMeter 的 JSR223 Sampler 中有以下代码 import com ibm msg clien
  • 在 JMETER 中循环遍历 JSON 响应 +

    我正在使用 Jmeter 进行性能测试并卡在以下点 我从 Webapi 收到 JSON 响应 如下所示 PersonInfoList Person 0 id 1 name Steve 1 Person id 2 name Mark 我需要根
  • JMeter:tearDown Thread Group的目的是什么

    我想了解JMeter中tearDown Thread Group的实际用法 在什么场景下可以使用tearDown Thread Group 根据提供的帮助JMeter 拆解线程组 http jmeter apache org userman
  • 如何使用jmeter统计失败的请求

    我在跑步JMeter我想要统计所有失败的请求 这些请求要么超时 要么只是失败 我看到一些侦听器显示出现了失败 但没有人看到有一个字段显示失败请求与成功请求的总数 有谁知道我如何轻松获取这些数据而不必手动计算每次失败 要检查失败响应的数量 请
  • 手动设置Jmeter主目录

    根据这个帖子 http jmeter 512774 n5 nabble com Automatic generation of aggregate reports td4281459 html Jmeter home被自动检测到 有没有办法
  • XPath JMeter 断言:错误“前缀必须解析为命名空间”

    我正在尝试使用JMeter XPath 断言 https jmeter apache org usermanual component reference html XPath Assertion使用 XPath 断言命令对标签值进行如下操
  • 重写 jmeter.properties

    是否可以在不关闭并重新启动JMeter的情况下重新读取jmeter properties 也许有任何额外的类会触发这个过程 有时我需要使用属性的值 并且每次都重新启动 JMeter 并不方便 所以我想自动化此过程 无需从文件中重新读取 jm
  • Jmeter 和 Bitbucket 服务器负载测试

    我是 Jmeter 的新手 我有一个本地托管的 Bitbucket 服务器 有时 当 Bamboo plan 触发并发 git 克隆操作时 会发现 Bitbucket 服务器变得缓慢 无响应 我必须重新启动服务 我想通过对另一个本地创建的
  • 使用 SOAP 调用 WCF 服务

    我正在尝试在不创建 WCF 客户端的情况下测试 WCF 服务 我有类似的代码 问题here https stackoverflow com a 1643025 1397017 我希望完全控制 SOAP 负载 因此我希望能够发出我自己的 We
  • JMeter 为子功能添加 Think Time

    在 JMeter 中 当我右键单击 线程 控制器 时 我有一个选项 Add Think Time to children功能 当我点击它时 我会看到每个采样器Test Action暂停与Uniform Random Timer随机延迟 10
  • 如何使用JMeter对网站进行负载测试

    我想在 JMeter 中创建一个脚本来模拟100 位用户在 3 4 分钟内访问我们的网站 我们需要测试我们的应用程序是否可以允许 25 000 个用户 天 即每小时 1 100 个用户 为此我做了这个 Jmeter 测试 这是结果 这是图表
  • 在jmeter中运行beanshell脚本时无法导入com.paytm.merchant.CheckSumServiceHelper

    我是 Jmeter 的 JSR223 预处理器的新手 我们刚刚将 Paytm 的支付网关集成到我们的产品中 并且必须使用 Jmeter 运行负载测试 我们必须使用一组值生成校验和 然后将其注入到我们的 Json 负载中 我正在使用 Java
  • Cloud SQL 间歇性通信链路失败

    我在用着jmeter对使用 Cloud SQL 的 GAME Web 服务进行压力测试 我收到间歇性通信链接失败异常 我尝试过使用直接连接和连接池 并且在这两种情况下都看到了异常 随着每秒请求数的增加 异常也会增加 请注意 我们使用的是最高
  • 如何更改tomcat jmx密码的文件权限

    我正在尝试保护 Windows 平台上托管的本地 tomcat 实例上的 JMX 访问 我已经创建了访问权限和密码文件 并使用以下 VM 参数插入这些文件 Dcom sun management jmxremote password fil
  • 使用 JMX 运行 Hibernate 4.3(无 spring)

    我正在使用 Hibernate 4 3 和 Guice 1 0 运行 java webapp wicket 6 13 我正在尝试配置 Hibernate 以便可以通过 JMX 框架访问运行时信息 I m not使用 spring 任何人都可

随机推荐

  • R 中 foreach() 内的 try() 问题

    我正在尝试使用try 函数来处理并行 for 循环中发生的错误 results lt foreach i 1 2 errorhandling remove dopar res lt try myfun i TRUE with myfun l
  • clang:自定义属性在 AST 中不可见

    我按照官方手册中的描述在 clang 中实现了一个自定义属性 http clang llvm org docs InternalsManual html how to add an attribute http clang llvm org
  • VBA代码导入

    我有一个用 excel 做的 VBA 项目 我将有许多工作簿将使用相同的代码 并且如果我进行更改 我不想将代码复制到所有工作簿 是否有办法将代码放在一个中心位置 然后让所有工作簿访问该代码 是的 你有两个选择 1 将代码复制并粘贴到个人工作
  • 按钮触发单击事件两次

    似乎有时 但并非总是 我的按钮单击事件被触发两次 事实上 这种情况似乎有时会发生 但并非总是如此 这让我很困惑 这是我的按钮
  • 如何使用 PHP 获取表单身份验证票证的内容

    我需要在 PHP 中撤消以下 ASP Net 进程 以便可以获取票证中的用户名和到期日期 我已经解密了 3DES 加密 下面的步骤 3 但我不确定下一步需要做什么 解密得到的字符串是字节数组吗 我应该能够将其转换为ascii 吗 因为事实并
  • 如何访问symfony2全局帮助函数(服务)中的服务容器?

    这个问题一开始我不明白为什么我不能将变量传递给 symfony2 全局辅助函数 服务 但是感谢比我更聪明的人 我意识到我的错误是尝试在一个类中使用 security context 而该类没有没有注射所以 这是最终的结果 即有效的代码 我没
  • 最顶部和最底部的水平分隔线未显示在 ListView 中

    我正在使用列表视图 但最顶部和最底部的水平条不显示 为什么 我正在使用这个 android divider android drawable divider horizontal bright 添加虚拟页脚和页眉 listViewConta
  • 按月分组的 SQL 结果

    我正在尝试返回滚动 12 个月期间的一些结果 例如 MONTH IN OUT January 210 191 February 200 111 March 132 141 April 112 141 May 191 188 etc 如何将结
  • 在 Go 模板中使用包含内部范围 (helm)

    我有一个模板 可以使用以下命令渲染多次range迭代 我可以访问变量外部变量 例如 Release Name没有问题 但是 当我包含模板时 我无法让它工作 range key val Values resources annotations
  • jQuery 每个都返回 [object Object]

    我的问题是 html 变量返回如下所示的内容 object Object object Object object Object object Object object Object 而不是元素 我应该做什么不同的事情 var html
  • SwiftMailer 不发送邮件,为什么?

    SwiftMail 不发送我的电子邮件 而mail 确实有效 与 一样here https stackoverflow com questions 3552937 swiftmailer wont send mail but mail wi
  • mongodb,复制和错误:{“$err”:“不是master和slaveOk = false”,“code”:13435}

    我第一次尝试 mongo 副本集 我在 ec2 上使用 ubuntu 并启动了三个实例 我使用了每个实例的私有 IP 地址 我选择作为主要的 下面是代码 mongo host Private IP Address rs initiate r
  • 在 Go 泛型中,如何对联合约束中的类型使用通用方法?

    我试图了解 Go 泛型 v1 18 中类型联合约束的用法 这是我尝试过的代码 type A struct type B struct type AB interface A B func a A some bool return true
  • 配置Tomcat使用属性文件加载DB连接信息

    创建从属性文件读取配置参数的 Tomcat 部署的可接受做法是什么 如果能够提供 WAR 文件并指定客户端只需在特定目录中创建或编辑属性文件 那就太好了 这是一种比较常规的做事方式吗 还有比这更好的方法吗 我们经常通过提供 WAR 和 Co
  • 字大小及其指示

    请参阅下面关于各种指令集架构中的字长以及它与汇编语言的关系的问题 感谢您提供的所有帮助 先说几个事实 如有错误 请指正 处理器架构的字长表示 编辑 其中一些是错误的 请参阅下面 Seva 的帖子 每个寄存器的最大尺寸 每个内存地址的最大尺寸
  • 如何定义Titan Graph DB Vertex的数据类型?

    我正在使用 Titan 和 Blueprint API 创建图形数据表 我使用 HBase 作为后端 我知道如何定义关键索引的数据类型 Example TitanKey name graph makeType name name dataT
  • 如何创建可以分发或打包的可执行jar文件?

    我在用getdown https github com threerings getdown wiki创建更新 java 应用程序的方法 当我完成本教程后 我测试了它是否可以在命令行上运行 如下所示 java jar c downloads
  • android - 使用 glide 时图像质量较低

    我是 Android 开发新手 在我的应用程序中 我有一个horizontalScrollView包含图像 后来我一直使用Picasso从URL加载图像 然后我听说了 glide 所以我切换到 glide 现在我的图像加载速度很快 但图像质
  • 我可以在 DBIx::Class 中漂亮地打印 DBIC_TRACE 输出吗?

    将 DBIC TRACE 环境变量设置为 true BEGIN ENV DBIC TRACE 1 生成非常有用的输出 特别是显示正在执行的 SQL 查询 但 SQL 查询全部在一行中 有没有办法将它推入某种 sql tidy 例程以更好地格
  • 尝试使用 JMeter API 生成 JMeter 测试计划 (jmx):从代码创建的 jmeter jmx 文件与 JMeter 创建的文件不匹配

    我正在尝试使用 jmeter java api 创建 jmeter jmx 文件 这就是我所做的 gui jmx 使用 jmeter gui 应用程序创建一个参考 jmx 文件 我可以将其进行比较 对于测试计划 我仅添加一个线程组和线程组内