TarsJMeterJMeter 测试插件
TarsJMeter是一款针对Tars协议进行私有化定制的JMeter测试插件,其目的是为了帮助用户解决Tars服务的性能评估与测试。以下场景可能使用到TarsJMeter:
- 开发了一组Tars服务,需要对这组RPC服务,进行简单自测时,可以使用JMeter搭载该插件,基于Tup 收发进行无需编码的接口单测;
- 需要对Tars接口进行性能评估、压力测试、稳定性测试时,可以使用JMeter搭载该插件。
TarsJMeter特点如下:
- 易用性强,只需对JMeter有一定的了解,即可采用TarsJMeter简洁的UI实现测试用例开发。
- 支持分布式,通过JMeter的集群模式,可实现Tars服务的负载测试。目前我们有使用集群模式轻松触顶测试过吞吐量达50000TPS的Tars单服务。
- 可测复杂场景,TarsJMeter结合JMeter丰富的 Logic Controller, Pre Processors, Post Processors,Timer,Config Element等组件,可丰富测试场景,使得测试用例不再是单一的接口测试。
- 数据可监控,JMeter可把Tars服务的测试数据上报至InfluxDB(时序数据库),InfluxDB可与第三方监控平台对接,实现对数据流量的实时监控。
插件使用json
来定义目标Tars方法的入参或返回值数据,这样可以做到Tars结构化数据能够更好的可视化。插件集成的Tars2JsonMojo
工具,提供从Tars Struct到 Json数据的快速转换能力。json可视化数据支持类型列表如下:
tars
//tars结构化数据 map
//map数据 vector
//复杂数据数组 boolean
// 8种基本类型数据 byte
int
short
long
float
double
string
boolean[]
// 8种基本类型数据的数组 byte[]
int[]
short[]
long[]
float[]
double[]
string[]
数据定义举例
基础类型及基础类型数组的定义:
-
string
{ "type" : "string", "value" : "this is a primitive type" }
-
int
{ "type" : "int", "value" : 100 }
-
int[]
{ "type" : "int[]", "value" : [100 , 200 ] }
map<string,string>
类型的定义:
{ "type": "map", "value": [ { "key": { "type": "string", "value": "map key", "tag": 0 }, "value": { "type": "string", "value": "map value", "tag": 1 } } ], "tag": 0 }
vector
类型的定义,除8大基本类型的数组以外,区分基本类型的vector
和tars struct的vector
是为了,在使用较常使用的基本类型vector
时,json
结构更为清晰简洁:
{ "type": "vector", "value": [ { "type": "tars", "value": "more detail tars struct {}", "tag": 0 }, { "type": "tars", "value": "more detail tars struct {}", "tag": 0 } ], "tag": 0 }
tars混合结构示意,对于如下Tars Sturct和tars Interface的IDL定义文件:
module Tars2JsonExample { enum EOpType { EOpType_None = 0, EOpType_SmsAuth = 1, }; struct SubStruct { 0 optional string sub; }; struct TarsStructExample { 0 optional vector<string> stringVec; 1 optional long tryLoginTime = 0; 2 optional EOpType enumTest; 3 optional vector<map<string,SubStruct>> vectorMap; 4 optional map<int, vector<byte> > mapCheck; }; interface Tars2JsonExampleServant { int getTarsStruct(TarsStructExample resp); }; };
可以通过tars2json自动转化为:
{ "stringVec": { "type": "string[]", "value": [ "" ], "tag": 0 }, "tryLoginTime": { "type": "long", "value": 0, "tag": 1 }, "enumTest": { "type": "int", "value": 0, "tag": 2 }, "vectorMap": { "type": "vector", "value": [ { "type": "map", "value": [ { "key": { "type": "string", "value": "", "tag": 0 }, "value": { "type": "tars", "value": { "sub": { "type": "string", "value": "", "tag": 0 } }, "tag": 1 } } ], "tag": 0 } ], "tag": 3 }, "mapCheck": { "type": "map", "value": [ { "key": { "type": "int", "value": 0, "tag": 0 }, "value": { "type": "byte[]", "value": [ 0 ], "tag": 1 } } ], "tag": 4 } }
Tars2Json使用
在使用插件时,并不需要手工地编写json
格式的tars数据,插件中集成的tars2json工具会自动识别您定义的tars接口文件,完成转换,只需:
- 选择接口参数或返回值类型;
- 如为tars,点击插件界面底部的tars2json button;
- 指定"目标Tars接口名称",如
TarsStructExample
; - 选择"目标Tars所在路径",可以是Tars文件所在的目录路径,也可以是Tars文件的文件路径;
- 点击button tars2json,即可获得对应Tars Struct 的json数据描述。
评论