Jmeter插件訪問Redis共有3種方式:
1)通過自已開發(fā)插件(目前難度有點(diǎn)大碳抄、這種方式一定是OK 的,以后再研究一下)或者使用現(xiàn)有的JmeterRedis插件(目前網(wǎng)上的實(shí)例沒有一個(gè)可以調(diào)通的);
2)通過Beanshell連接、讀竿报、寫Redis數(shù)據(jù)俄删;
3)javaRedis+Beanshell,通過java實(shí)現(xiàn)Redis連接、增点待、刪阔蛉、改、查亦鳞;并打成jar包導(dǎo)入Jmeter擴(kuò)展jar包馍忽,使用BeanShell調(diào)用;
一燕差、 Jmeter訪問Redis data
參考地址:https://www.cnblogs.com/zhangfeivip/p/9450370.html
https://jmeter-plugins.org/wiki/RedisDataSet/
目前網(wǎng)上的實(shí)例還沒有可以調(diào)通過遭笋,先介紹一下使用方法;
二徒探、Jmeter通過BeanShell訪問Redis數(shù)據(jù)庫
參考地址:https://www.cnblogs.com/xiaoxitest/p/10150903.html
2.1? 將以下jar包導(dǎo)入jmeter\lib目錄下
jedis-2.2.1.jar
commons-pool-1.6.jar
注:需要重啟Jmeter才會(huì)生效瓦呼;
2.2 添加線程組->Sampler->BeanShell Sampler,加入以下內(nèi)容
import redis.clients.jedis.Jedis;
importorg.apache.commons.lang3.StringUtils;
//redis服務(wù)器地址
String host = "localhost";
//redis 服務(wù)端口號(hào)
int port = 6379;
//redis密碼
String password = "123456";
//redis db索引默認(rèn)從0開始
int index = 6;
//IFLY表示第一級测暗,STC表示第二央串,TEST表示第三級,一:二:三:四拼為一個(gè)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數(shù)據(jù)在jedis里
Jedis jedis = new Jedis(host, port);
//判斷密碼是否為空,不為空時(shí)校驗(yàn)密碼
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);???
//將結(jié)果打印到info日志质和;
log.info("========redisData==========:"+redisData);
圖為Redis客戶端,對上面代碼的關(guān)鍵字段說明稚字;
三饲宿、 BeanShell引用jar包的方式訪問Redis數(shù)據(jù)庫
參考地址:
https://www.cnblogs.com/youcong/p/8098881.html
https://www.cnblogs.com/edisonfeng/p/3571870.html
3.1 需要將jar包導(dǎo)入java工程
jedis-2.2.1.jar
commons-pool-1.6.jar
3.2 新建一個(gè)RedisUntils類,代碼如下:
/**
*redisdb連接
*@param host 服務(wù)器地址
*@param port 服務(wù)端口
*@parampwd? 密碼
*@return
*/
public staticJedis?connRedisDB(Stringhost,int port,String pwd)throws IOException{
//Jedis獲取到的Redis數(shù)據(jù)在jedis里
Jedisjedis = new Jedis(host,port);
//判斷密碼是否為空胆描,不為空時(shí)校驗(yàn)密碼
if(StringUtils.isNotBlank(pwd)){
jedis.auth(pwd);
System.out.println("Redis服務(wù)連接成功瘫想!");
?}
return jedis;
}
/**
*輸出獲取key與vlue,默認(rèn)是第一個(gè)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);
到指定的數(shù)據(jù)庫
jedis.select(dbIndex);
// 獲取數(shù)據(jù)并輸出*表示所有的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 默認(rèn)從0開始
*@param str 輸入*默認(rèn)為所有的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);
//切換到指定的數(shù)據(jù)庫
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 默認(rèn)從0開始
*@param str 輸入*默認(rèn)為所有的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后導(dǎo)出jiar包
第一步:右擊工程,點(diǎn)擊【Export】
第二步:如上圖昌讲,選擇java>JAR>點(diǎn)擊【Next】
第三步:如上圖国夜,選擇工程>指定jar包保存路徑>點(diǎn)擊【Finish】;
3.4 將jar包導(dǎo)入Jemeter \lib\ext目錄下;
需要重啟Jmeter;
3.5 添加線程組->Sampler->BeanShell Sampler,輸入如下內(nèi)容:
//導(dǎo)入RedisUntils類
importmain.java.plugins.db.RedisUntils;
//將getRedisValue查詢結(jié)果傳給value 類型為String,getRedisValue("Redis服務(wù)ip",Redis服務(wù)端口,"Redis密碼",指定的數(shù)據(jù)庫默認(rèn)從0開始,"要時(shí)查詢的key");
Stringvalue=RedisUntils.getRedisValue("127.0.0.1",6379,"123456",0,"test");
//輸入info日志
log.info("=====value:======== "+value);
//將vlue put給jmeter后續(xù)接口可以直接調(diào)用
?vars.put("value",value+"");
?執(zhí)行結(jié)果如下:
引用查詢結(jié)果
a. 在Sampler短绸、beanShell车吹、斷言中直接用${value}引用
執(zhí)行結(jié)果如下:
b. 在beanShell中引用value
//獲取value的值,并給valueText
StringvalueText=vars.get("value");
log.info("=====valueText:======== "+valueText);
//在條件中使用
if(!"123456".equals(vars.get("valueText"))){
//若failure=true為執(zhí)行失敗鸠按,將停止執(zhí)行
Failure = true;
FailureMessage = "寫入RedisDB數(shù)據(jù)錯(cuò)誤礼搁!";
}