如何进行TCP协议的压测
背景信息
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。 应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。
本文所述流程通过建立线程组和TCP Sampler,来模拟服务端和客户端通过TCP协议建立连接传递数据的过程。
如果您需要对TCP协议的场景进行压测,您可以使用JMeter的TCP Sampler来编写脚本,然后将脚本文件上传至CPTS发起压测。本文将介绍详细步骤。
前期部署
在使用JMeter之前,您需要做好如下准备工作。
- 部署可在公网访问的TCP服务。
- 安装JMeter 4.0版。
JMeter脚本编写步骤
- 启动JMeter GUI。
- 为Test Plan添加TCP Sampler Config,定义脚本中所有TCP Sampler的共用参数。
- 右键单击Test Plan,选择Add > Config Element > TCP Sampler Config。
- 在TCP Sampler Config中,填写TCP Sampler的共有参数(例: Server Name or IP, Port Number, Timeouts等),这些参数会对此Test Plan中所有TCP Sampler生效。
- 为Test Plan添加一个线程组,为线程组添加一个TCP Sampler。
- 为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,则除非手动停止或崩溃,将一直运行。
- 为线程组添加一个TCP Sampler。右键单击Thread Group1 (Thread Group定义的Name),选择Add > Sampler > TCP Sampler。
- 设置TCPClient classname(默认为TCPClientImpl,即发送内容为编辑器中的纯文本),并根据实际压测需求,配置其他选项。
参数配置说明如下:
Name: TCP Sampler名字,建议取有意义的名字以区分和查找。
Server Name or IP: 服务器名或IP地址。
Port Number: 端口号。
Timeouts/超时(milliseconds/毫秒):
- Connect:建立连接的超时时间。
- Response:等待响应的超时时间。
Re-use connection:复用前置session的连接,默认勾选。
Close connection:每次发送新数据之前,断开当前连接并建立新的连接。
Set NoDelay:若选中,会禁用Nagle’s算法,每个消息以独立的包发送;若不选中,较小的消息会合并在一个包中发送。
SO_LINGER:若选中且设置了值(单位秒),则在关闭连接后会在设置的延迟时间内等待套接字缓冲区中的数据发送,若未选中,则在关闭连接发送完FIN后会立即进行清理工作并返回。
End of line (EOL) byte value:表示一个结束标识符,若设置值在-128~127范围外将会跳过EOL检查,若未选中则会一直读到输入流结束。
Text to send:发送的文本内容。
- 点击菜单栏保存图标,并选择合适路径,点击Save即可保存为JMX文件。
- 根据您的压测需要,参照上述步骤,配置多个线程或多个TCP Sampler。脚本调试成功后,保存JMX脚本文件。
CPTS操作步骤
将JMX脚本,CSV文件(如有)上传到CPTS-JMeter发压场景,设置压测量级,即可随时发起压测。
具体操作,请参考创建JMeter发压场景。