HTTP 是通过 Socket 来使用 TCP 的,Socket 做为套接层 API,它本身不是协议,只规定了 API。
通常在JMeter 中写 TCP 脚本,就是直接调用 Socket 层的 API。TCP 脚本和 HTTP 脚本最大的区别就是,TCP脚本中发送和接收的内容完全取决于 Socket server 是怎么处理的,并没有通用的规则。
一.编写Jmeter脚本
-
创建线程组
- Number of Threads(users):我们都知道这是 JMeter 中的线程数,也可以称之为用户数
- Ramp-up Period(in seconds):递增时间,以秒为单位。指的就是上面配置的线程数将在多长时间内会全部递增完。如果我们配置了 100 线程,这里配置为 10 秒,那么就是 100/(10s*1000ms)=1 线程 /100ms;需要注意的是,在 10 线程启动的这个阶段中,对服务器的压力是一样的。如图:
- Loop Count :这个值指的是一个线程中脚本迭代的次数
- Delay Thread creation until needed:这里有一个默认的知识点,那就是 JMeter 所有的线程是一开始就创建完成的,只是递增的时候会按照上面的规则递增。如果选择了这个选项,则不会在一开始创建所有线程,只有在需要时才会创建。 如果不选择,在启动场景时,JMeter 会用更多的 CPU 来创建线程,它会影响前面的一些请求的响应时间。 如果选择了的话,就会在使用时再创建,CPU 消耗会平均一些,但是这时会有另一个隐患,就是会稍微影响正在跑的线程。这个选项,选择与否,取决于压力机在执行过程中,它能产生多大的影响。如果你的线程数很多,一旦启动,压力机的 CPU 都被消耗在创建线程上了,那就可以考虑选择它,否则,可以不选择。
- Scheduler Configuration:举例来说,如果设置了 Loop Count 为 100,而响应时间是 0.1 秒,那么 Loop Count * iteration duration(这个就是响应时间) = 100 * 0.1 = 10秒。 即便设置了 Scheduler 的 Duration 为 100 秒,线程仍然会以 10 秒为结束点。 如果没有设置 Scheduler 的 Duration,那么你会看到,在 JMeter 运行到 10 秒时,控制台中会出现如下信息:
INFO o.a.j.t.JMeterThread: Thread finished: Thread Group 1-10
- 创建HTTP Sampler
- 可以通过Method选择方法类型
- 手工编写 HTTP 脚本时,要注意以下几点:
- 要知道请求的类型,我们选择的类型和后端接口的实现类型要是一致的
- 业务的成功要有明确的业务判断
- 判断问题时,请求的逻辑路径要清晰
-
编写TCP脚本
- 创建TCP Sampler
- 输入配置和要发送的消息
- 创建TCP Sampler
-
相应断言
- 定义: 断言指的就是服务器端有一个业务成功的标识,会传递给客户端,客户端判断是否正常接收到了这个标识的过程。
- 定义: 断言指的就是服务器端有一个业务成功的标识,会传递给客户端,客户端判断是否正常接收到了这个标识的过程。
-
长短链接
- 长短连接的选择取决于业务的需要,如果必须用短链接,那可能就需要更多的 CPU 来支撑;要是长连接,就需要更多的内存来支撑(用以保存 TCP 连接)