1、背景
在压测的过程中,我们不免会碰到一些疑惑,比如批量http的执行顺序,而这些顺序问题直接关系到我们的脚本逻辑的设计和压测结果的评估。
假设线程组一批请求中多次轮询,是否等每次轮询执行完成,才进行下一轮的请求?批量请求的http执行顺序是怎样子的?前一个http加入定时器后是否会影响下一个http请求?
2、揭秘
假设有5个http请求,其中第3个http加入固定定时器,等待3秒,如图
2.1、例子1-单个线程
线程组控制参数,如下
执行结果如下:
可是我们的线程(模拟的用户数),通常情况下都不会只有一个,而是有多个
2.2、例子2-多个线程
线程组控制参数,如下
执行结果如下:
如上图,对应的线程1,先执行线程1的第一轮和线程1的第二轮,接下来执行线程2,线程2的第一轮和线程2的第二轮……以此类推
答案是不是那么简单?
如果真是这么简单,呵呵,我就没必要写这篇博客笔记了……
2.3、例子3-多个线程调整启动时间
我们调整线程组启动时间参数,如下
执行结果如下:
如上图,对应的线程组就不是按步就班地执行了,线程1,线程2,线程3所对应的第一轮前两个http先抢占cpu资源,先执行,等到线程1的第3个http等待3秒的时间到后,才执行线程1剩余的后3个http请求。
由此可见,前一个http加入定时器后会影响下一个http请求,等待资源期间,其他线程的http请求会抢占cpu,先执行;批量http请求的执行顺序与线程组启动时间有关;
3、总结
1.同一线程组,同一轮http请求执行顺序,按从上到下顺序执行;
2.同一线程组,不同轮http请求执行顺序,与线程组的启动时间有关;
2-1)若启动时间远大于执行完一轮所需的时间,那么每一轮都会按步就班执行;
2-2)若启动时间小于执行每一轮所需的时间,那么其他线程就会直接抢占cpu资源,先执行