我想用jmeter加载测试redis。我已经有了一个工作的jsr223sampler和一个groovy脚本
import redis.clients.jedis.Jedis;
import java.util.concurrent.ThreadLocalRandom;
String varuser = "user:" + ThreadLocalRandom.current().nextInt(1, 500);
Jedis jedis = new Jedis(IP, port);
String result = jedis.hgetAll(varuser);
SampleResult.setResponseData(result.toString().getBytes());
在具有10个“用户”的线程组下。工作正常。现在我想把“用户”的数量提高到1000个。高连接数会对性能产生负面影响,对吧?所以我想利用连接池的优势。根据
https://github.com/xetorthio/jedis/wiki/Getting-started
绝地武士就是答案。我的问题是我的jmeter测试计划应该是什么样的?我必须把jmeter元素放在哪里(哪一个?)哪个绝地武士将被创造?不在我的线团里,对吧?以及如何在上面的采样器脚本中使用来自池的连接?
编辑
因此,使用dmitris advise,我创建了两个不同的测试计划。两者都不起作用。也许有人看到了我的错误?
第一个计划:
试验计划
|---设置线程组
----JSR223采样器(1)
|---螺纹组
----JSR223采样器(2)
|---查看结果树
带JSR223采样器(1)
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
JedisPool pool = new JedisPool(new JedisPoolConfig(), IP);
prop.put('pool', pool);
和JSR223采样器(2)
import redis.clients.jedis.Jedis;
import java.util.concurrent.ThreadLocalRandom;
String varuser = "user:" + ThreadLocalRandom.current().nextInt(1, 500);
Jedis jedis = props.get('pool');
String result = jedis.hgetAll(varuser);
SampleResult. ...
jedis.close();
我的第二个测试计划看起来像
试验计划
|---螺纹组
----测试动作
————————JSR223预处理器
----JSR223采样器
----查看结果树
使用像上面的jsr223采样器(1)这样的预处理器和像上面的jsr223采样器(2)那样的jsr223采样器。
第一个计划带有响应消息
cannot cast object 'redis.clients.jedis.JedisPool@642715fb' with class
'redis.clients.jedis.JedisPool' to class 'redis.clients.jedis.Jedis'
第二个计划回应
no such property: pool for class: Script41082
我做错什么了?
最佳答案
我建议使用setUp Thread Group或JSR223 Sampler采样器和Test Action组合(如果您不想在测试结果中包含池创建请求)在JSR223 PreProcessor中的某处创建jedispool
完成后,可以将此“池”放入jmeter属性中,如:
在安装线程组中
def pool = new JedisPool(new JedisPoolConfig(), 'localhost')
props.put('pool', pool)
在你考试的中间
def pool = props.get('pool')
有关在jmeter测试中使用groovy脚本的更多信息,请参阅Apache Groovy - Why and How You Should Use It文章