2017-02-20 2 views
1

Я создал JMeter Java-запрос и скопировал каталог jar в ext (apache-jmeter-3.1\lib\ext). Я пытаюсь запустить тест на удаленной машине. Из графического интерфейса я могу настроить и запустить запрос Java. Также можно вызвать тест через Java-код, используя JMX-файл, как показано ниже.Создание нового теста JMeter Чисто в Java для Java Sampler

ClientJMeterEngine jmeter = new ClientJMeterEngine("myclient"); 
File file = new File(RemoteJmeterTest.class.getResource("/finalSample.jmx").getFile()); 
JMeterUtils.loadJMeterProperties("D:/apache-jmeter-3.1/bin/jmeter.properties"); 
JMeterUtils.setJMeterHome("D:/Tools/apache-jmeter-3.1"); 

HashTree testPlanTree = SaveService.loadTree(file); 
jmeter.configure(testPlanTree); 
jmeter.runTest(); 

Теперь я хочу создать новый тест JMeter Purely на Java. Но я не знаю, как настроить сэмплер Java. Я вижу пример here, указывающий, как настроить HTTP-пробоотборник. Вместо HTTPSampler мне нужно настроить свой Java-запрос. Пожалуйста, помогите.

ответ

1

Пример кода для добавления Java Request пробник, который будет выполнять SleepTest будет выглядеть следующим образом:

JavaSampler javaSampler = new JavaSampler(); 
javaSampler.setName("Java Request"); 
javaSampler.setClassname("org.apache.jmeter.protocol.java.test.SleepTest"); 
Arguments arguments = new Arguments(); 
arguments.addArgument("SleepTime", "1000"); 
arguments.addArgument("SleepMask", "0x33F"); 
javaSampler.setArguments(arguments); 
javaSampler.setProperty(TestElement.TEST_CLASS, JavaSampler.class.getName()); 
javaSampler.setProperty(TestElement.GUI_CLASS, JavaTestSamplerGui.class.getName()); 

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

Полный код на всякий случай:

import org.apache.jmeter.config.Arguments; 
import org.apache.jmeter.config.gui.ArgumentsPanel; 
import org.apache.jmeter.control.LoopController; 
import org.apache.jmeter.control.gui.LoopControlPanel; 
import org.apache.jmeter.control.gui.TestPlanGui; 
import org.apache.jmeter.engine.StandardJMeterEngine; 
import org.apache.jmeter.protocol.java.control.gui.JavaTestSamplerGui; 
import org.apache.jmeter.protocol.java.sampler.JavaSampler; 
import org.apache.jmeter.reporters.ResultCollector; 
import org.apache.jmeter.reporters.Summariser; 
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; 

import java.io.File; 
import java.io.FileOutputStream; 


public class JMeterFromScratch { 

    public static void main(String[] args) throws Exception { 
     //JMeter Engine 
     StandardJMeterEngine jmeter = new StandardJMeterEngine(); 

     //JMeter initialization (properties, log levels, locale, etc) 
     JMeterUtils.loadJMeterProperties("C:/jmeter/bin/jmeter.properties"); 
     JMeterUtils.setJMeterHome("C:/jmeter"); 
     //JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level 
     JMeterUtils.initLocale(); 

     // JMeter Test Plan 
     HashTree testPlanTree = new HashTree(); 

     // Java Request 
     JavaSampler javaSampler = new JavaSampler(); 
     javaSampler.setName("Java Request"); 
     javaSampler.setClassname("org.apache.jmeter.protocol.java.test.SleepTest"); 
     Arguments arguments = new Arguments(); 
     arguments.addArgument("SleepTime", "1000"); 
     arguments.addArgument("SleepMask", "0x33F"); 
     javaSampler.setArguments(arguments); 
     javaSampler.setProperty(TestElement.TEST_CLASS, JavaSampler.class.getName()); 
     javaSampler.setProperty(TestElement.GUI_CLASS, JavaTestSamplerGui.class.getName()); 


     // Loop Controller 
     TestElement loopController = new LoopController(); 
     ((LoopController) loopController).setLoops(1); 
     loopController.addTestElement(javaSampler); 
     ((LoopController) loopController).setFirst(true); 
     loopController.setProperty(TestElement.TEST_CLASS, LoopController.class.getName()); 
     loopController.setProperty(TestElement.GUI_CLASS, LoopControlPanel.class.getName()); 
     ((LoopController) loopController).initialize(); 

     // Thread Group 

     ThreadGroup threadGroup = new ThreadGroup(); 
     threadGroup.setNumThreads(1); 
     threadGroup.setRampUp(1); 
     threadGroup.setName("Thread Group"); 
     threadGroup.setSamplerController(((LoopController) loopController)); 
     threadGroup.setProperty(TestElement.TEST_CLASS, ThreadGroup.class.getName()); 
     threadGroup.setProperty(TestElement.GUI_CLASS, ThreadGroupGui.class.getName()); 

     // Test Plan 
     TestPlan testPlan = new TestPlan("Create JMeter Script From Java Code"); 
     testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName()); 
     testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName()); 
     testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel().createTestElement()); 

     // Construct Test Plan from previously initialized elements 
     testPlanTree.add(testPlan); 
     HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup); 
     threadGroupHashTree.add(javaSampler); 


     // save generated test plan to JMeter's .jmx file format 
     SaveService.saveTree(testPlanTree, new FileOutputStream("test.jmx")); 

     //add Summarizer output to get test progress in stdout like: 
     // summary =  2 in 1.3s = 1.5/s Avg: 631 Min: 290 Max: 973 Err:  0 (0.00%) 
     Summariser summer = null; 
     String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary"); 
     if (summariserName.length() > 0) { 
      summer = new Summariser(summariserName); 
     } 


     // Store execution results into a .jtl file 
     String logFile = "test.jtl"; 
     ResultCollector logger = new ResultCollector(summer); 
     logger.setFilename(logFile); 
     testPlanTree.add(testPlanTree.getArray()[0], logger); 

     // Run Test Plan 
     jmeter.configure(testPlanTree); 
     jmeter.run(); 

     System.out.println("Test completed. See test.jtl file for results"); 
     System.out.println("JMeter .jmx script is available at test.jmx"); 
     System.exit(0); 
    } 
} 

См Five Ways To Launch a JMeter Test without Using the JMeter GUI для всесторонней информации о различных способах запуска теста JMeter.

+0

Большое спасибо. Это сработало. Я использовал 'ClientJMeterEngine' для запуска его на удаленном сервере Jmeter. –

Смежные вопросы