jmeter

# jmeter day_3

### 1.jmeter函数

#### 1.1跨线程组关联

- 1.提升线程组中变量的作用域
  - 局部变量--->全局变量
  - 1.setProperty提升线程组中变量的作用域
    - 属性名称: 变量提升作用域后的新名字
    - value: 提取器中的值
  - 2.将setProperty函数复制到--->Bean Shell取样器中
- 2.接收提升作用域后变量
  - 1.property
    - 属性名称: 新变量名
  - 2.将property函数复制到其他线程组中使用

### 2.集合点(并发)

- 组件: 同步定时器 Synchronizing Timer
- 位置: 定时器
- 1.当超时时间为0时:
  - 0.并发数量必须满足模拟用户组数量,才发起并发
  - 1.线程数≥模拟用户组的数量
  - 2.线程数能够整除模拟用户组的数量
  - 3.真正的并发数量==模拟用户组的数量
- 2.当超时时间不为0时:
  - 0.到时间就发起并发,不在乎并发数量是否达到预计要求
  - 1.超时时间≥线程组启动时间

### 3.jmeter分布式(重点)

- 1.编写性能测试脚本
- 2.执行机(slaver)
  - 修改jmeter配置文件 jmeter.properties--->bin
  - 1.修改remote_hosts = ip:1099  --->260行
    - server.rmi.ssl.disable=true    --->336行
  - 2.禁用不用网卡
  - 3.关闭防火墙
  - 4.保存配置文件,启动jmeter-server.bat
- 3.控制机(master)
  - 修改jmeter配置文件 jmeter.properties--->bin
  - 1.修改remote_hosts = ip:1099  --->260行,执行机的IP:1099,多个使用逗号分隔
    - server.rmi.ssl.disable=true    --->336行
  - 2.禁用不用网卡
  - 3.关闭防火墙
  - 4.保存配置文件,启动jmeter-server.bat
- 4.注意事项:
  - 1.执行脚本,控制机和执行机放在同一路径下
  - 2.执行之前,控制机和执行机互ping IP
  - 3.控制机和执行机jmeter版本一致

### 4.逻辑控制器

- 逻辑控制器特点
  - ==只能在线程组中添加==
- 安装插件--- Dummy Sampler
  - DummySampler  模拟取样器

#### 4.1 如果(If)控制器

- 位置:  逻辑控制器--->如果(if)控制器

- 配置if控制器

  - 借助函数 \_\_jexl3或\_\_groovy函数,将条件表达式结果先做一次运算
  - ${\_\_groovy(表达式,)}
  - 当表达式结果为true,执行控制器内的取样器,反之则不执行

- 注意事项:

  - 字符串比较加引号,包括对变量引用都需要引号
  - java中布尔值true,false都是小写

- 应用场景--->浏览商品  假设用户男女比例 2:3   ==用户分流==  1000

  - 化妆品
  - 电子产品

  取余  模  1%5   0  1  2  3  4

- 使用评估if控制器下所有的取样器执行情况判断是否执行

  - 1.勾选 Evaluate for all children
  - 2.点击 Use status of last sample
  - 通过判断上一个取样器的执行结果来决定是否执行下一个取样器

#### 4.2循环控制器

- 位置: 逻辑控制器
- 作用: 重复执行取样器
  - 作用于,控制器内取样器
- 使用场景: 流量叠加

==循环控制器和if控制器可以嵌套使用==

#### 4.3 ForEach控制器

- 位置: 逻辑控制器
- 作用: 遍历
- 使用方式:
  - 1.和用户定义的变量配合使用
  - 2.在用户定义变量中添加数据
    - 变量名: 变量名前缀_数字  数字连续的
  - 2.配置Foreach控制器
    - 1.输入变量名前缀: 用户定义变量中的变量名前缀
    - 2.开始循环字段(不包含):数字
    - 3.结束循环字段(包含):数字
    - 4.输出变量名: 新变量名称

### 5.jmeter元件执行顺序

- 1.常用元件执行顺序

  - 配置元件   ---1
  - 前置处理器    ---- 2
  - 定时器  -----3
  - 取样器  -----4
  - 后置处理器  ---5
  - 断言  --- 6
  - 监听器 --- 7

  ==当测试计划中有多个同级且相同的元件时,执行顺序按照位置先后顺序执行==

  - 逻辑控制器

- 2.元件作用范围

  - 监听器,配置元件,前/后置处理器,断言,定时器: 作用范围父级和兄弟级
  - 逻辑控制器: 只适用于子级

### 6.jmeter命令行模式

jmeter -n -t jmeter脚本路径 -l 结果文件夹\结果文件名.jtl -e -o 测试报告文件夹

### 7.jmeter常用插件


# jmeter day_3

### 1.jmeter函数

#### 1.1跨线程组关联

- 1.提升线程组中变量的作用域
  - 局部变量--->全局变量
  - 1.setProperty提升线程组中变量的作用域
    - 属性名称: 变量提升作用域后的新名字
    - value: 提取器中的值
  - 2.将setProperty函数复制到--->Bean Shell取样器中
- 2.接收提升作用域后变量
  - 1.property
    - 属性名称: 新变量名
  - 2.将property函数复制到其他线程组中使用

### 2.集合点(并发)

- 组件: 同步定时器 Synchronizing Timer
- 位置: 定时器
- 1.当超时时间为0时:
  - 0.并发数量必须满足模拟用户组数量,才发起并发
  - 1.线程数≥模拟用户组的数量
  - 2.线程数能够整除模拟用户组的数量
  - 3.真正的并发数量==模拟用户组的数量
- 2.当超时时间不为0时:
  - 0.到时间就发起并发,不在乎并发数量是否达到预计要求
  - 1.超时时间≥线程组启动时间

### 3.jmeter分布式(重点)

- 1.编写性能测试脚本
- 2.执行机(slaver)
  - 修改jmeter配置文件 jmeter.properties--->bin
  - 1.修改remote_hosts = ip:1099  --->260行
    - server.rmi.ssl.disable=true    --->336行
  - 2.禁用不用网卡
  - 3.关闭防火墙
  - 4.保存配置文件,启动jmeter-server.bat
- 3.控制机(master)
  - 修改jmeter配置文件 jmeter.properties--->bin
  - 1.修改remote_hosts = ip:1099  --->260行,执行机的IP:1099,多个使用逗号分隔
    - server.rmi.ssl.disable=true    --->336行
  - 2.禁用不用网卡
  - 3.关闭防火墙
  - 4.保存配置文件,启动jmeter-server.bat
- 4.注意事项:
  - 1.执行脚本,控制机和执行机放在同一路径下
  - 2.执行之前,控制机和执行机互ping IP
  - 3.控制机和执行机jmeter版本一致

### 4.逻辑控制器

- 逻辑控制器特点
  - ==只能在线程组中添加==
- 安装插件--- Dummy Sampler
  - DummySampler  模拟取样器

#### 4.1 如果(If)控制器

- 位置:  逻辑控制器--->如果(if)控制器

- 配置if控制器

  - 借助函数 \_\_jexl3或\_\_groovy函数,将条件表达式结果先做一次运算
  - ${\_\_groovy(表达式,)}
  - 当表达式结果为true,执行控制器内的取样器,反之则不执行

- 注意事项:

  - 字符串比较加引号,包括对变量引用都需要引号
  - java中布尔值true,false都是小写

- 应用场景--->浏览商品  假设用户男女比例 2:3   ==用户分流==  1000

  - 化妆品
  - 电子产品

  取余  模  1%5   0  1  2  3  4

- 使用评估if控制器下所有的取样器执行情况判断是否执行

  - 1.勾选 Evaluate for all children
  - 2.点击 Use status of last sample
  - 通过判断上一个取样器的执行结果来决定是否执行下一个取样器

#### 4.2循环控制器

- 位置: 逻辑控制器
- 作用: 重复执行取样器
  - 作用于,控制器内取样器
- 使用场景: 流量叠加

==循环控制器和if控制器可以嵌套使用==

#### 4.3 ForEach控制器

- 位置: 逻辑控制器
- 作用: 遍历
- 使用方式:
  - 1.和用户定义的变量配合使用
  - 2.在用户定义变量中添加数据
    - 变量名: 变量名前缀_数字  数字连续的
  - 2.配置Foreach控制器
    - 1.输入变量名前缀: 用户定义变量中的变量名前缀
    - 2.开始循环字段(不包含):数字
    - 3.结束循环字段(包含):数字
    - 4.输出变量名: 新变量名称

### 5.jmeter元件执行顺序

- 1.常用元件执行顺序

  - 配置元件   ---1
  - 前置处理器    ---- 2
  - 定时器  -----3
  - 取样器  -----4
  - 后置处理器  ---5
  - 断言  --- 6
  - 监听器 --- 7

  ==当测试计划中有多个同级且相同的元件时,执行顺序按照位置先后顺序执行==

  - 逻辑控制器

- 2.元件作用范围

  - 监听器,配置元件,前/后置处理器,断言,定时器: 作用范围父级和兄弟级
  - 逻辑控制器: 只适用于子级

### 6.jmeter命令行模式

jmeter -n -t jmeter脚本路径 -l 结果文件夹\结果文件名.jtl -e -o 测试报告文件夹

==使用命令行模式执行之前: 保证存放执行结果的文件夹和存放测试报告的文件夹为空==

### 7.jmeter常用插件

#### 7.1并发线程组

![并发线程组](D:\0812软件测试精英班\17_性能测试\20201124性能测试day_5\doc\并发线程组.png)

1.已知并发数量进行性能测试

2.已知吞吐量(TPS)进行性能测试

- 1.通过设置吞吐量,得到实际的响应时间
- 2.算出并发数

常识:

- 单个接口响应时间  200ms
- 性能测试增加负载曲线角度,加压过程45角,降压最好不超过60°

#### 7.2 终极线程组

1.浪涌

- Delay时间 = 上一组持续时间+上一组释放时间+上一组等待时间

2.持续加压

- 定制加压策略:
  - 根据项目实际使用情况----线上数据收集整理统计
    - 线性增长
    - 指数增长
  - 持续时间
- 持续加压每组数据Delay时间+持续时间都是相同的
  - Delay递增
  - 持续时间递减

#### 7.3.jmeter监控服务器

- 1.使用插件  Server-Agent
- 2.==插件在服务器上启动==
- 3.设置监控项
  - CPU
  - 内存
  - 网络
  - 磁盘
- 4.添加组件  监听器--->PerfMon Metrics Collector
  - Host/IP   --->服务器域名/IP
  - Port   ---->Server-Agent启动占用的端口号 4444
  - Metrics ---->监控具体硬件
  - Metrics Parameter ---->对应硬件中的具体--->进程

## jmeter性能测试实践

性能测试流程

### 1.确定性能测试需求

- 客户/BOSS

- 线上数据---最近3个月  对项目中重点功能或者关心的功能埋点

- 确定测试模块(场景/业务)

  - 使用频繁
  - 不能出错功能
  - 占用资源较大

- 举例  电商项目                                ==每天交易量为 40万笔==

  - 首页                                        1           40%   2960                       
  - 登录------一般单独测试
  - 搜索商品/商品详情                2           56%   4144
  - 购物车                                     3           3.5%   259
  - 订单                                         4           0.5%    37
    - 确认订单
    - 生成订单
    - 支付回调
    - 订单状态迁移
  - 快递物流查询                       重复查询

  计算并数量

  28原则: 交易量80%是在每天20%时间完成的

  32万笔   4.8小时----->18.5笔/秒---->TPS---->并发数=TPS×响应时间(2s)--->37个

平均并发=(单笔业务时间*业务总量)/业务时间

(2*400000*0.8)/24*0.2*3600=37

### 2.确定性能测试指标

并发数量:

响应时间: 2s

吞吐量: 

CPU <75%

内存  <75%

### 3.编写jmeter性能测试脚本

#### 3.1首页--->分析各个接口请求频率

#### 3.2登录

- 1.登录单独做性能测试
  - 针对不同模块做性能测试时,侧重点不同
  - 体量较大的项目,登录是单独系统
  
  
import java.io.FileWriter;
import java.io.BufferedWriter; 

FileWriter fstream = new FileWriter("E:/code/user_token.csv",true);
BufferedWriter out = new BufferedWriter(fstream);
//out.write(vars.get("session")+"\n");
out.write("${tokenHead} "+"${token}\r\n");
out.flush();//把缓存区内容压入文件
out.close();//关闭文件
fstream.close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值