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

笑哼 for 转转QA · 2018年11月30日 · 最后由 lisijie 回复于 2020年03月11日 · 207 次阅读

作者 | 赵里京

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

系统架构

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

在线编辑压测脚本

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

上传压测脚本

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

修改执行机 hosts

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

结果对比

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

测试报告

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

任务重复使用

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

未来可提升的地方

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

共收到 14 条回复 时间 点赞

手动点个赞

报告可以加个 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 包自动引用自定义函数

笑哼 回复

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

会飞的猪 回复

收集线上日志 得到的

首先,先点一个赞!目前我也在做一个类似的平台,功能比较相似,期待你可以早点完成脱敏开源。
有几个小问题,期待解惑一下,感谢。
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 客户端。。。

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

如果只是 http/https 协议压测,平台很单一,实现难度不大,而且这里并没有涉及对 jmeter 的二次开发

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册