Java 如何在代码中从JMeter测试计划中读取变量?

Java 如何在代码中从JMeter测试计划中读取变量?,java,jmeter,Java,Jmeter,在java代码中,如何访问存储在JMeter测试计划(jmx文件)中的值?特别是尝试获取ThreadGroup.num_线程,以便我的测试代码可以知道测试中使用了多少线程 谢谢你的回复。以下是我最终使用的代码: int testThreadCount = 0; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.ne

在java代码中,如何访问存储在JMeter测试计划(jmx文件)中的值?特别是尝试获取ThreadGroup.num_线程,以便我的测试代码可以知道测试中使用了多少线程

谢谢你的回复。以下是我最终使用的代码:

    int testThreadCount = 0;
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document testPlanFile = builder.parse(new File("path/to/testplan.jmx"));
    NodeList nodes = testPlanFile.getElementsByTagName("stringProp");
    for (int i = 0; i < nodes.getLength(); ++i)
    {
        Node node = nodes.item(i);
        Element element = (Element)node;
        String propName = element.getAttribute("name");
        if (propName.equals("ThreadGroup.num_threads"))
        {
            testThreadCount = Integer.parseInt(element.getChildNodes().item(0).getNodeValue());
            break;
        }
    }
int testThreadCount=0;
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
DocumentBuilder=factory.newDocumentBuilder();
文档testPlanFile=builder.parse(新文件(“path/to/testplan.jmx”);
NodeList节点=testPlanFile.getElementsByTagName(“stringProp”);
对于(int i=0;i
在扩展
AbstractJavaSamplerClient
的自定义java采样器中,您可以访问
JavaSamplerContext
对象,该对象公开了一系列运行时属性

@Override
public SampleResult runTest(JavaSamplerContext context) {
    ...
    // get parameters:
    String urlString = context.getParameter( "paramName" );
    ...
}
您可以在运行时从获取线程信息。当前活动线程数为

JMeterContextService.getNumberOfThreads()

在扩展
AbstractJavaSamplerClient
的自定义java采样器中,您可以访问
JavaSamplerContext
对象,该对象公开了一系列运行时属性

@Override
public SampleResult runTest(JavaSamplerContext context) {
    ...
    // get parameters:
    String urlString = context.getParameter( "paramName" );
    ...
}
您可以在运行时从获取线程信息。当前活动线程数为

JMeterContextService.getNumberOfThreads()
  • Java方式(如果要使用从.jmx文件获取值)

    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder=builderFactory.newDocumentBuilder();
    documentxmldocument=builder.parse(新文件(“/path/to/test.jmx”);
    XPath=XPathFactory.newInstance().newXPath();
    字符串表达式=“//hashTree/ThreadGroup/stringProp[@name='ThreadGroup.num_threads']]/text();
    NodeList matches=(NodeList)xPath.compile(expression.evaluate(xmlDocument,XPathConstants.NODESET);
    对于(int i=0;i
  • JMeter方式(如果使用)

    JMeterUtils.loadJMeterProperties(“/path/to/jmeter.properties”);
    setJMeterHome(“/path/to/jmeter”);
    JMeterUtils.initLogging();
    JMeterUtils.initLocale();
    SaveService.loadProperties();
    StandardJMeterEngine jmeter=新的StandardJMeterEngine();
    HashTree-testPlanTree=SaveService.loadTree(新文件(“/path/to/test.jmx”);
    JMeterTreeModel treeModel=新JMeterTreeModel(新对象());
    JMeterTreeNode root=(JMeterTreeNode)treeModel.getRoot();
    添加子树(testPlanTree,root);
    SearchByClass threadGroups=新的SearchByClass(ThreadGroup.class);
    testPlanTree.traverse(线程组);
    集合threadGroupsRes=threadGroups.getSearchResults();
    对于(ThreadGroup ThreadGroup:threadGroupsRes){
    System.out.println(threadGroup.getProperty(“threadGroup.num_threads”);
    }
    
  • Java方式(如果要使用从.jmx文件获取值)

    DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder=builderFactory.newDocumentBuilder();
    documentxmldocument=builder.parse(新文件(“/path/to/test.jmx”);
    XPath=XPathFactory.newInstance().newXPath();
    字符串表达式=“//hashTree/ThreadGroup/stringProp[@name='ThreadGroup.num_threads']]/text();
    NodeList matches=(NodeList)xPath.compile(expression.evaluate(xmlDocument,XPathConstants.NODESET);
    对于(int i=0;i
  • JMeter方式(如果使用)

    JMeterUtils.loadJMeterProperties(“/path/to/jmeter.properties”);
    setJMeterHome(“/path/to/jmeter”);
    JMeterUtils.initLogging();
    JMeterUtils.initLocale();
    SaveService.loadProperties();
    StandardJMeterEngine jmeter=新的StandardJMeterEngine();
    HashTree-testPlanTree=SaveService.loadTree(新文件(“/path/to/test.jmx”);
    JMeterTreeModel treeModel=新JMeterTreeModel(新对象());
    JMeterTreeNode root=(JMeterTreeNode)treeModel.getRoot();
    添加子树(testPlanTree,root);
    SearchByClass threadGroups=新的SearchByClass(ThreadGroup.class);
    testPlanTree.traverse(线程组);
    集合threadGroupsRes=threadGroups.getSearchResults();
    对于(ThreadGroup ThreadGroup:threadGroupsRes){
    System.out.println(threadGroup.getProperty(“threadGroup.num_threads”);
    }
    

  • 你的意思是在自定义java采样器中吗?你的意思是在自定义java采样器中吗?当我尝试使用
    JMeterContextService.getNumberOfThreads()
    JMeterContextService.getTotalThreads()
    时,我第一次只看到0,第二次看到1或0,甚至当我将jmeter线程组配置为7个线程时。当我尝试
    JMeterContextService.getNumberOfThreads()
    JMeterContextService.getTotalThreads()
    时,我只看到第一个线程为0,第二个线程为1或0,即使我将jmeter线程组配置为7个线程。