07.Jmeter线程组概述

目录

0、测试计划

1、线程组

2、一些设置再谈

3、线程组的分类

4、调度器

5、取样器错误后要执行的动作

6、线程号

7、线程启动分析

8、是否为同一个用户的分析

9、线程组之间抢占资源

10、线程组内线程会抢占资源

11、JMeter发送的请求如何抓包


0、测试计划

  • 测试计划是用来描述一个性能测试的顺序与动作,它包含了若干测试组件以及若干个线程组

  • 我们通常说的所有测试元素在JMeter中都属于某一个测试计划

  • 测试计划可以添加除了【取样器和控制器】以外的所有组件

  • 测试计划中也是可以添加自定义变量的


1、线程组

  • 线程组概述:

    • 线程组是一个元件
    • 线程组是加到测试计划下的,是任何一个测试计划的开始点

    • 在一个测试计划中,所有的请求或者说取样器都必须在某个线程组之下。

    • 所有的任务都要基于线程组。

    • 所以测试计划下至少要有一个线程组。

    • 一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。

    • 线程组可以有多个,多个线程组可以并行或者串行运行

      • 默认情况下,是并行执行的
        • 可以设置串行运行

        • 设置的方式: 测试计划 ---> 勾选”独立运行每个线程组"

        

  • 取样器【请求】和逻辑控制器必须依赖线程组才能运行

    • 线程组下可以添加其他元件

  • 1)名称

  • 2)注释

  • 3)取样器错误后要执行的动作

    • 继续
      • 发生错误后没有关系,继续执行就好了
      • 我们在压测中是允许一定的错误率的

    • 启动下一进程循环

      • 发生错误后,我这个线程后面的请求就不执行了,重新启动新的一个线程,或者说迭代
      • 比如我设置了线程数为1,循环次数为2,当循环第一次的时候,出了问题,那么第一次后面的请求就不执行了,转而执行第二次循环

    • 停止线程

      • 一般不会设置成这样
      • 这样就停止了线程,可能导致后面测试的时候,线程越来越少,负载就不够了,测试就没有意义了。

    • 停止测试

      • 把当前线程执行完了后就停止测试了,要把当前的处理完。
    • 立即停止测试

      • 粗暴的停止,直接就停了,正在处理的都不处理了。
  • 4)线程数:

    • 相当于并发用户数
    • 每个线程在测试计划独立运行,互相之间不会干扰

    • 多个线程用于模仿对服务器的并发访问,比如配置线程数为10,就表示模拟10个用户对接口发起请求

    • 默认是1

    • 如果你要对服务器有相应的负载,需要多设置线程数,因为它代表的是用户数

      • 而不是说在循环次数里面去多设置值

      • 虽然说看起来发送的请求都是  线程数 * 循环次数
      • 但是对服务器的负载是不一样的!

  • 5)Ramp-Up时间(秒)

    • 在多少秒内启动这么多并发数
    • 比如线程数配置为100,Ramp-Up时间配置为10,就表示10s内启动100个线程,平均下来就是每1s启动10个线程

    • 如果不配置Ramp-Up 时间,或者配置为了0,表示立即启动所有线程

  • 6)循环次数

    • 设置线程组下面的元件执行的次数
    • 表示重复执行几次的意思

    • 比如线程数为x,循环次数为y,那么总共会执行x * y次

  • 7)Same user on each iteration

    • 一般用在有cookie的场景
    • 每次迭代用同一个用户

    • iteration,迭代,其实就相当于循环次数

    • 在jmeter里面,可以理解为一个线程就是一个用户

    • 就是选择每次运行是否使用同一个cookie

      • 【选中】每次循环都用的是第一次的cookie,不用更新;可以理解为每次循环都是同一个用户
      • 【不选中】每次循环都用的是新的cookie,那么就是说每次循环都是新的用户

    • 不好举例子,没法举例子

  • 8)延迟创建线程直到需要

    • 当启动线程发送请求时,才分配资源:
      • 如果暂未启动该线程,则不分配
      • 你这样设置,对于压测其实也没有意义了,你没有达到那个对server的负载量是不!

      • 其实我们做压测还要注意控制,希望在同一时刻来进行同时发请求的【当然这个可以通过控制器来实现】

    • 如果不勾选,在jmeter点击运行时,立即分配

    • 使用不多,无法观察效果,了解即可。

  • 9)调度器

    • 需要勾选后,才能选择下面的选项,来设置启动延迟来实现线程的延迟启动;
      • 持续时间(秒)
        • 设置jmeter脚本的持续运行时间
          • 如果脚本的运行时间小于这个持续时间,那么必须勾选循环次数为永远才看得到效果【持续运行的效果】

            • 因为脚本都运行完了,就停止了,无所谓持续运行时间这个说法了
          • 如果同时设置有循环次数,那么谁先到达谁先生效

      • 启动延迟(秒)

        • 设置jemter脚本延迟启动的时间
        • 点击启动后,如果启动时间已经达到,但是还没有到启动延迟那么多秒,这个时候,启动延迟的时间会生效,覆盖掉启动时间;说白了就是要等到那么多时间后,再运行脚本

      • 默认不勾选,表示立即启动线程


2、一些设置再谈

  • 表示10秒内启动100个线程数

    • 意味着每秒启动10个线程数
    • 如果这个Ramp-Up时间值设置得很少,线程数又设置得很大的时候,意味着刚开始执行时会对服务器产生很大的负载,这个需要自己考虑下如何设置合理

  • 点了永远 就会一直循环执行,除非手动停止

  • 循环次数如果填了,就是循环对应的次数

    • 比如上面线程数100,循环次数填10,那么就是相当于要执行 100 * 10 = 1000次
  • Delay thread creation until needed【延迟创建线程直到需要】

    • 默认情况下,测试开始的时候,所有线程都被创建完了
    • 如果勾选了此选项,那么表示线程只会在合适的需要用到的时候创建


3、线程组的分类

  • 线程组

    • 普通的线程组
    • 线程组中的每个线程都可以理解为是一个虚拟用户

  • setup 线程组

    • 在普通线程组之前做一些环境的初始化工作
      • 比如
        • 创建用户
        • 进行数据库的连接

        • 进行数据的准备等

  • teardown 线程组

    • 在普通线程组之后做一些环境的清理工作
      • 比如

        • 删除测试用户
        • 进行数据库的关闭

        • 测试环境的清理工作等       


4、调度器

  • 需要勾选才会生效

  • 持续时间:

    • 线程组持续运行多少时间,以秒为单位
  • 启动延迟

    • 线程组在多久后才开始运行,以秒为单位

5、取样器错误后要执行的动作

  • 继续

    • 继续执行
  • 启动下一进程循环

    • 开始下一次循环
  • 停止线程

    • 停止该线程,不再执行该线程的操作
  • 停止测试

    • 等待当前执行的采样器结束后,结束整个测试
  • 立即停止测试

    • 粗暴的直接停止整个测试

6、线程号

  • 可以通过函数助手生成


7、线程启动分析

  • 10s内加载100个线程,可以添加监听器Active Threads Over Time

    • 因为接口请求执行得太快,所以,没有达到活跃线程数100,有的就已经释放了
  • 1s内直接启动100个线程


8、是否为同一个用户的分析

  • 我们可以通过接口返回的sessionid来判断是否是同一个用户

  • 比如korei系统登录

    • 登录后,会在reponse headers里面设置一个jsessionid,来判断后续操作是否是同一个用户
    • 我们通过接口分析,也能看到

  • 示例脚本:

    • ​​​​​​​
  • 当没有添加cookie管理器的时候,Same user on each iteration勾不勾选都一样

    • 如未勾选:
    • 勾选:

  • 那如果添加上cookie管理器,效果就不一样了

    • 勾选,且cookie管理器没有勾选清除缓存的情况:
      • 才会一样【korei的接口要重定向,无法演示,理论上是这样】

9、线程组之间抢占资源

  • 除了setup、teardown之外,其他的线程组,谁先运行,谁后运行,不太确定

    • 因为它们要抢资源,谁先抢到,谁先运行
  • 那如何解决这种顺序问题呢,可以在测试计划下面勾选

    • [x]独立运行每个线程组(例如在一个组运行结束后)

10、线程组内线程会抢占资源

  • 在普通线程组内,如果线程数大于1,那么线程会抢占资源

    • ​​​​​​​
  • 这个没办法按顺序来,就默认这样就ok了,知道就行。


11、JMeter发送的请求如何抓包

  • 在请求里面选择高级,配置代理

    • ​​​​​​​
  • 然后再使用抓包软件抓包,如charles(MacOS), fiddler(Windows)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值