FunTester测试框架Redis性能测试实践#yyds干货盘点#
Posted FunTester
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FunTester测试框架Redis性能测试实践#yyds干货盘点#相关的知识,希望对你有一定的参考价值。
经历过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.16
INFO-> redis连接池IP:106.53.152.151,端口:6379,超时设置:5000
INFO-> =========预热完成,开始测试!=========
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍ 14% ,当前QPS: 1605
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 23% ,当前QPS: 1415
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 35% ,当前QPS: 1632
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 46% ,当前QPS: 1613
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 57% ,当前QPS: 1255
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 69% ,当前QPS: 1511
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 80% ,当前QPS: 1653
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 92% ,当前QPS: 1404
INFO-> 线程:Redis测试30,执行次数:100,错误次数: 0,总耗时:25.874 s
INFO-> 线程:Redis测试11,执行次数:96,错误次数: 0,总耗时:25.888 s
INFO-> 线程:Redis测试366,执行次数:98,错误次数: 0,总耗时:25.744 s
中间省略五百行日志
INFO-> 线程:Redis测试377,执行次数:98,错误次数: 0,总耗时:26.049 s
INFO-> 线程:Redis测试71,执行次数:98,错误次数: 0,总耗时:26.21 s
INFO-> 线程:Redis测试388,执行次数:98,错误次数: 0,总耗时:26.089 s
INFO-> Redis测试进度:▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍ 100%
INFO->
Redis测试QPS变化曲线
见下图
INFO-> 总计400个线程,共用时:26.252 s,执行总数:38,905,错误数:0,失败数:0
INFO-> 数据保存成功!文件名:/Users/oker/IdeaProjects/funtester/long/data/Redis测试021516_400
INFO->
~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ 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进行测试的场景。但是技能的话,做一些储备还是好的。毕竟不知道什么时候就用的上了。
以上是关于FunTester测试框架Redis性能测试实践#yyds干货盘点#的主要内容,如果未能解决你的问题,请参考以下文章
MySQL性能测试之select&updateFunTester框架#yyds干货盘点#