Jmeter之Redis读写
Jmeter之Redis读写
Jmeter插件访问Redis共有3种方式:
1)通过自已开发插件(目前难度有点大、这种方式一定是OK 的,以后再研究一下)或者使用现有的JmeterRedis插件(目前网上的实例没有一个可以调通的);
2)通过Beanshell连接、读、写Redis数据;
3)javaRedis+Beanshell,通过java实现Redis连接、增、删、改、查;并打成jar包导入Jmeter扩展jar包,使用BeanShell调用;
一、 Jmeter访问Redis data
参考地址:https://www.cnblogs.com/zhangfeivip/p/9450370.html
https://jmeter-plugins.org/wiki/RedisDataSet/
目前网上的实例还没有可以调通过,先介绍一下使用方法;
二、Jmeter通过BeanShell访问Redis数据库
参考地址:https://www.cnblogs.com/xiaoxitest/p/10150903.html
2.1 将以下jar包导入jmeter\lib目录下
jedis-2.2.1.jar
commons-pool-1.6.jar
注:需要重启Jmeter才会生效;
2.2 添加线程组->Sampler->BeanShell Sampler,加入以下内容
import redis.clients.jedis.Jedis;
importorg.apache.commons.lang3.StringUtils;
//redis服务器地址
String host = "localhost";
//redis 服务端口号
int port = 6379;
//redis密码
String password = "123456";
//redis db索引默认从0开始
int index = 6;
//IFLY表示第一级,STC表示第二,TEST表示第三级,一:二:三:四拼为一个key:
String key ="IFLY:STC:TEST:test";
//value
String value =
"{\"url\":\"https://www.baidu.com\",\"companyName\":\"test\",\"id\":\"007\",\"nickname\":\"test008\",\"id\":\"20180909\"}";
//Jedis获取到的Redis数据在jedis里
Jedis jedis = new Jedis(host, port);
//判断密码是否为空,不为空时校验密码
if(StringUtils.isNotBlank(password)){
jedis.auth(password);
}
//选择redis db 指上面的Index
jedis.select(index);
//将key与vlue写入redisdb 插入key, value 指上面key value的值
jedis.set(key, value);
//获取key的值
redisData = jedis.get(key);
//将key的值保存为变量,传给jmeter
vars.put("redisData",redisData);
//将结果打印到info日志;
log.info("========redisData==========:"+redisData);

图为Redis客户端,对上面代码的关键字段说明;
三、 BeanShell引用jar包的方式访问Redis数据库
参考地址:
https://www.cnblogs.com/youcong/p/8098881.html
https://www.cnblogs.com/edisonfeng/p/3571870.html
3.1 需要将jar包导入java工程
jedis-2.2.1.jar
commons-pool-1.6.jar
3.2 新建一个RedisUntils类,代码如下:
/**
*redisdb连接
*@param host 服务器地址
*@param port 服务端口
*@parampwd 密码
*@return
*/
public staticJedis connRedisDB(Stringhost,int port,String pwd)throws IOException{
//Jedis获取到的Redis数据在jedis里
Jedisjedis = new Jedis(host,port);
//判断密码是否为空,不为空时校验密码
if(StringUtils.isNotBlank(pwd)){
jedis.auth(pwd);
System.out.println("Redis服务连接成功!");
}
return jedis;
}
/**
*输出获取key与vlue,默认是第一个db
*@param host
*@param port
*@param pwd
*@param str
*@throws IOException
*/
public static void getRedisData(String host,int port,String pwd,String str) throwsIOException{
Jedis jedis=connRedisDB(host,port,pwd);
到指定的数据库
jedis.select(dbIndex);
// 获取数据并输出*表示所有的Key,也可以输入指定的key
Setkeys = jedis.keys("*");
Iteratorit=keys.iterator() ;
while(it.hasNext()){
Stringkey = it.next();
Stringvalue=jedis.get(key);
System.out.println(key+":"+value);
}
}
/**
*获取指定DB的key与vlue
*@param host
*@param port
*@param pwd
*@param dbIndex 默认从0开始
*@param str 输入*默认为所有的key,输入XX指所有的key
*@return
*@throws IOException
*/
public static HashMap<Object, Object> getRedisKeyValue(String host,int port,String pwd,int dbIndex,String str) throws IOException{
Jedis jedis=connRedisDB(host,port,pwd);
//切换到指定的数据库
jedis.select(dbIndex);
Set<String> keys=jedis.keys(str);
HashMap<Object, Object> map=new HashMap<>();
for(String key:keys){
Objectvalue=jedis.get(key);
map.put(key, value);
}
return map;
}
/**
*查询指定db的key的value
* @param host
*@param port
*@param pwd
*@param dbIndex 默认从0开始
*@param str 输入*默认为所有的key,输入XX指所有的key
*@return
*@throwsIOException
*/
public static String getRedisValue(String host,int port,String pwd,int dbIndex,String str) throws IOException{
Jedis jedis=connRedisDB(host,port,pwd);
jedis.select(dbIndex);
Stringvalue=jedis.get(str);
return value;
}
3.3 build后导出jiar包
第一步:右击工程,点击【Export】

第二步:如上图,选择java>JAR>点击【Next】

第三步:如上图,选择工程>指定jar包保存路径>点击【Finish】;
3.4 将jar包导入Jemeter \lib\ext目录下;
需要重启Jmeter;
3.5 添加线程组->Sampler->BeanShell Sampler,输入如下内容:
//导入RedisUntils类
importmain.java.plugins.db.RedisUntils;
//将getRedisValue查询结果传给value 类型为String,getRedisValue("Redis服务ip",Redis服务端口,"Redis密码",指定的数据库默认从0开始,"要时查询的key");
Stringvalue=RedisUntils.getRedisValue("127.0.0.1",6379,"123456",0,"test");
//输入info日志
log.info("=====value:======== "+value);
//将vlue put给jmeter后续接口可以直接调用
vars.put("value",value+"");
执行结果如下:

引用查询结果
a. 在Sampler、beanShell、断言中直接用${value}引用

执行结果如下:

b. 在beanShell中引用value
//获取value的值,并给valueText
StringvalueText=vars.get("value");
log.info("=====valueText:======== "+valueText);
//在条件中使用
if(!"123456".equals(vars.get("valueText"))){
//若failure=true为执行失败,将停止执行
Failure = true;
FailureMessage = "写入RedisDB数据错误!";
}

Jmeter之Redis读写的更多相关文章
- Jmeter连接Redis,获取Redis数据集
Redis(REmote DIctionary Server)是一个开源的内存数据结构存储,用作数据库,缓存和消息代理. 本博文是分享jmeter怎么连接使用Redis数据库. 安装Redis数据集J ...
- java、python及jmeter操作redis(接口自动化必备)
redis是nosql数据库之一,其存储结构简单,提供高性能服务,所以在架构中是很常用的. 在做接口自动化测试过程中,有时也会涉及到redis,比如:发送短信验证码,我们做接口自动化测试,如何模拟发送 ...
- Redis读写分离技术解析
背景 云数据库Redis版不管主从版还是集群规格,replica作为备库不对外提供服务,只有在发生HA的时候,replica提升为master后才承担读写流量.这种架构读写请求都在master上完成, ...
- Jmeter 连接Redis获取数据集
公司开展了新的业务活动,需要配合其他部门做压测,由于脚本中的手机号和用户的uid需要参数化而且每次均不能重复,最初的考虑使用csv的方式来获取数据,比较头疼的问题是集群节点需要维护测试数据,所以我将所 ...
- Jmeter获取redis数据
背景:jmeter写注册登录接口时,需要获取验短信验证码,一般都是存在数据库,但我们的开发把验证码存到redis里面了 步骤:1.写个redis工具类 2.打成jar包,导入jmeter lib\ex ...
- Redis读写分离(三)
1.redis高并发跟整个系统的高并发之间的关系 redis,要搞高并发的话,不可避免,要把底层的缓存搞得很好 mysql,高并发,做到了,那么也是通过一系列复杂的分库分表,订单系统,事务要求的,QP ...
- redis读写分离及可用性设计
Redis缓存架构设计 对于下面两个架构图,有如下想法: 1)redis主从复制模式,为了解决master读写压力,对master进行写操作,对slave进行读操作. 2)而在分片集群中,如果对部分分 ...
- jmeter连接redis取数据
1.导入fastjson-1.2.2.jar.jedis-2.2.1.jar到 jmeter\lib\ext\ 下 2.新建BeanShell Sampler import com.alibaba.f ...
- Jmeter连接redis
介绍:现在有很多数据不是存储在数据库而是存储在Redis中 Redis数据库存储数据环境 不用每次都去数据库读取数据 可以有效的优化服务器性能. 下面介绍使用jmeter如何读取redis 一.首先创 ...
随机推荐
- bootstrap_开始
bootstrap 一个移动设备优先 UI 库,底层是用 less 写的,依赖于 jQuery. 面试点: bootstrap 的所有盒子都是怪异盒子模型(box-sizing: border-box ...
- python mysql 单表查询 多表查询
一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...
- wpf1
emCombobox.Items[2].IsEnabled = false; 隐藏下拉框里面的一个item wpf 单例模式. [DllImport("user32", CharS ...
- JavaScript中innerHTML与innerText,createTextNode的区别
innerHTML和innerText 它们都会把元素内内容替换掉,区别在于: innerHTML 会把替换内容里的 HTML 标记解释执行. innerText 会把替换内容里的 HTML 标记原样 ...
- 使用sysbench压测磁盘io
Ⅰ.sysbench安装 cd /usr/local/src yum -y install make automake libtool pkgconfig libaio-devel git clone ...
- Mock Server 实现post方法的接口(三)
Mock Server 实现post方法的接口(三) 1.mock server实现的接口,当request中未设置"method"时,会自动将所有method试一次,所以一定要指 ...
- CentOS 7 - 最小化安装后,解决无法使用yum命令问题!!
刚刚最小化方式安装了CentOS 7 后,说实话,真不习惯也不喜欢纯shell方式工作,使用root账号登入后,马上想安装GNOME,但是发现yum不能正常工作!!! 一,输入安装X Window命令 ...
- python 函数enumerate(x,y)的用法
enumerate(x,y)函数是把元组tuple.字符串str.列表list里面的元素遍历和索引组合,其用法与range()函数很相似, 下面示例enumerate(x,y)用法以及range(x) ...
- HTML技巧篇:如何让单行文本以及多行文本溢出时显示省略号(…)
参考:https://baijiahao.baidu.com/s?id=1621362934713048315&wfr=spider&for=pc 本篇文章主要给大家介绍一下在html ...
- 【Python全栈-JavaScript】jQuery效果
jQuery效果 jQuery 效果函数: 方法 描述 animate() 对被选元素应用“自定义”的动画 clearQueue() 对被选元素移除所有排队的函数(仍未运行的) delay() 对被选 ...