如何进行UDP协议的压测
背景信息
用户数据报协议(UDP,User Datagram Protocol)是Internet 协议集支持的一个无连接传输协议。在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。
本文所述流程通过建立线程组和UDP Sampler,来模拟服务端和客户端通过UDP协议传递数据的过程。
如果您需要对UDP协议的场景进行压测,您可以使用JMeter的UDP Sampler来编写脚本,然后将脚本文件上传至CPTS发起压测。本文将介绍详细步骤。
前期部署
在使用JMeter之前,您需要做好如下准备工作。
- 部署可在公网访问的UDP服务。
- 安装JMeter 4.0版。
- 安装UDP插件
- 下载UDP所需版本JAR包:jmeter-plugins-udp-0.4.jar。
- 拷贝插件JAR包到JMeter安装目录的lib/ext/子目录下。
JMeter脚本编写步骤
- 启动JMeter GUI。
- 为Test Plan添加一个线程组,为线程组添加一个View Results Tree。
- 为Test Plan添加一个线程组。右键单击Test Plan,选择Add > Threads (Users) > Thread Group。
- 根据需要修改线程组的参数。
部分参数配置说明:
Name: 线程组名字,建议在多线程组并存时取有意义的名字以区分和查找。
Number of Threads (users): 线程数,既模拟用户的数量。
Ramp-Up Period (in seconds): 线程启动后运行的时长,单位为秒。例:有100个线程,Ramp-Up Period设置为2,既每秒启动50个线程,2秒内启动完成。默认值为0,即所有线程开始后立即启动。
Loop Count:循环次数。若勾选forever,则除非手动停止或崩溃,将一直运行。
- 在Test Plan中添加View Results Tree, 观测结果。右键单击Test Plan,选择Add > Listener > View Results Tree。
- 为Thread Group添加一个UDP Sampler并设置参数。
- 添加一个UDP Sampler。右键单击UDP Sampler,选择Add > Sampler > jp@gc - UDP Request。
- 根据实际情况配置参数。
参数配置说明如下:
Name: UDP Sampler名字,建议取有意义的名字以区分和查找。
Hostname/IP: 主机名或IP地址。
UDP Port: 端口号。
Wait for Response:是否等待响应。
Close UDP Socket:关闭UDP套接字。
Response Timeout:响应超时时间。
Data Encode/Decode Class:数据编码/解码方式,有四种不同的方式。
- kg.apc.jmeter.samplers.HexStringUDPDecoder:直接发送16进制数据,HEX-encoded。
- kg.apc.jmeter.samplers.UDPSampler:填写字符串。
- kg.apc.jmeter.samplers.DNSJavaDecoder:dns解析填写格式。
- kg.apc.jmeter.samplers.UDPTrafficDecoder:接口可以自定义编码/解码。
Request Data:请求数据。若数据为空可能会报500错误。
Bind Local Address:绑定的本地地址。
Bind Local Port:绑定的本地端口。
- 脚本编辑完成后,单击页面顶部的绿色开始按钮,运行脚本。通过View Results Tree监听器查看脚本是否运行正常。在左侧导航树中,选择View Results Tree,检查Sampler是否配置正确并符合预期。在该监听器中,如果Sampler前面有绿色对勾表示运行正常,如下图所示。如出现运行异常的Sampler,请根据前述步骤重新进行调试。
- 若调试成功,点击Save Test Plan as,并选择合适路径,即可保存为JMX文件。
CPTS操作步骤
将JMX脚本、CSV文件(如有)上传到CPTS-JMeter发压场景,设置压测量级,即可随时发起压测。
具体操作,请参考创建JMeter发压场景。