Jmeter之Redis讀寫


Jmeter之Redis讀寫

96 
奔跑的小小魚 Excellent 
 0.2 2019.03.21 18:25* 字數 1330 閱讀 45評論 0

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數據錯誤!";

}

 
斷言


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM