写点什么

FunTester 测试框架 Redis 性能测试实践

用户头像
FunTester
关注
发布于: 4 小时前

经历过FunTester框架Redis压测预备, 下面就应该进入实践阶段了,首先呢,先分享一个对 Redis 里面不停地添加key-value的测试用例。

思路

基本的用例设计思路跟之前的压测是一致的,就是一个线程去执行一个任务,然后不停地去做某个事情,然后用线程池去执行多个任务,然后最终收集汇总结果。


就我自己粗浅的理解,ready 使得连接词的获取以及释放和 http 协议的连接词使用类似原理也类似就是先去获取一个连接,然后再去做一些操作,然后再去释放连接连接,最终会在连接词里面进行一个状态的管理框架都提供了默认的管理机制这里使用。

测试用例

Java 版本


/** * redis添加key-value性能测试用例 */public class RedisPerTest extends SourceCode {
public static final String host = "FunTester隐藏地址";
public static final int port = 6379;
public static RedisBase drive;
public static void main(String[] args) { drive = new RedisBase(host, port); drive.index = 1; RUNUP_TIME = 0; drive.set("fun" + StringUtil.getString(10), "FunTester", 100); FunTester funTester = new FunTester(100); Concurrent concurrent = new Concurrent(funTester, 400,"redis添加key-value性能测试用例"); concurrent.start(); drive.close(); }

private static class FunTester extends FixedThread {
public FunTester(int limit) { super(null, limit, true); }
@Override protected void doing() throws Exception { drive.set("fun" + StringUtil.getString(10), "FunTester", 100); }
@Override public ThreadBase clone() { return new FunTester(limit); }
}
}
复制代码

Groovy 版本

同上。

控制台输出

INFO-> 当前用户:oker,工作目录:/Users/oker/IdeaProjects/funtester/,系统编码格式:UTF-8,系统Mac OS X版本:10.16INFO-> redis连接池IP:106.53.152.151,端口:6379,超时设置:5000INFO-> =========预热完成,开始测试!=========INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍  14% ,当前QPS: 1605INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  23% ,当前QPS: 1415INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  35% ,当前QPS: 1632INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  46% ,当前QPS: 1613INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  57% ,当前QPS: 1255INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  69% ,当前QPS: 1511INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  80% ,当前QPS: 1653INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  92% ,当前QPS: 1404INFO-> 线程:Redis测试30,执行次数:100,错误次数: 0,总耗时:25.874 sINFO-> 线程:Redis测试11,执行次数:96,错误次数: 0,总耗时:25.888 sINFO-> 线程:Redis测试366,执行次数:98,错误次数: 0,总耗时:25.744 s中间省略五百行日志INFO-> 线程:Redis测试377,执行次数:98,错误次数: 0,总耗时:26.049 sINFO-> 线程:Redis测试71,执行次数:98,错误次数: 0,总耗时:26.21 sINFO-> 线程:Redis测试388,执行次数:98,错误次数: 0,总耗时:26.089 sINFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍  100%INFO->      Redis测试QPS变化曲线             见下图
INFO-> 总计400个线程,共用时:26.252 s,执行总数:38,905,错误数:0,失败数:0INFO-> 数据保存成功!文件名:/Users/oker/IdeaProjects/funtester/long/data/Redis测试021516_400INFO-> ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~> {> ① . "rt":267,> ① . "failRate":0.0,> ① . "threads":400,> ① . "deviation":"1.08%",> ① . "errorRate":0.0,> ① . "executeTotal":38905,> ① . "qps2":1481.9823251561786,> ① . "total":38905,> ① . "qps":1498.1273408239701,> ① . "startTime":"2021-09-02 15:16:35",> ① . "endTime":"2021-09-02 15:17:01",> ① . "mark":"Redis测试021516",> ① . "table":"eJztk8sKgkAUQPeB/3A/QMFMWvgZ0Q8IDiQ0Fk1BLXtR0Lr5jVb90Cyiz+j2wB5UWj6m4A4XdKPnnHE0KpBuNVgQit12td+swbVt6Ld6zA9SPmxUjPecBhPdTiQYNEPOPBhagvVCvw3RgJswsjjC/SiJkezBwwjO7/IcpwZcmNwfem61jrc5VGRdSi5xUpUQpSyKkjOcckgnRNEkJcc45dFuMYXSlJzjlENUcoKDlwXOc2S+5PirXU5jIjc3izh1inPd5A8FMljF6fcel43IUedj4/dmWgS/KHo8Wq//ov+8HAt/QIMKqZAK9WtQIRVSoX4NKqRCKtSvQYVUSIX6NQotPAA24o0Q"> }~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~INFO-> Redis测试 400 thread
见下图
Process finished with exit code 0
复制代码



总结

总体来讲,还是比较简单的,下期会测试一下多操作相关性或者集合 value 的场景,还有 Redis 自增 value。在跟同行交流的时候,他们说平时工作中很难遇到直接对 Redis 进行测试的场景。但是技能的话,做一些储备还是好的。毕竟不知道什么时候就用的上了。

Have Fun ~ Tester !

发布于: 4 小时前阅读数: 3
用户头像

FunTester

关注

公众号:FunTester,650+原创,欢迎关注 2020.10.20 加入

Have Fun,Tester! 公众号FunTester,坚持原创文章的测试人。 FunTester测试框架作者,DCS_FunTester分布式性能测试框架作者。

评论

发布
暂无评论
FunTester测试框架Redis性能测试实践