背景介绍
问题背景:业务数据中多个字段做唯一性自增,但是相同业务层面的数据希望存在同一张表中,无法使用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包引用或改写插件的方法实现