首页 > 其他分享 >JMeter使用学习记录

JMeter使用学习记录

时间:2023-06-28 18:56:24浏览次数:53  
标签:jmeter HTTP 请求 记录 学习 Add 线程 选中 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计算公式

(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)

标签:jmeter,HTTP,请求,记录,学习,Add,线程,选中,JMeter
From: https://www.cnblogs.com/congyinew/p/16366280.html

相关文章

  • JavaScript学习 -- 内置函数(Math和Date)
    一、Date函数letdate=newDate()console.log("当前日期和时间:"+date)console.log("当前日期和时间:"+date.toLocaleString())console.log("年份:"+date.getFullYear())console.log("月份:"+(parseInt(date.getMonth())+1))console.log("日:"......
  • dsu on tree 学习笔记
    dsuontree学习笔记引入dsu是并查集的缩写,然鹅本算法和并查集没啥关系。当然,dsuontree也有中文名字:树上启发式合并。也就是说,这个算法是用于处理一些树上信息的合并的。dsuontree和莫队一样,都是优雅的暴力。优雅是因为思想很优雅,暴力是因为所有修改都是暴力做的——没......
  • 二维数组的学习
    二维数组的拷贝这里介绍两种拷贝的方式:1.一种是通过指针的方式进行拷贝,另外一种是通过一维数组的方式进行拷贝。2.copy_arr函数实现的是指针方式的拷贝,copy_arr1实现的是一维数组方式的拷贝。两种拷贝的运行结果一样```////2023/6/28.//#include<stdio.h>#defineROW......
  • linux安装jdk、nginx记录
    jdk1、解压tarxzvf压缩包名位置(/usr/local/jdk)2、配置环境变量vi/etc/profile键盘i开启编辑,在最后键入:JAVA_HOME=/usr/local/jdkJRE_HOME=/usr/local/jdk/jreCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/libPATH=$PATH:$JAVA_HOME/bin:$JR......
  • jmeter中http请求常用的content-type
    Content-Type: application/json   --json格式Content-Type: application/x-www-form-urlencoded--表单格式 当使用表单格式时,需要注意勾选URLEncode和IncludeEquals ......
  • Azure学习
    https://learn.microsoft.com/zh-cn/azure/?product=popular AzureSamples(github.com)......
  • CUDA学习详细教程之指针篇
    近期,我在写深度学习相关的C++部署时候,往往想更好的提速,将更多类似矩阵相关的运算交给CUDA处理,以此提高推理速度。然,cuda编程入门较为复杂,想简单对图像预处理,通过指针指向减少host到device时间,或模型预测后device上处理完后,数据在device到host输出结果等,这些将会涉及很多知识。......
  • C++学习---qt的公有类、私有类、Q_Q、Q_D、二进制兼容
    1、二进制兼容如果程序从一个以前版本的库动态链接到新版本的库之后,能够继续正常运行,而不需要重新编译,那么我们就说这个库是二进制兼容的。如果不能保证库的二进制兼容性,就意味着每次发布库的新版本时,依赖该库的所有程序都必须重新编译才能正常运行。2、公有类、私有类是解决......
  • Linux下常用scp,tail,grep命令详解[记录]
    scp命令用于在本地主机和远程主机之间复制文件或目录,支持加密传输。它可以通过ssh协议来进行数据传输,因此传输过程是安全的。注意:在使用scp命令时,如果出现权限验证失败的情况,可能需要检查本地主机和远程主机之间的ssh配置是否正确。scp[参数][原路径][目标路径][参......
  • 机器学习算法系列——博客中相关机器学习算法的目录
    前言  这部分不是要介绍哪个具体的机器学习算法,前面做了一些机器学习的算法,本人在学习的过程中也去看别人写的材料,但是很多作者写的太难懂,或者就是放了太多的公式,所以我就想我来写点这方面的材料可以给大家参照,当然,由于本人才疏学浅,在写博客或者在写程序的过程中有什么不合理或......