Jmeter之Redis读写

奔跑的小小鱼  关注

 0.2 2019.03.21 18:25* 字数 1330 阅读 45评论 0喜欢 1

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的数据

图为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包

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

 
java导出jar包

第三步:如上图,选择工程>指定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}引用

 
引用value图1

执行结果如下:

 
引用value图2

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读写的更多相关文章

  1. Jmeter连接Redis,获取Redis数据集

    Redis(REmote DIctionary Server)是一个开源的内存数据结构存储,用作数据库,缓存和消息代理. 本博文是分享jmeter怎么连接使用Redis数据库. 安装Redis数据集J ...

  2. java、python及jmeter操作redis(接口自动化必备)

    redis是nosql数据库之一,其存储结构简单,提供高性能服务,所以在架构中是很常用的. 在做接口自动化测试过程中,有时也会涉及到redis,比如:发送短信验证码,我们做接口自动化测试,如何模拟发送 ...

  3. Redis读写分离技术解析

    背景 云数据库Redis版不管主从版还是集群规格,replica作为备库不对外提供服务,只有在发生HA的时候,replica提升为master后才承担读写流量.这种架构读写请求都在master上完成, ...

  4. Jmeter 连接Redis获取数据集

    公司开展了新的业务活动,需要配合其他部门做压测,由于脚本中的手机号和用户的uid需要参数化而且每次均不能重复,最初的考虑使用csv的方式来获取数据,比较头疼的问题是集群节点需要维护测试数据,所以我将所 ...

  5. Jmeter获取redis数据

    背景:jmeter写注册登录接口时,需要获取验短信验证码,一般都是存在数据库,但我们的开发把验证码存到redis里面了 步骤:1.写个redis工具类 2.打成jar包,导入jmeter lib\ex ...

  6. Redis读写分离(三)

    1.redis高并发跟整个系统的高并发之间的关系 redis,要搞高并发的话,不可避免,要把底层的缓存搞得很好 mysql,高并发,做到了,那么也是通过一系列复杂的分库分表,订单系统,事务要求的,QP ...

  7. redis读写分离及可用性设计

    Redis缓存架构设计 对于下面两个架构图,有如下想法: 1)redis主从复制模式,为了解决master读写压力,对master进行写操作,对slave进行读操作. 2)而在分片集群中,如果对部分分 ...

  8. jmeter连接redis取数据

    1.导入fastjson-1.2.2.jar.jedis-2.2.1.jar到 jmeter\lib\ext\ 下 2.新建BeanShell Sampler import com.alibaba.f ...

  9. Jmeter连接redis

    介绍:现在有很多数据不是存储在数据库而是存储在Redis中 Redis数据库存储数据环境 不用每次都去数据库读取数据 可以有效的优化服务器性能. 下面介绍使用jmeter如何读取redis 一.首先创 ...

随机推荐

  1. buffer格式的转换

    ---恢复内容开始--- 定义好一个buffer 例如: var buf = new Buffer(''nihaoya); 通过str转成base64的字符 var str =buf.toString ...

  2. (81)Wangdao.com第十六天_JavaScript 严格模式

    严格模式 除了正常的运行模式,JavaScript 还有第二种运行模式:严格模式(strict mode).顾名思义,这种模式采用更加严格的 JavaScript 语法 同样的代码,在正常模式和严格模 ...

  3. mysql百万级全文索引及match快速查找

    建立全文索引的表的存储引擎类型必须为MyISAM 问题是match   against对中文模糊搜索支持不是太好 新建一个utf8 MyISAM类型的表并建立一个全文索引  : CREATE TABL ...

  4. 剑指offer——python【第38题】二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 想了很久..首先本渣渣就不太理解递归在python中的实现 ...

  5. react-webpack config webpack@3.4.1

    1.最重要的一点 yarn add webpack@3.4.1 -g 2.  解决跨域请求 webpack.json 中添加 https://segmentfault.com/q/1010000008 ...

  6. Adobe Premiere Pro CS6 下载安装包成功

    Adobe Premiere Pro CS6 https://pan.baidu.com/s/1miBq59e 下载地址 安装方式 断网(必须):安装官方原版程序: 一.安装前先运行程序包的“必先运行 ...

  7. Python通过简单的文件读写,来实现注册登录

    # -*- coding:utf-8 -*- '''''' username = input('请输入您的姓名:') password = input('请输入密码:') with open('get ...

  8. io 口方向调整 stm32

    zonggo//IO方向设置 CRL为0-7 CRH为 8-15 总共四个寄存器位置有效#define DS18B20_IO_IN() {GPIOB->CRH&=0X0FFFFFFF;G ...

  9. SaaS的先鋒:多合一讯息处理器

    在Rocketbots,我们的使命是改善企业与客户之间的关係.全球有超过40亿个消息传递帐户,人们花在上线对话的时间比任何其他活动都多.这种转变,创造了一个更高效及贴身的沟通.随著消费者越来越多要求, ...

  10. 2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165317 Exp4 恶意代码分析 实验要求 1.系统运行监控 使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间 ...