项目背景:
这次测试的是外海项目的接口,我们的轨迹上传走是的2条不通的通道,一个是MQTT协议(实时上传,付费通道),一个是HTTP协议(断网时缓存下来的轨迹在联网后上传,免费通道)。现在记录的是MQTT连接数上传测试
测试结构:
由于上传轨迹走的是MQTT通道,不需要绑定设备,只要联网就可以上传,所以发布者与订阅者只要连的是同一个Topic就可以发布与订阅数据。
1:下载QTT插件:
从github下载您需要的release版本, 解压mqtt–xmeter-jar-with-dependencies.jar.zip, 将生成的jar文件放到JMeter安装主目录 的lib/ext下,重启JMeter,就可以看到插件成功加载。
2:连接操作取样器(客户A )
Server name or IP: 指向被测MQTT服务器地址。
Port number: 通常TCP连接的端口时1883, SSL连接则是8883
MQTT version:选择3.1.1(选择3.1的话,有些需要传参的数据不支持这版本的话发布数据会报错)
Timeout(s): 连接超时设置,以秒为单位。
Protocols: 客户端与服务器通过SSL加密通道连接时,可以选择单向或者双向认证(Dual)。双向认证时,您还需要指定相应的信任秘钥库(Trust Key Store), 客户端证书,以及对应的文件保护密码(Secret)。这些文件可以通过服务器的证书配置转化得到。例如,对于EMQ的安装部署,<emqttd_home>/etc/cert下就存放了自签证的CA,服务器及客户端证书,参考下面的命令就可以生成插件所需的.jks, .p12文件,secret自行指定即可。(此项参数是查阅资料得知,固先copy过来,可能后续后用到)
export PATH=$PATH:<JDK_HOME>/bin
keytool -import -alias cacert -keystore emqtt.jks -file cacert.pem -storepass <Your_Secret> -trustcacerts -noprompt
keytool -import -alias client -keystore emqtt.jks -file client-cert.pem -storepass <Your_Secret>
keytool -import -alias server -keystore emqtt.jks -file cert.pem -storepass <Your_Secret>
openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:<Your_Secret>
User authentication: 如果服务器配置了用户认证,您需要提供相应的用户名和口令。
ClientId: 标识客户端的固定前缀,每个连接(虚拟用户)再添加一个uuid串,整个作为客户标识。
(我们的格式为:GID_dofun_car@@@+设备号,可能每个项目定义的不一样,需要问相关业务的开发同事)
Keep alive(s): 心跳信号发送间隔。例如,300表示客户端每隔300秒向服务器发出ping请求,以保持连接活跃。
Connection keep time(s): 连接建立后,保持该连接的时长。例如,300表示300秒之后连接将被关闭,即使一直发送心跳信号。
Connect attempt max: 第一次连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
Reconnect attempt max: 后继连接过程中,尝试重连的最大次数。超过该次数则认为连接失败。
3:发布操作取样器(客户A )
QoS Level: 服务质量,取值为0,1,2,分别代表MQTT协议规范里的至多一次,至少一次,精确一次(详情可再查看其它资料看下)
Topic name:为发布的主题名称(如果需要订阅此主题,那么订阅的主题名称必须与此此发布的主题名称一致)
Add timestamp in payload:如果勾选,发布的消息体开头会附带当前时间戳,利用它可以在消息接收端计算消息达到的延时。不勾选则只发送实际的消息体。
Message type: 目前支持三种消息类(发布的数据内容需要符合服务器的格式,不然不接收的)
String: 普通字符串
Hex String: 以16进制数值表示的串,比如字符串Hello, 可以表示为48656C6C6F (其中,48在ascii表中对应字母H,依次类 推)。通常16进制串用来构造非文本的消息体,例如描述某些私有的协议交互和控制信息等等。
Random string with fixed length: 按指定长度生成随机的串作为消息
4:订阅操作取样器(客户A )
5:连接操作取样器(客户B)
6:发布操作取样器(B客户)
B客户发布的主题名为A客户订阅的主题,所以A订阅的主题命名为B发布的主题名
7:订阅操作取样器(B)
B订阅的主题名为A客户发布的主题,所以B订阅的主题名与A发布的主题名一致。
8:执行测试(查看发布的消息服务器是否接收到,可从监控台里面查看)
- QoS Level: 服务质量,含义与发布操作取样器相同。
- Topic name: 订阅消息所属的话题。
- Payload includes timestamp: 如果勾选,会从消息体开头处解析发送时间戳,用于计算消息的接收延时。
- Debug response: 如果勾选,消息内容会打印在JMeter的响应结果中,用于调试目的。正式运行测试建议不勾选。