JMeter压力测试初探

JMeter压力测试初探

1. 环境准备

JMeter 版本5.3

汉化

D:\apache-jmeter-5.3\bin\jmeter.properties

language=zh_CN

HiDPI(高分屏适配)

Jmeter在4k或者2k高分辨率屏幕下图标与字体都会过小,每次启动后再放大不方便,可以按如下配置:

jmeter.hidpi.mode=``true
jmeter.hidpi.scale.factor=2.0
jmeter.toolbar.icons.size=48x48
jmeter.tree.icons.size=48x48
jsyntaxtextarea.font.family=Hack
jsyntaxtextarea.font.size=28

需要注意的是,使用hidpi配置的时候,外观要选择默认主题windows,实测此主题对hidpi兼容最好。

2. 线程组

就是我们通常使用的线程。通俗的讲,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。

线程组的常用设置:

  1. 取样器错误后要执行的动作:
    • 继续:忽略错误,继续执行
    • Start Next Thread Loop: 忽略错误,线程当前循环终止,执行下一个循环。
    • 停止线程:当前线程停止执行,不影响其他线程正常执行。
    • 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
    • Stop test now:整个测试会立即停止执行,当前正在执行的取样器可能会被中断。
  2. 设置线程数:
    • 线程数也就是并发数,每个线程将会完全独立的运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。
  3. 设置ramp-up period
    • ramp-up period用于设置启动所有线程所需要的时间。如果选择了10个线程,并且ramp-up period是100秒,那么JMeter将使用100秒使10个线程启动并运行。每个线程将在前一个线程启动后10(100/10)秒后启动。
    • 当这个值设置的很小、线程数又设置的很大时,在刚开始执行时会对测试客户机产生很大的负荷。
  4. 设置循环次数:
    • 该项设置线程组在结束前每个线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次。
    • 如果勾选永远,那么每个线程会无限循环整个测试计划,直到手动停止。(并非只有手动停止一种停止方式,定时器也可以控制停止)
  5. Delay Thread creation until needed:
    • 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。

3. HTTP取样器

4. 定时器(以jp@gc - Throughput Shaping Timer为例)

Throughput Shaping Timer 是用来控制吞吐量的定时器,通过延缓线程运行来整体控制取样器产生的RPS。

实际使用中:

  1. 可以通过设置在不同吞吐量分别持续一段时间,考察系统在不同吞吐量情况下的稳定性

  2. 可以通过设置随着时间持续增加的吞吐量,来探测系统吞吐量的的极限

举例:

https://www.cnblogs.com/ryan255/p/14406789.html

5. 常用监听器的使用

  1. jp@gc - Transactions per Second
  2. jp@gc - Response Times Over Time
  3. 聚合报告&汇总报告

https://www.cnblogs.com/ryan255/p/14406840.html

6. 数据准备(以CSV data set config为例)

使用CSV data set config配置元件准备大量的测试数据

CSV 数据文件设置:

  1. 指定数据文件

  2. 设置文件编码

  3. 设置变量名称(后续在脚本其他位置引用)

  4. 是否忽略首行

  5. 分隔符(决定了数据如何分割)

  6. 是否允许带引号

  7. 遇到文件结束符再次循环

  8. 遇到文件结束符停止线程

  9. 线程共享模式:

    • 全部线程

      是指在CSV Data Set Config配置元件作用域范围内的所有线程共享一个数据源文件,也就是说在JMeter测试执行过程中,JMeter仅打开一次该数据源文件,每个线程读取的是同一个数据源文件中的数据.线程按照启动的先后顺序依次从数据源文件中获取一个值,不论该线程是否引用CSV Data Set Config中定义的变量,每个线程都会分配一个值,这样可以保证每个线程获取的是数据源文件中不同行的列值(在不循环取值的情况下).

    • 当前线程组

      是指在CSV Data Set Config配置元件作用域范围内的所有线程组,当JMeter执行测试时,每一个线程组都单独打开一次数据源文件(可以是相同或不同的数据源文件).每个线程组下的各个线程都是从数据源文件的起始处读取参数值.

      若要线程组读取不同的数据源文件,可以对数据源文件的路径进行参数化.
      这里需要使用${threadGroupName}来获取线程组的名字.
      假设有n个线程组:tg1,tg2,...,tgn
      每个线程组对应一个数据源文件,对应的文件名分别为: tg1.csv,tg2.csv,...,tgn.csv
      在配置时将"Filename"设置为".../${threadGroupName}.csv"即可.

    • 当前线程

      在CSV Data Set Config配置元件作用域范围内的所有线程组,当JMeter执行测试时,每一个线程
      都单独打开一次数据源文件(可以是相同或不同的数据源文件).
      每个线程都是从数据源文件的起始处读取参数值.

      若要线程组读取不同的数据源文件,可以对数据源文件的路径进行参数化.
      这里需要使用${threadNum}来获取线程编号.
      假设有n个线程,线程编号为:1,2,...,n
      每个线程对应一个数据源文件,对应的文件名分别为:
      testdata1.csv,testdata2.csv,...,testdatan.csv
      在配置时将"Filename"设置为".../testdata${threadNum}.csv"即可.

7. 断言(以json断言为例)

...待施工

posted @ 2021-02-22 16:33  ryan255  阅读(189)  评论(0编辑  收藏  举报