gpt4 book ai didi

java - 让 Jedis 与 JMeter 引擎一起工作

转载 作者:可可西里 更新时间:2023-11-01 11:27:08 26 4
gpt4 key购买 nike

我想使用 Apache JMeter 提供的 API 从 Java 程序创建和运行测试脚本,以使用 Jedis 插件测试 Redis 服务器。我有 2 段代码:创建并运行 JMeter 测试计划和一些我想实际执行的 Jedis 命令。而且我不知道如何将它们组合在一起。请建议我如何将这些 Jedis 命令包含在 JMeter 测试计划中执行:

== JMeter 代码==

        // Engine
StandardJMeterEngine jm = new StandardJMeterEngine();
// jmeter.properties
JMeterUtils.loadJMeterProperties("c:/tmp/jmeter.properties");

HashTree hashTree = new HashTree();

// HTTP Sampler
HTTPSampler httpSampler = new HTTPSampler();
httpSampler.setDomain("www.google.com");
httpSampler.setPort(80);
httpSampler.setPath("/");
httpSampler.setMethod("GET");

// Loop Controller
TestElement loopCtrl = new LoopController();
((LoopController)loopCtrl).setLoops(1);
((LoopController)loopCtrl).addTestElement(httpSampler);
((LoopController)loopCtrl).setFirst(true);

// Thread Group
SetupThreadGroup threadGroup = new SetupThreadGroup();
threadGroup.setNumThreads(1);
threadGroup.setRampUp(1);
threadGroup.setSamplerController((LoopController)loopCtrl);

// Test plan
TestPlan testPlan = new TestPlan("MY TEST PLAN");

hashTree.add("testPlan", testPlan);
hashTree.add("loopCtrl", loopCtrl);
hashTree.add("threadGroup", threadGroup);
hashTree.add("httpSampler", httpSampler);

jm.configure(hashTree);

jm.run();

==绝地代码==

    private static final String LOCAL_HOST = "localhost";
private static final int PORT = 6379;

private final JedisPool m_jedisPool;
private Jedis m_jedis;

m_jedisPool = new JedisPool(new JedisPoolConfig(), LOCAL_HOST, PORT)

void test() {
m_jedis = m_jedisPool.getResource();
m_jedis.flushAll();

// Run test
Jedis jedis = getExistingJedisInstance();
jedis.set(TEST_KEY, TEST_VALUE).equals("OK");

// After test;
m_jedis.close();
m_jedisPool.destroy();
}

附言我知道 Redis 数据集插件,但它对我不起作用,因为它不支持设置命令。

最佳答案

您可以添加 JSR223 Sampler并将你的 Jedis 代码放在那里(只要确保你在类路径中有所有必要的依赖 .jars)

以编程方式将采样器添加到测试计划的相关代码如下所示:

import java.io.File;
import java.io.FileOutputStream;
import java.util.UUID;
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.sampler.JSR223Sampler;
import org.apache.jmeter.reporters.ResultCollector;
import org.apache.jmeter.reporters.Summariser;
import org.apache.jmeter.save.SaveService;
import org.apache.jmeter.testbeans.gui.TestBeanGUI;
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.jmeter.util.ScriptingTestElement;
import org.apache.jorphan.collections.HashTree;


public class JedisExample {

public static void main(String[] argv) throws Exception {

File jmeterHome = new File("c:/apps/jmeter");
String slash = System.getProperty("file.separator");

File jmeterProperties = new File(jmeterHome.getPath() + slash + "bin" + slash + "jmeter.properties");

//JMeter Engine
StandardJMeterEngine jmeter = new StandardJMeterEngine();

//JMeter initialization (properties, log levels, locale, etc)
JMeterUtils.setJMeterHome(jmeterHome.getPath());
JMeterUtils.loadJMeterProperties(jmeterProperties.getPath());
JMeterUtils.initLocale();

// JMeter Test Plan, basically JOrphan HashTree
HashTree testPlanTree = new HashTree();

JSR223Sampler jedisSampler = new JSR223Sampler();
jedisSampler.setName("Jedis Sampler");
jedisSampler.setProperty("script", "def LOCAL_HOST = \"localhost\"\n"
+ "def PORT = 6379\n"
+ "\n"
+ "\n"
+ "def m_jedisPool = new JedisPool(new JedisPoolConfig(), LOCAL_HOST, PORT)\n"
+ "\n"
+ "\n"
+ "def m_jedis = m_jedisPool.getResource()\n"
+ "m_jedis.flushAll()\n"
+ "\n"
+ "// Run test\n"
+ "def jedis = getExistingJedisInstance()\n"
+ "jedis.set(TEST_KEY, TEST_VALUE).equals(\"OK\")\n"
+ "\n"
+ "// After test\n"
+ "m_jedis.close()\n"
+ "m_jedisPool.destroy()");
jedisSampler.setProperty("scriptLanguage", ScriptingTestElement.DEFAULT_SCRIPT_LANGUAGE);
jedisSampler.setProperty("cacheKey", UUID.randomUUID().toString());
jedisSampler.setProperty(TestElement.TEST_CLASS, JSR223Sampler.class.getName());
jedisSampler.setProperty(TestElement.GUI_CLASS, TestBeanGUI.class.getName());

// Loop Controller
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();

// Thread Group
ThreadGroup threadGroup = new ThreadGroup();
threadGroup.setName("Jedis 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());

// Test Plan
TestPlan testPlan = new TestPlan("Jedis Test Plan");
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(jedisSampler);

// save generated test plan to JMeter's .jmx file format
SaveService.saveTree(testPlanTree, new FileOutputStream(jmeterHome + slash + "jedis.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 = jmeterHome + slash + "jedis.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 " + jmeterHome + slash + "jedis.jtl file for results");
System.out.println("JMeter .jmx script is available at " + jmeterHome + slash + "jedis.jmx");
System.exit(0);


}

}

引用资料:

关于java - 让 Jedis 与 JMeter 引擎一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44666204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com