前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源啦!强大TARS性能测试工具TarsJMeter

开源啦!强大TARS性能测试工具TarsJMeter

作者头像
腾讯开源
发布2020-06-28 11:10:20
1K0
发布2020-06-28 11:10:20
举报

TARS是由腾讯开源的高性能和多语言微服务框架。TarsJMeter是TARS基金会开源项目之一,它是一套运行在JMeter环境上的性能测试方案,目的是给高性能TARS协议提供性能测试与评估。本文主要介绍了TarsJMeter插件的实现机制,操作流程及测试扩展,用于帮助用户快速上手TarsJMeter。

TarsJMeter是一款针对高性能TARS协议定制的JMeter测试插件,其目的是为了给用户提供TARS服务的性能评估与测试方案。适用于如下场景:
• TARS服务的开发者,对开发的TARS服务进行简单的自测,可使用JMeter搭载该插件实现自测。
• TARS服务的性能测试者,对部署的TARS服务进行性能验证与报告,可使用JMeter搭载该插件完成验证。

易用性强:用户只需对JMeter有一定的了解,即可采用TarsJMeter简洁的UI实现测试用例开发。

支持分布式:通过JMeter的集群模式,可实现TARS服务的负载测试。目前已使用集群模式轻松触顶测试过吞吐量达50000TPS的TARS单服务。

支持复杂场景:TarsJMeter结合JMeter丰富的LogicController, Pre Processors, Post Processors, Timer, Config Element等组件,可丰富测试场景,使得测试用例不再是单一的接口测试。

数据可监控:JMeter可把TARS服务的测试数据上报至InfluxDB(时序数据库),InfluxDB可与第三方监控平台对接,实现对数据流量的实时监控。

Tars-Core/Tars-RPC源码提供的交互方式如下图所示(以Java为例): 
TarsJMeter的端侧依靠tars2json,json2stream,stream2json实现去编译,去代码化交互,如图所示:
比较两者,看上去都是对TARS文件做转换,但是Tars2Json的方法,并没有把TARS文件转成测试代码,这使得用户使用TarsJMeter时,无需考虑编译,写代码,生成执行文件等操作;只需在TarsJMeter提供的UI界面上更改自动生成json字符串里“value”字段值即可。

TarsJMeter的测试执行如下图:

TarJMeter把线程调度运行,数据监听等都交给了JMeter自带的基础组件,用户只需关注TARS用例本身。如若想上下文串联多个TARS服务,可以通过JMeter的BeanShell等处理TasrJMeter返回的响应结果来实现;也可提出改进建议,我们后续根据需求提供灵活的TARS配置及后置插件。

安装步骤
• 安装JavaJDK(建议Java8以上);
• 下载JMeter,解压到本地目录即可,建议JMeter 5.2及以上版本;
• 安装目录下的 /bin 存放了jmeter可执行文件; 安装目录下的/lib/ext可以添加扩展的第三方协议测试库;
• Gradle编译打包或者dist下载
• 生成或下载tars_jmeter.jar后,把它放入JMeter安装目录下的/lib/ext里。
用例执行
• 打开JMeter(执行JMeter目录下的bin/jmeter.bat或bin/jmeter.sh)
• 依次添加线程组、取样器(Sampler),出现通用TARS请求表示安装成功。
• 选择通用TARS请求,创建采样器完成。TARS服务文件示例:

采样器示例配置

• 被测服务地址:待测TARS服务的IP
• 被测服务端口:待测TARS服务端口
• 被测服务路径:待测TARS服务的Servant节点信息,例如:TestTars.HelloServer.HelloObj
• 被测接口方法:待测TARS服务的被测函数方法,例如:hello4
• 接口返回值类型:被测函数方法的Return返回值
• tars2json:本地TARS文件或包含TARS的目录中TARS结构体自动转换为供测试使用的JSON格式

详解下,因为TARS文件采用IDL(交互式数据语言)实现可视化编程。TARS的IDL对数据结构的描述定义一般是如下方式,其结构的每个字段依次包括`tag`(指在序列化时这个字段在结构中被序列化的顺序)、是否必须、类型、名称。示例如下:

在设计TarsJson结构时,目标是使用JSON结构精准的描述每一个Tars Struct的数据内容,同时易读易懂。上述结构将被翻译为:

由此可见整个JSON结构:

• 保留了TARS IDL描述文件中的字段名(tryLoginTime),保证人们在读JSON时,能一眼看懂每个字段的含义;
• `value`后跟字段的值;
• `type`字段用于保证字段值能够精准的序列化/反序列化为正确的类型;
• `tag`字段保证了序列化顺序。

除此之外,TarsJson的结构设计在代码层面,通过区分通用类型、TARS类型、map类型、vector类型,四种类型的输入输出方法嵌套调用,保证无论您的TARS结构如何复杂,都能通过我们的插件一键转化为TarsJson。

方法参数列表:

• 名称(自定义,一般为函数的入参变量名)
• 方法参数列表(根据函数的入参变量类型,转换为对应的JSON格式)
• type(选择函数的入参类型)例如:inthello4(int no, out User user)

注意的是方法参数列表的JSON可视化数据支持映射类型如下:(具体详见GitHub)

• TARS结构化数据
• map字典
• vector数组
• 8种常用的数据类型byte、int、short、long、float、double、string、boolean
• 8种常见类型的数据数组byte[]、int[]、short[]、long[]、float[]、double[]、string[]、boolean[]

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哦!

TarsJMeter GitHub地址:https://github.com/TarsCloud/TarsJMeter

TARS官方培训电子书下载:(或者点击“阅读原文”) https://wj.qq.com/s2/6570357/3adb/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TarsJMeter是一款针对高性能TARS协议定制的JMeter测试插件,其目的是为了给用户提供TARS服务的性能评估与测试方案。适用于如下场景:
  • • TARS服务的开发者,对开发的TARS服务进行简单的自测,可使用JMeter搭载该插件实现自测。
  • • TARS服务的性能测试者,对部署的TARS服务进行性能验证与报告,可使用JMeter搭载该插件完成验证。
  • Tars-Core/Tars-RPC源码提供的交互方式如下图所示(以Java为例): 
  • TarsJMeter的端侧依靠tars2json,json2stream,stream2json实现去编译,去代码化交互,如图所示:
  • 比较两者,看上去都是对TARS文件做转换,但是Tars2Json的方法,并没有把TARS文件转成测试代码,这使得用户使用TarsJMeter时,无需考虑编译,写代码,生成执行文件等操作;只需在TarsJMeter提供的UI界面上更改自动生成json字符串里“value”字段值即可。
  • 安装步骤
  • • 安装JavaJDK(建议Java8以上);
  • • 下载JMeter,解压到本地目录即可,建议JMeter 5.2及以上版本;
  • • 安装目录下的 /bin 存放了jmeter可执行文件; 安装目录下的/lib/ext可以添加扩展的第三方协议测试库;
  • • Gradle编译打包或者dist下载
  • • 生成或下载tars_jmeter.jar后,把它放入JMeter安装目录下的/lib/ext里。
  • 用例执行
  • • 打开JMeter(执行JMeter目录下的bin/jmeter.bat或bin/jmeter.sh)
  • • 依次添加线程组、取样器(Sampler),出现通用TARS请求表示安装成功。
  • • 选择通用TARS请求,创建采样器完成。TARS服务文件示例:
  • • 被测服务地址:待测TARS服务的IP
  • • 被测服务端口:待测TARS服务端口
  • • 被测服务路径:待测TARS服务的Servant节点信息,例如:TestTars.HelloServer.HelloObj
  • • 被测接口方法:待测TARS服务的被测函数方法,例如:hello4
  • • 接口返回值类型:被测函数方法的Return返回值
  • • tars2json:本地TARS文件或包含TARS的目录中TARS结构体自动转换为供测试使用的JSON格式
  • • 保留了TARS IDL描述文件中的字段名(tryLoginTime),保证人们在读JSON时,能一眼看懂每个字段的含义;
  • • `value`后跟字段的值;
  • • `type`字段用于保证字段值能够精准的序列化/反序列化为正确的类型;
  • • `tag`字段保证了序列化顺序。
  • • 名称(自定义,一般为函数的入参变量名)
  • • 方法参数列表(根据函数的入参变量类型,转换为对应的JSON格式)
  • • type(选择函数的入参类型)例如:inthello4(int no, out User user)
  • • TARS结构化数据
  • • map字典
  • • vector数组
  • • 8种常用的数据类型byte、int、short、long、float、double、string、boolean
  • • 8种常见类型的数据数组byte[]、int[]、short[]、long[]、float[]、double[]、string[]、boolean[]
  • TarsJMeter GitHub地址:https://github.com/TarsCloud/TarsJMeter
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档