TARS是由腾讯开源的高性能和多语言微服务框架。TarsJMeter是TARS基金会开源项目之一,它是一套运行在JMeter环境上的性能测试方案,目的是给高性能TARS协议提供性能测试与评估。本文主要介绍了TarsJMeter插件的实现机制,操作流程及测试扩展,用于帮助用户快速上手TarsJMeter。
易用性强:用户只需对JMeter有一定的了解,即可采用TarsJMeter简洁的UI实现测试用例开发。
支持分布式:通过JMeter的集群模式,可实现TARS服务的负载测试。目前已使用集群模式轻松触顶测试过吞吐量达50000TPS的TARS单服务。
支持复杂场景:TarsJMeter结合JMeter丰富的LogicController, Pre Processors, Post Processors, Timer, Config Element等组件,可丰富测试场景,使得测试用例不再是单一的接口测试。
数据可监控:JMeter可把TARS服务的测试数据上报至InfluxDB(时序数据库),InfluxDB可与第三方监控平台对接,实现对数据流量的实时监控。
TarsJMeter的测试执行如下图:TarJMeter把线程调度运行,数据监听等都交给了JMeter自带的基础组件,用户只需关注TARS用例本身。如若想上下文串联多个TARS服务,可以通过JMeter的BeanShell等处理TasrJMeter返回的响应结果来实现;也可提出改进建议,我们后续根据需求提供灵活的TARS配置及后置插件。
采样器示例配置
详解下,因为TARS文件采用IDL(交互式数据语言)实现可视化编程。TARS的IDL对数据结构的描述定义一般是如下方式,其结构的每个字段依次包括`tag`(指在序列化时这个字段在结构中被序列化的顺序)、是否必须、类型、名称。示例如下:
在设计TarsJson结构时,目标是使用JSON结构精准的描述每一个Tars Struct的数据内容,同时易读易懂。上述结构将被翻译为:
由此可见整个JSON结构:
除此之外,TarsJson的结构设计在代码层面,通过区分通用类型、TARS类型、map类型、vector类型,四种类型的输入输出方法嵌套调用,保证无论您的TARS结构如何复杂,都能通过我们的插件一键转化为TarsJson。
方法参数列表:
注意的是方法参数列表的JSON可视化数据支持映射类型如下:(具体详见GitHub)
TARS扩展参数:提供基本的TARS测试环境配置,可修改
请求上下文:客户context(上下文信息)上报,客户端至TARS服务端单向。
请求状态:客户与TARS服务间双向交互状态信息
点击运行,查看树结果,可获取TARS服务的响应信息
(更多安装与使用细节可详见GitHub)
JMeter有一个广为人知的缺点:它的经典模型每个用户就是一个JavaThread,在线程调度方面,资源耗用是比较大的,这将导致单台部署JMeter的压测机器输出性能可能不会太高。但是,JMeter支持分布式压测,通过如下图的组网,可伸缩扩展JMeterslave个数,轻松满足各个量级的压力需求。
同时可以使用JMeter压测集群K8s部署方案来更加方便的管理压测集群,参考:https://github.com/kubernauts/jmeter-kubernetes
TarsJMeter是一个桥梁,连接着开源性能测试框架JMeter和TARS,让使用TARS的工程师们注意力集中在服务设计和开发上。当TARS需要测试时,可以借助JMeter庞大的社区、完善的基础组件、海量的文档、标准的测试操作来完成服务性能评估,以及丰富TARS的构建场景。而我们只是桥梁的设计者,既希望TARS的开源共建往前迈进,同时也能延伸JMeter的开源支持。
最后,欢迎各位在测试中体验TarsJMeter,若能提出改善建议,也是及时帮助我们完善TarsJMeter,非常感谢大家也参与入来贡献,记得来Star和Fork哦!
TARS官方培训电子书下载:(或者点击“阅读原文”)
https://wj.qq.com/s2/6570357/3adb/