JMeter使用学习记录

一、安装

1.下载JMeter

https://jmeter.apache.org/download_jmeter.cgi
下载安装文件到本地

2.安装JDK

https://www.oracle.com/java/technologies/downloads/

3.切换中文

  • 进入bin文件夹
  • 打开jmeter.properties
  • #language=en下增加 #language=zh_CN

二、使用

1.进入安装文件夹 -> bin文件夹

2.点击jmeter.bat(windows)

三、脚本录制

1.打开JMeter图形界面

2.新建线程组

  • 选中Test Plan,Add -> Threads(线程) -> Thread Group(线程组)

3.新增HTTP代理服务器

  • 选中Test Plan,Add -> Non-Test Elements(非测试元件) -> HTTP(s) Test Script Recorder(HTTP代理服务器)
  • 点击【HTTP(s) Test Script Recorder】,查看端口号

4. 新增录制控制器

  • 选中Thread Group(线程组),Add -> Logic Controller(逻辑控制器) -> Recording Controller(录制控制器)

5.安装证书

  • 进入bin文件夹
  • 双击【ApacheJMeterTemporaryRootCA.crt】
  • 根据安装引导,把证书存储到【受信任的根证书颁发机构】下

6.浏览器添加代理

  • chrome浏览器安装SwitchyOmega插件,用于管理代理
  • SwitchyOmega插件设置:
    1. 新建情景模式,勾选代理服务器
    2. 代理服务器填入127.0.0.1,端口号为8888(代理服务器端口号)

7.启动代理服务器

  • 点击【HTTP(s) Test Script Recorder】下的【start】

8.查看录制的请求

  • 请求在Recording Controller(录制控制器)下

9.请求筛选

  • 进入HTTP代理服务器
  • Requests Filtering
  • 包含模式添加想选取的域名等(使用正则表达式)
    1. URL Pattern to Include(包含模式)
    2. Add
    3. .*baidu.com
  • 排除模式添加想过滤的域名等(使用正则表达式)
    1. URL Pattern to Exclude(排除模式)
    2. Add
    3. .*\.(js|css|woff|jpg).*

10. 停止录制

11.添加 察看结果树,查看请求的返回内容

  • 选中线程组,Add -> Listener(监听器) -> View Results tree(察看结果树)

12.屏蔽部分录制的部分请求

  • 选中要屏蔽的请求后,点击 工具栏的【Toggle(切换)】

13.再次运行录制的请求

  • 进入 察看结果树
  • 点击 工具栏的【Start(开始)】
  • 在 察看结果树 可以看到返回内容

四、压力测试

1.新增线程组

  • 选中Tset Plan,Add -> 线程 -> 线程组

2.新增HTTP请求

  • 选中线程组,Add -> Sampler(取样器) -> HTTP Request(HTTP请求)

3.填写web服务器信息

  • 进入 HTTP请求 页面
  • 填写web服务器的 【协议】 【服务器名称】 【路径】等

4.添加 察看结果树

  • 选中线程组,Add -> 监听器 -> 察看结果树

5.查看返回结果

  • 点击【开始】,在 察看结果树 查看返回结果

6.跑多个线程

  • 进入 线程组
  • 修改 线程数
  • 修改循环次数
  • 循环执行
    • 勾选Infinite(永远)
    • 设置循环时长
      1. 勾选 Specify Thread lifetime(调度器)
      2. Duration(seconds)(持续时间) 设置时长

7.添加聚合报告

  • 选中 线程组,Add -> Listener(监听器) -> Aggregate Report(聚合报告)

8.聚合报告数据

  • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
  • Samples(样本):表示这次测试中一共发出了多少个请求
  • Average(平均值):平均响应时间——默认情况下是单个 Request 的平均响应时间(单位ms),当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间(应该为单个线程时间)
  • Median:中位数,也就是 50% 用户的响应时间
  • 90% Line:90% 用户的响应时间l
  • Min:最小响应时间
  • Max:最大响应时间
  • Error%(异常):本次测试中出现错误的请求的数量/请求的总数
  • Throughput(吞吐量):默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  • 接收KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

9.TPS计算公式

TPS即服务器每秒处理的事务数
(1/Average)*1000*线程数

10.teardown线程组

  • 选中测试计划,Add -> Threads -> tearDown Thread Group
  • 最后执行的线程组

11.setUP线程组

  • 选中测试计划,Add -> Threads -> setUp Thread Group
  • 最新执行的线程组

五、分布式压力测试

1.Slave节点

  • 关闭服务器的SSL(因为测试在局域网内,不需要ssl)

    1. 在服务器A打开apache-jmeter-5.4.3\bin下的jmeter.properties
    2. 修改 server.rmi.ssl.disable=true
  • 修改hostname为本机地址(如果有多个网卡,不指定hostname会报错)

    1. 在服务器A打开apache-jmeter-5.4.3\bin下的system.properties
    2. java.rmi.server.hostname=192.168.2.1
  • 运行jmeter-server

2.Master节点

  • 端口 udp 4445
  • 添加负载机IP
    1. 打开jmeter.properties
    2. remote_hosts=192.168.2.1,192.168.2.2 ( Slave节点的ip地址)
  • 关闭SSL
    1. 打开jmeter.properties
    2. server.rmi.ssl.disable=true
  • 运行jmeter
  • 设置test plan 线程组
  • 点击【运行】-【远程启动所有】

六、性能测试指标

1.每秒请求数 QPS

2.请求响应时间(最大、最小、平均)

3.错误率

4.机器性能 CPU idle 30%、内存memory无剧烈抖动或飙升

5.压测过程接口功能是否正常

6.压测过程

   - 环境检查:记录机器参数
   - 起压:根据被压情况,调节并发量到合适的情况
   - 查看记录各项性能指标
     1. nginx日志查看每秒请求数
     2. 查看nginx错误请求
     3. 查看机器参数: cpu idle、men等
     4. 查看db、cache等数据是否写入正常
     5. 访问接口,查看功能是否正常

七、实战

1.访问接口

2.使用前置处理器动态生成参数

  • 1.选中线程组
  • 2.add -> Pre Processors-> JSR223 PreProcessor
  • 3.添加脚本
import java.util.Random;

String phone_pre = '171';

Random random = new Random();

int rand01 = random.nextInt(10);
int rand02 = random.nextInt(10);

String timestamp = System.currentTimeMillis().toString();

String phone_end = rand01.toString() + timestamp.substring(7) + rand02.toString();

vars.put('phone_num',phone_pre+phone_end);

3.创建HTTP Request Defaults,统一设置ip地址

- 选中线程组
- ADD -> config Element(配置元件) -> HTTP Request Defaults(HTTP请求默认值)
- 填入协议、ip地址等

4.设置CSV Data Set Config,数据驱动

- 创建

5.访问第二个接口

6.从上一个接口获取参数传递给第二个接口(验证码)

- 选择第一个接口的HTTP Requeest Defaults
- ADD -> POST Processors(后置处理器) -> JSON Extractor(JSON提取器)
- Names of created variables 输入 auth_code
- JSON Path expressions 输入 .data

7.创建全局的用户变量(批量生成用户名)

- 点击进入 test plan 测试计划
- 在【用户定义的变量】ADD增加参数 user_prefix  ,值设置为input_name 

8.使用counter的方式去变量赋值

- 选中线程组
- ADD -> config element -> Counter
- 设置区间
- 【Exported Variable Name】 设置为user_id

9.第二个接口创建参数

- 参数名 username
- 值 ${user_prefix}${user_id}

10.对接口返回值进行验证

- 选中HTTP Request
- ADD -> Assertion -> JSON Assertion
- Assert JSON Path exists 输入 $.code
- Expected Value 输入200
- 勾选 Additionally assert value

11.解析token

  • ADD -> POST Processors -> JSON Extractor
  • Names of created variables 输入 【token】
  • JSON Path expressions 输入 【.data.token】

八、使用HTTP Cookie管理器

1.增加Cookie管理器

2.添加Debug Sampler调试

3.修改jmeter.properties的CookieManager.save.cookies为true,之后重启jmeter

4.添加察看结果数

5. 添加http请求1

6. 添加http请求2

7. 运行请求,可以看到http请求2自动带cookie(http请求1获得的cookie)

posted @ 2023-06-28 18:47  丛影HHZ  阅读(68)  评论(0编辑  收藏  举报