11-性能测试之JMeter线程组

导读

  1. 准备本节所用到的测试计划
  2. 线程组详解
  3. 本章总结

1、准备测试计划

(1)新建测试计划
(2)新建线程组
(3)添加两个请求(前面录制的360搜索请求)
(4)添加察看结果树,用来验证结果
准备好的测试计划如下图所示:
请求1,搜索storm关键字
11-性能测试之JMeter线程组_第1张图片
请求2,搜索lina关键字
11-性能测试之JMeter线程组_第2张图片

2、线程组

测试计划,右键,添加,Threads(user),线程组,如下图所示:
11-性能测试之JMeter线程组_第3张图片

我把线程组理解为一个测试场景,本次要压测的场景所包含的操作都放到一个线程组里面,比如,我要对登录功能进行压测,包含两个动作,一个是打开登录页面,一个是输入用户名、密码,点击登录按钮,着两个动作都放到一个线程组中,就是我们的测试登录的场景。因此:

(1)名称:线程组的名称就取测试场景的名称;
(2)注释,就是描述信息,比较好理解;
(3)- 线程属性

  • 线程数:这个比较好理解,就是虚拟用户数,比如你想模拟1000个用户并发,这里就填1000;
    先来看看1个线程的执行结果
    11-性能测试之JMeter线程组_第4张图片
    再来看看2个线程的执行结果
    11-性能测试之JMeter线程组_第5张图片
    几个线程,就是模拟几个人去执行以下线程组下面的操作。在本测试计划中,两个线程就是分别执行一遍请求1和请求2。

  • Ramp-Up period(in seconds):在多少秒内启动上面设置的线程。
    由于线程执行请求速度比较快,这里我们给请求1加个固定时间定时器,让请求1执行完等待10秒钟,才进行下面的请求2。注意定时器加在请求1下面,即只对请求1有效。
    11-性能测试之JMeter线程组_第6张图片
    先看1秒启动100个线程,注意观察右上角的进程数
    11-性能测试之JMeter线程组_第7张图片
    JMeter会全力创建线程,几乎在1秒钟就创建了100个线程
    11-性能测试之JMeter线程组_第8张图片
    再来看看10秒钟启动100个线程,注意观察右上角
    11-性能测试之JMeter线程组_第9张图片
    大概在10秒钟的时候才启动起来100个线程。图中显示的99个线程,想想为什么?因为第一个线程发送请求1,然后等待10秒,再发送请求2,这个时间基本上就是10秒钟,所以当10秒钟的时候,第一个请求执行完毕,会退出,就只剩99个线程了。

  • 循环次数:默认为1,就是n个线程将本线程组的动作执行一遍(请求发送一次);
    默认循环次数是1的话,2个线程,发送2个请求,循环1次,一共是4个请求;

修改循环次数是2次的话,2个线程,发送2个请求,循环2次,一个是4*2=8个请求;
11-性能测试之JMeter线程组_第10张图片

  • 永远,勾选此选项的话,所有的线程就会一直不停的一遍又一遍的发送请求,直到发送错误,或手动停止;
  • Delay Thread creation until needed:勾选的话,只有进程被需要的话才会创建;后面举例介绍;

(4) - 调度器:如果勾选scheduler,则下面两个选项可以输入内容
注意,需要勾选loop count为forever

  • 持续时间(秒):整个测试执行多长时间;
    我们设置持续10秒看看效果。一直发送请求10秒后结束
    11-性能测试之JMeter线程组_第11张图片

  • 启动延迟(秒):从点击启动开始,延迟多少秒启动。
    需要配置上面的持续时间一起使用
    11-性能测试之JMeter线程组_第12张图片
    点击运行后,发现并没有线程启动,一直等到20秒后才开始启动线程发送请求,持续10秒后,结束。

(5)在取样器错误后要执行的动作;
前提:我们修改测试计划,让第一个请求执行失败,从而验证下面的几个选项的作用。修改请求1的Path,因为修改后的Path不存在,所以会响应失败,如下图所示:
11-性能测试之JMeter线程组_第13张图片

  • 继续:取样器错误后,该线程继续执行后面的请求
    线程组设置如下图:
    11-性能测试之JMeter线程组_第14张图片
    可以看到,共有2个线程,每个线程发送两个请求,循环2次,不管请求发送成功还是失败,都继续发送,因此,我们会发送8个请求,只不过线程1和线程2各发送请求1会失败2次,一共4次。让我们运行,然后看结果
    11-性能测试之JMeter线程组_第15张图片
    请读者依次点击查看结果树中的8个请求,线程1发送请求1失败,但并没有停止,继续发送请求2,线程2发送请求1失败,也继续发送请求2

  • Start next Thread loop:开始下一个线程的循环
    这里我们修改线程组设置,取样器错误就终止本次循环,如下图
    11-性能测试之JMeter线程组_第16张图片
    运行,查看结果:
    11-性能测试之JMeter线程组_第17张图片
    线程1发送请求1失败,不再发送请求2,进入到下一个循环发送请求1,又失败,不再发送请求2;线程2也是如此;因此出现了4个错误响应。

  • 停止线程:停止本线程,其它线程继续工作
    修改线程组设置
    11-性能测试之JMeter线程组_第18张图片
    运行,查看结果
    11-性能测试之JMeter线程组_第19张图片
    线程1,发送请求1失败,就停止本线程,不发送请求2,也不进行第二次循环;线程2也是如此;因此收到2个错误响应

  • 停止测试:停止测试,但线程要执行完后结束
    修改线程组设置,如下图:
    11-性能测试之JMeter线程组_第20张图片
    运行,查看结果
    11-性能测试之JMeter线程组_第21张图片
    线程1遇到错误,就停止测试了,线程2不会发送请求。所以收到一个错误响应。

  • Stop test now:立即停止测试,所有线程结束
    修改线程组
    11-性能测试之JMeter线程组_第22张图片
    然后调整一下请求1和请求2 的位置,也就是让请求1发送成功,请求2发送失败。
    运行测试
    11-性能测试之JMeter线程组_第23张图片
    线程1,执行第1个请求成功,第2个失败,就要求关闭所有的线程,因此出现了socket closed的情况。

3、总结

(1)线程数的设置比较好理解,想要多少并发就设置多少线程;
(2)线程启动时间是为了模拟渐进加压的场景,其实一般也不用,有人说用来模拟真实情况?真实情况是啥样的你知道哇,设置多少秒合适呢?
(3)循环次数一般配合数据文件使用
(4)至于失败后的策略,则根据实际业务场景选择:
比如,场景一:包含步骤1,步骤2,假如步骤1执行失败不影响步骤2的操作,那么这时候应该选择continue策略。
场景二:包含步骤1,步骤2,假如步骤1执行失败,步骤2就不能操作,那么应该选择开始下一次循环。比如登录失败后,就不能进行其他操作。

你可能感兴趣的:(性能测试,性能测试)