你笑了

你的笑,是星星跳跃浪花的笑

0%

JMeter 测试用例

编写测试用例

  • 通过 GUI 编写测试用例 jmx文件,通过 CLI 执行
    jmx: 用 xml 格式保存的 JMeter 项目

  • 每个组件有其作用域

    例如 view result tree,在HTTP请求下则只显示当前请求的结果,在线程组下则显示当前线程组内所有请求的结果

  • 操作后记得点击保存

0. 添加测试计划

描述了JMeter执行的一系列步骤,包括一个或多个线程组、逻辑控制器、取样器、监听器、断言等

配置

  • 独立运行每个线程组

    控制线程组的执行顺序

  • 添加用户定义的变量

    添加一些全局的变量,例如服务器的ip和port

    可在测试计划中直接添加

    也可单独添加

1. 添加线程组

线程组是测试的基本单位,定义并发数、持续时间等。

一个线程模拟一个用户,线程组表示用户组

测试计划中添加

线程属性

  • 线程数

    虚拟用户数,默认为1,表示访问被测系统的用户数

  • Ramp-Up时间

    设置线程需要多长时间全部启动

    100个线程在10s内启动,1s启动10个

  • 循环次数

    默认为1,表示一个线程完成一次请求后停止运行。如果选择永远则表示不停的循环调用

2. 添加取样器

取样器 是 JMeter 的核心组件,模拟了用户执行的操作,包括 HTTP 请求、TCP 请求、FTP 请求、JDBC 请求等

填写接口信息

保存 jmx

3. 添加HTTP信息头管理器

点击添加按钮,输入请求头名称和值,点击保存,再点击运行

4. 添加断言

用于验证服务器的响应是否符合预期。

常见的断言类型包括响应断言 和 JSON 断言:

  • 响应断言包括:文本、响应代码、响应头、响应时间等。
  • JSON 断言允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式。

响应断言

响应码断言

响应文本断言

JSON断言

验证 JSON 格式响应的一种断言方式。允许用户指定 JSON 路径表达式并验证 JSON 响应是否符合该表达式

  • 正则表达式没有前后的/
  • 添加到某个请求下面,针对该请求的响应

5. 添加监听器

用于收集测试结果并生成报

查看结果树

线程组或HTTP请求下添加

线程组下,监听线程组中所有请求的数据

HTTP请求下,监听当前请求的数据

查看请求响应数据

聚合报告

线程组或HTTP请求下添加

提供有关事务、响应时间、吞吐量和错误率的信息

  • 样本

    请求次数

  • 平均值【重点】

    可理解为RT-response time 响应时间

    平均响应时间,单位毫秒

  • 中位数

    响应时间的中位数,单位毫秒

  • 90%百分位

    90%的请求的响应时间小于该数值,单位是毫秒

  • 吞吐量【重点】

    throughput 即 RPS

    每秒请求个数

6. 运行测试计划,查看测试报告

场景

提取token给其他线程组用

通过A线程组中的登录接口获取token,给B线程组中的请求使用

1. 添加 JSON 提取器

登录请求作用域下

根据响应的结构添加 JSON Path

  • Names of created variables

    保存提取 token 的变量

  • JSON Path expressions

    JSON提取表达式

  • Math No.

    如果有多个匹配值,用哪个

2. 添加 BeanShell 后置处理程序

登录请求作用域下

多个token需要将其保存到CSV文件中传递

  • Parameters

    JMeter 将该值传递给 BeanShell 的 Parameters 变量或 bsh.args 数组。即将 JMeter 的 mytoken 变量的值(保存的token)传递给 BeanShell 的 Parameters 变量或 bsh.args 数组,这样就可以在 BeanShell 的脚本中获取到 token 了

    注意区分 JMeter 变量和 BeanShell 变量的区别

  • Script

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try {
    FileWriter fstream = new FileWriter("/home/lfp/JMeter/token.csv", true); // true 表示追加模式写入
    BufferedWriter out = new BufferedWriter(fstream);
    // 这里日志拼接要用`+`号
    // 其他引用变量的方法:
    // log.info("111==>"+vars.get("mytoken"));
    // log.info("222==>"+bsh.args[0]);
    out.write(Parameters + '\n');
    out.close();
    fstream.close();
    } catch (Exception e) {
    log.error("Error writing to file: ", e);
    }

3. 其他线程组引用

1. 添加 CSV Data Set Config

线程组作用域下

  • Filename

    找到保存 token 的 csv 文件

  • Varaible Names

    保存token的csv没有表头,这里需要添加表头字段来引用

  • Ignore first line

    保存token的csv没有表头,这里选 False

2.添加HTTP信息头管理器

线程组作用域下

通过刚才设置的表头字段引用 token

4.每次执行时清空 token

保存token的脚本用的追加方式,每次执行需要手动清空,可以在测试计划的最开始添加一个初始化线程组

  • 测试计划需要勾选独立运行每个线程组

  • Script

    1
    2
    3
    4
    5
    6
    7
    8
    9
    try {
    FileWriter fstream = new FileWriter("/home/lfp/JMeter/token.csv", false);
    BufferedWriter out = new BufferedWriter(fstream);
    out.write(""); // 写入空字符串,即清空文件
    out.close();
    fstream.close();
    } catch (Exception e) {
    log.error("Error clearing file: ", e);
    }

CLI

https://jmeter.apache.org/usermanual/best-practices.html

启动 jmeter 时输出

1
2
3
4
5
6
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html

通过GUI配置 jmx,通过CLI执行

命令

1
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
  • n

    指定CLI模式

  • t

    指定jmx文件地址

  • l

    指定测试结果文件

  • j

    指定运行日志文件

  • e

    测试结束后生成报告

  • o

    指定报告保存目录

    测试结束后会在该目录下生成html格式的报告,点击index.html 在浏览器打开

1
jmeter -n -t /home/lfp/JMeter/获取设备列表.jmx -l log.jtl -j run.log -e -o /home/lfp/JMeter/report/

参考