TarsJMeterJMeter 测试插件

联合创作 · 2023-10-01 16:45

TarsJMeter是一款针对Tars协议进行私有化定制的JMeter测试插件,其目的是为了帮助用户解决Tars服务的性能评估与测试。以下场景可能使用到TarsJMeter:



  1. 开发了一组Tars服务,需要对这组RPC服务,进行简单自测时,可以使用JMeter搭载该插件,基于Tup 收发进行无需编码的接口单测;

  2. 需要对Tars接口进行性能评估、压力测试、稳定性测试时,可以使用JMeter搭载该插件。



TarsJMeter特点如下:



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

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

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

  4. 数据可监控,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接口文件,完成转换,只需:



  1. 选择接口参数或返回值类型;

  2. 如为tars,点击插件界面底部的tars2json button;

  3. 指定"目标Tars接口名称",如TarsStructExample

  4. 选择"目标Tars所在路径",可以是Tars文件所在的目录路径,也可以是Tars文件的文件路径;

  5. 点击button tars2json,即可获得对应Tars Struct 的json数据描述。

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报