转转QA Yuntestin 基于 jmeter 的轻量级云测试平台

笑哼 for 转转QA · November 30, 2018 · Last by 猫星人 replied at April 21, 2019 · 1693 hits

作者|赵里京

Yuntestin以云架构为核心,基于Jmeter作为性能引擎的轻量级压测平台。它集脚本生成、修改、多执行机并发、报告展示以及结果对比为一体,是一个能快速低成本实施压测,帮助用户分析性能瓶颈的测试平台。降低了入门使用成本,让开发和测试都可以方便的执行性能压测。

系统架构

  1. 分布式集群压测,压力可观,总样本数 = 线程数 * 循环次数 * 执行机总数。
  2. 云架构设计,为实现多用户同时工作,且相互独立。

在线编辑压测脚本

  1. 获取参数,对线上已有接口可通过输入接口名查询获取线上参数值,对查询结果集进行处理,随机取参数最多的一组。点击查询后,可自动补齐下面的域名路径等信息。
  2. 分布试运行,可按需选择施压机集群,提交后便可生成测试任务。
  3. 可下载在线编辑好的jmx,在本地用jmeter打开并执行。 任务如下图

上传压测脚本

可将本地编辑好的脚本上传至服务器生成任务并执行。

修改执行机hosts

修改施压机群所在服务器的hosts,指向您的待测系统,进行压测,支持线上线下压测。

结果对比

为了敏捷开发流,做到小步快走,快速试错,适应需求变化频繁的情况。实现了可将每一个任务或者一个任务的多次执行结果进行直观的比较,来验证优化效果。这需要结果数据的收集,这方面默认的Jmeter不能满足需求,自己对jmeter进行了二次开发,捕获jmeter的每一次关键结果,再进行入库保存。
下图为结果对比报表与曲线图:

测试报告

最后平台也会帮助您生成jmeter的原生性能测试报告

任务重复使用

每一个任务都可对其进行修改再执行操作,使得一个任务可以一直使用下去无需再新建重复任务。

未来可提升的地方

1、机器监控数据(如cpu和内存等)收集:
目前平台暂未支持此功能,可以通过Agent程序运行在受压机上,定时读取/proc目录中的一些系统参数或者通过执行Linux命令来收集数据统计得来,并直接上传到控制中心。
2、将控制中心从wf层脱离。
3、将获取的线上参数自动压测,无需人工参与,产生报告并将结果发送邮件。

共收到 13 条回复 时间 点赞

手动点个赞

报告可以加个tps的字段

上官爱民 回复

谢谢

回复

谢谢你的意见

@笑哼

1 github 地址呢?
2 支持grafana 扩展监控吗
3 支持接口测试用例组织和接口报告吗?
4 支持jmeter的内核是什么版本 支持自动升级jmeter内核吗?
5 支持 bin下各种jmeter.properties user.properties 和其他 *.properties 的全局引用配置吗? 即任意jmx 有一套自己的.properties 配置,互不影响或者可以引用某一jmx的配置 而不影响jmeter运行 或者说可以穿插运行不同properties配置的jmx.
6 支持引用自定义jar包 自定义 Custom Config Element 配置元素组件或自定义函数 配置吗

jmx脚本是调jmeter的接口生成的吗 还是调的接口修改的xml文件

会飞的猪 回复

直接修改xml文件

小马 回复

1 github 地址呢?
因涉及公司信息,暂未开放
2 支持grafana 扩展监控吗
目前没有加此内容,需在相应服务器进行监控
3 支持接口测试用例组织和接口报告吗?
支持报告,接口用例以任务形式展示,可管理,可修改
4 支持jmeter的内核是什么版本 支持自动升级jmeter内核吗?
可单独对jmeter进行升级版本兼容
5 支持 bin下各种jmeter.properties user.properties 和其他 *.properties 的全局引用配置吗? 即任意jmx 有一套自己的.properties 配置,互不影响或者可以引用某一jmx的配置 而不影响jmeter运行 或者说可以穿插运行不同properties配置的jmx.
配置独立,每一个任务生成一个配置,互不影响。支持自定义jmx脚本并上传执行。
6 支持引用自定义jar包 自定义 Custom Config Element 配置元素组件或自定义函数 配置吗
暂不支持,后期想做,上传jar包自动引用自定义函数

笑哼 回复

感觉 你们这个( 获取参数,对线上已有接口可通过输入接口名查询获取线上参数值) 做的挺智能的 是用的线上导流 获取到的参数吗

笑哼 #10 · December 05, 2018 作者
会飞的猪 回复

收集线上日志 得到的

首先,先点一个赞!目前我也在做一个类似的平台,功能比较相似,期待你可以早点完成脱敏开源。
有几个小问题,期待解惑一下,感谢。
1、(实现多用户同时工作,且相互独立),这块是如何实现的,slave固定,运行中的其他人如何同时启动运行?
2、测试数据csv如何分发到各个jmeter slave压力机的?
3、在线编辑压测脚本配置时,是否支持断言、if控制器、for循环控制器?
4、编辑已上传的jmx压测脚本,是类似于这样解析jmx脚本吗?

SearchByClass<ThreadGroup> threadGroups = new SearchByClass<>(ThreadGroup.class);
if (testPlanTree != null) {
testPlanTree.traverse(threadGroups);
}
Collection<ThreadGroup> threadGroupsRes = threadGroups.getSearchResults();
for (ThreadGroup threadGroup : threadGroupsRes) {
LoopController lp = (LoopController) threadGroup.getSamplerController();
jmxHashTreeVO.setThreadGroupContinues(lp.getPropertyAsBoolean("LoopController.continue_forever"));
jmxHashTreeVO.setThreadGroupLoops(String.valueOf(lp.getLoops()));
jmxHashTreeVO.setThreadGroupNumThreads(threadGroup.getNumThreads());
jmxHashTreeVO.setThreadGroupRampUp(threadGroup.getRampUp());
jmxHashTreeVO.setThreadGroupScheduler(threadGroup.getScheduler());
jmxHashTreeVO.setThreadGroupDuration(threadGroup.getDuration());
jmxHashTreeVO.setThreadGroupDelay(threadGroup.getDelay());
}

我还是会踏踏实实的用jmeter客户端。。。

这样的广告少放吧。。。。完全没有价值啊

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up