如何在Jmeter中使用JedisPool

问题描述 投票:-1回答:2

我想用jmeter加载redis。我已经有了一个带有groovy脚本的JSR223Sampler

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个'用户'的ThreadGroup下。工作良好。现在我想把'用户'的数量提高到1000.连接数量会对性能产生负面影响,对吧?所以我想获得连接池的优势。根据

https://github.com/xetorthio/jedis/wiki/Getting-started

JedisPool就是答案。我的问题是我的jmeter测试计划必须如何?我在哪里放置将在其中创建JedisPool的jmeter-element(哪一个?)?不在我的ThreadGroup下,对吗?我如何在上面的sampler-script中使用池中的连接?

编辑

因此,在Dmitris的建议下,我创建了两个不同的测试计划。两者都不起作用。也许有人看到我的错误?

第一个计划:

测试计划

| --- setUp Thread Group

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

我的第二个TestPlan看起来像

测试计划

| ---线程组

---- | ---测试行动

-------- | --- JSR223 PreProcessor

---- | --- JSR223采样器

---- | ---查看结果树

使用PreProcessor,如上面的JSR223采样器(1)和JSR223采样器,如上面的JSR223采样器(2)。

第一个计划附带响应消息

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

我做错了什么?

groovy redis jmeter jedis
2个回答
1
投票

我建议使用setUp Thread Group(如果你想测量池创建时间)或JSR223 Sampler采样器和Test Action组合(如果你不想在你的测试结果中包含池创建请求)在JSR223 PreProcessor的某处创建JedisPool

完成后,您可以将此“池”放入JMeter属性中,如:

  1. 在setUp线程组中 def pool = new JedisPool(new JedisPoolConfig(), 'localhost') props.put('pool', pool)
  2. 在测试过程中的某个地方 def pool = props.get('pool')

有关在JMeter测试中使用Groovy脚本的更多信息,请参阅Apache Groovy - Why and How You Should Use It文章


0
投票

你从属性获得JedisPool并尝试将其投射到Jedis,这是不可能的,你需要从Jedis获得JedisPool.getResource()

import redis.clients.jedis.JedisPool;
....
JedisPool pool = props.get('pool');

Jedis jedis = pool.getResource();
© www.soinside.com 2019 - 2024. All rights reserved.