背景介绍
问题背景:业务数据中多个字段做唯一性自增,但是相同业务层面的数据希望存在同一张表中,无法使用Mysql主键自增功能实现。
目前实施:封装redis连接与调用的方法,数据由Redis自增生成。
优 点:利用Redis写入读取内存的优势,保证数据唯一性。
影 响:使用JMeter进行接口自动化或模拟并发时,由Redis自增生成的值无法获取作为接口入参。
以下是使用BeanShell Slamper实现的,具体步骤如下:
一、下载插件
- 下载Plugins Manager JAR文件:https://jmeter-plugins.org/get/
- 将文件复制到JMeter的lib/ext目录下
启动JMeter后可看到刚才添加的插件管理器
- 通过插件管理器添加redis插件
添加后可在ext中看到插件已添加成功
二、抽取Redis连接信息
三、添加BeanShell Slamper
import java.util.Map;
import redis.clients.jedis.Jedis;
import org.apache.commons.lang3.StringUtils;
String host = "${redis-host}"; //服务器地址
int port = ${redis-port}; //端口号
String password = "${redis-password}"; //redis密码
int index = 6; //redis db
String key = "${key}"; //key值
String value = "";
Jedis jedis = new Jedis(host, port);
if(StringUtils.isNotBlank(password)){
jedis.auth(password);
}
jedis.select(index);
String get = jedis.incr(key).toString();
//String get = jedis.get(key);
vars.put("get",get); //将key值保存为变量
四、添加Debug Slamper确认结果
与Redis一致
拓展
1.业务数据的唯一编码往往使用时间流水如‘2019030900001’,时间流水可用公共方法生成
2.BeanShell调用略显麻烦,考虑使用JAR包引用或改写插件的方法实现