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