Автоматизация пропускного контроллера в тесте JMeter? - PullRequest
0 голосов
/ 22 января 2020

Я работаю над проектом, в котором мне нужно автоматизировать тест JMeter как бэкэнд-сервис. Мой план тестирования такой:

Thread Group
 -Throughput Controller1
       --sampler1

 -Throughput controller2
       --sampler2

Одна из моих примеров реализации пропускной способности выглядит следующим образом. Здесь то, что я делаю, это сначала устанавливаю количество потоков для подсчета 10, а затем я хочу контролировать его для счетчика потоков 3 и других 7 для другого сэмплера.

TestPlan testPlan = new TestPlan();
testPlan.setProperty(TestElement.TEST_CLASS, TestPlan.class.getName());
testPlan.setProperty(TestElement.GUI_CLASS, TestPlanGui.class.getName());
testPlan.setUserDefinedVariables((Arguments) new ArgumentsPanel().createTestElement());

SetupThreadGroup threadGroup = new SetupThreadGroup();
threadGroup.setRampUp(1);
threadGroup.setNumThreads(10);

ThroughputController throughputController = new ThroughputController();
throughputController.setComment("Through Put");
throughputController.setName("Through put");
throughputController.setMaxThroughput(3);
throughputController.setStyle(1);
   :
   :
   :
HTTPSamplerProxy examplecomSampler = loadTestSampler(urlDetails);

ListedHashTree testPlanTree = new ListedHashTree();
HashTree tpConfig = testPlanTree.add(testPlan);
HashTree tgConfig = tpConfig.add(threadGroup);
tgConfig.add(throughputController);
tgConfig.add(examplecomSampler)

Когда я запускаю все 10 потоков, вызывающих examplecomSampler. но я хочу ограничить это 3, а другие 7 другим сэмплером. Почему это так?

Спасибо.

1 Ответ

1 голос
/ 22 января 2020

Я не думаю, что ваш способ инициализации контроллера пропускной способности правильный, более того, трудно сказать, что еще не так, не видя полного кода вашего класса.

Имейте в виду, что вы должны создавать планы тестирования JMeter с использованием JMeter GUI, другие способы официально не поддерживаются, однако вы можете попробовать использовать такие инструменты-оболочки, как Taurus

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


Если вы все еще хотите go в этом направлении программирования c создание сценария JMeter, пример плана тестирования с 2 контроллерами пропускной способности и 2 пробоотборниками, настроенными на 30% и 70% соответственно выполнение будет выглядеть примерно так:

HashTree testPlanTree = new HashTree();

HTTPSamplerProxy examplecomSampler = new HTTPSamplerProxy();
examplecomSampler.setDomain("example.com");
examplecomSampler.setPort(80);
examplecomSampler.setPath("/");
examplecomSampler.setMethod("GET");
examplecomSampler.setName("Open example.com");
examplecomSampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
examplecomSampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());

HTTPSamplerProxy blazemetercomSampler = new HTTPSamplerProxy();
blazemetercomSampler.setDomain("blazemeter.com");
blazemetercomSampler.setPort(80);
blazemetercomSampler.setPath("/");
blazemetercomSampler.setMethod("GET");
blazemetercomSampler.setName("Open blazemeter.com");
blazemetercomSampler.setProperty(TestElement.TEST_CLASS, HTTPSamplerProxy.class.getName());
blazemetercomSampler.setProperty(TestElement.GUI_CLASS, HttpTestSampleGui.class.getName());

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

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

ThroughputController throughputController3 = new ThroughputController();
throughputController3.setComment("Through Put 3");
throughputController3.setName("Through put 3");
FloatProperty throughput3 = new FloatProperty();
throughput3.setName("ThroughputController.percentThroughput");
throughput3.setValue(30.0f);
throughputController3.setProperty(throughput3);
throughputController3.setProperty("ThroughputController.style", 1);
throughputController3.setProperty("ThroughputController.perThread", false);
throughputController3.setProperty(TestElement.TEST_CLASS, ThroughputController.class.getName());
throughputController3.setProperty(TestElement.GUI_CLASS, ThroughputControllerGui.class.getName());

ThroughputController throughputController7 = new ThroughputController();
throughputController7.setComment("Through Put 7");
throughputController7.setName("Through put 7");
FloatProperty throughput7 = new FloatProperty();
throughput7.setName("ThroughputController.percentThroughput");
throughput7.setValue(70.0f);
throughputController7.setProperty(throughput7);
throughputController7.setProperty("ThroughputController.style", 1);
throughputController7.setProperty("ThroughputController.perThread", false);
throughputController7.setProperty(TestElement.TEST_CLASS, ThroughputController.class.getName());
throughputController7.setProperty(TestElement.GUI_CLASS, ThroughputControllerGui.class.getName());

HashTree logicHashTree = new HashTree();

HashTree throughputController3Tree = new HashTree();
HashTree exampleComHashTree = new HashTree();

exampleComHashTree.add(examplecomSampler);
throughputController3Tree.add(throughputController3);
throughputController3Tree.add(throughputController3, exampleComHashTree);

HashTree throughputController7Tree = new HashTree();
HashTree blazemeterComHashTree = new HashTree();

blazemeterComHashTree.add(blazemetercomSampler);
throughputController7Tree.add(throughputController7);
throughputController7Tree.add(throughputController7, blazemeterComHashTree);


logicHashTree.add(throughputController3Tree);
logicHashTree.add(throughputController7Tree);

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

testPlanTree.add(testPlan);
HashTree threadGroupHashTree = testPlanTree.add(testPlan, threadGroup);
threadGroupHashTree.add(logicHashTree);

Извлечение Пять способов запуска теста JMeter без использования статьи JMeter GUI для получения дополнительной информации о различных способах запуска теста JMeter включая создание с нуля, используя язык Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...