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数据描述。
评论
