Jmeter之Redis读写

作者: 奔跑的小小鱼 | 来源:发表于2019-03-21 18:25 被阅读5次

    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) throws IOException{

    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读写

        本文链接:https://www.haomeiwen.com/subject/zqwcvqtx.html