0%

jmeter场景设计

场景设计

  • 在建立测试模型时已经确定了测试的业务种类,场景设计是组织虚拟用户、组合业务种类到一个测试单元,根据测试模型与测试目标,整理出如表 11-11 所示测试场景。
  • 并发数的计算来源于这里

image-20211026103114157

image-20211026103138117

Sec_101 基准测试:

  • 主要用来验证测试环境、验证脚本正确性、得到系统的性能基准,为后续的测试执行提供参考。基准测试采用单业务场景、单用户的方式来执行脚本;执行时长视响应时间调整,测试结果采样样本尽量大(比如响应时间1秒,1000 个事务就需要运行 1000 秒以上;响应时间 200 毫秒,运行 600 秒就可以完成 3000 个事务的采样,600*1000/200=3000)。

Sec 102 配置测试:

  • 帮助分析系统相关性能配置,确保系统配置适合于当前性能需求,一般场景为混合场景(多个业务同时执行)。测试过程是一个实验过程,先是找出不合理配置,然后进行修改,最后进行验证;周而复始只到配置满足要求。

Sec 103 负载测试场景:

  • 负载测试的目的是帮助我们找出性能问题与风险,对系统进行定容定量,分析系统性能变化趋势;为系统优化、性能调整提供数据支撑。
  • 负载测试在执行时又分为单场景与混合场景;单场景有利于分析性能问题,因为排除了其他业务的干扰;混合场景更贴近于用户实际使用习惯,是一个综合的性能评估。建议读者先做单场景的性能执行工作,后做混合场景的执行工作。可以看到表 11-11 中的负载场景有多个不同负载量。

image-20211026104416276

  • 曲线是常见的性能变化趋势图,1这个点,通常就是我们估算的满足性能需求的点
  • 2这个点达到系统最大吞吐量,通常是系统拐点(之后性能变差)
  • 3这个点是系统已经过载吞吐量已经开始减小;负载测试原则上需要找出这3个点。在负载测试执行时找出这3个点还是比较麻烦的,常常会因为一些配置、程序问题而受到干扰;通常找出这3个点需要很多次的执行,所以测试执行也是一个耗时的工作。

Sec 104 稳定性测

  • 稳定性测试的目的是验证在当前软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定,执行时采用混合场景。
  • 按惯例要求执行时间不低于 8 小时,在此我们计划运行 12 小时。稳定性测试原则上是时间越长越好,有些隐藏较深的诸如内存溢出的问题是需要长时间运行才能反映出来的。
  • 注:实例 Jforum 系统场景比较简单,直接把多个业务组织一起即可;实际工作中会遇到一些场景复杂的业务。比如 WMS (仓库管理系统)系统, WMS 中都会有盘点功能,此功能就不应该与日常功能混合在一起,因为盘点通常都是一月一次,所以组织场景时尽量要与实际业务情况一致。

场景实现

  • 基准测试很好实现,只要保证脚本能正常跑就可以了

配置测试

  • 运行多个线程组,实现配置测试

    image-20211026105457474

用户估算

  • 在实现场景之前先搞清楚业务关联关系(登录/浏览帖子/发新帖/回复帖子的比例为
    20:40:7:10),发帖与回帖时需要登录,回帖之前会浏览帖子,浏览帖子是可以不用登录的,发帖
    与回帖的并发数小于登录,所以有部分用户是登录后只浏览帖子。按20:40:7:10的比例来算,回
    帖用户10个,发新帖用户7个,回贴与发帖都需要登录,这样登录已经有17个用户,还需要3
    个用户,可以安排3个用户登录后浏览帖子,最后还需要27个浏览帖子的用户。27个用户的来
    源是40个测览用户减10个回帖用户(回帖前会登录及浏览帖子),再减3个登录后浏览的用户

线程组设置

JMeter线程组之Stepping Thread Group插件参数详情

如图11-49所示

  • This group will start 30 threads - 设置单台负载机,线程组启动的线程总数为30个

  • First,wait for n seconds - 启动第一个线程之前,需要等待1秒

  • Then start 10 threads - 设置最开始启动10个线程

  • Next,add 10 threads every 600 seconds ,using ramp-up 10 seconds - 每隔600秒(十分钟),在10秒内启动10个线程

  • Then hold load for 600 seconds - 单台负载机启动的线程总数达到30个,持续运行600秒

  • Finally,stop 5 threads every 1 seconds - 最后每隔1秒,停止5个线程数

回帖,发帖,浏览帖子Stepping Thread Group设置
  • 图11-49是回帖线程组设置,负载分3个阶段加载,分别是并发10个、20个、30个线程

    image-20211026110301084

  • 图11-50是发帖线程组设置,负载分3个阶段加载,分别是并发7个、14个、21个线程

    image-20211026110321179

  • 图11-51是浏览帖子线程组设置,负载分3个阶段加载,分别是并发27个、54个、81个线程。

    image-20211026110338721

此方式优势:
  • 3个线程组互不干扰,独立设置(3个线程组的并发用户之和刚好与只运行一个线程组的
    场景相等),简单明了,易于维护。
此方式劣势
  • 由于3个线程组分开设置,相当于3个不同的脚本,所以参数化都需要分开,而且登录
    账号同样也不能有冲突,所以可以把用户的参数文件分成3份,每个线程组一份。虽然 JMeter
    也支持多个线程组共用一份参数文件,但是不能保证每个线程取到的参数唯一性。所以在此
    还是建议大家分开做参数化。

负载场景设计

  • 以只运行一个线程组为例来设置负载场景。图11-52是一个典型的负载场景,分3个阶段运行负载
  • 第一阶段只运行77个并发用户,运行10分钟。
  • 第二阶段再加上77个并发用户共计154个用户,运行10分钟。
  • 第二阶段再加上77个并发用户共计231个用户,运行10分钟。
  • 这种场景帮助我们来进行定容定量的测试,最终测试结果整理呈如图11-53所示。当然,测试执行过程中没有这么巧合,不是测试三个点就可以得到结果曲线,常常是不断的试验,

image-20211026113216382

本文抄录于《全栈性能测试修炼宝典JMeter实战》