Day15_Jemeter的操作元件和管理Cookie
文章目录
1. 定时器
1.1 固定和随机定时器
-
模拟用户的思考时间
- 用户在上网时, 无论发起哪个请求都有思考时间(时间延时)
- 固定定时器: 固定定时器作用域该线程组下所有的请求,所有请求发起时都有1s的时延
- 高斯随机定时器
- 更好的模仿用户的思考时间(因为等待时间的概率是高斯分布, 如下图)
- 设置高斯定时器后的响应结果
1.2 集合点
- 超时设置
2. 监听器
2.1 查看结果树
2.2 用表格查看结果
- 主要关注
请求发起的时间
2.3 汇总报告
2.4 聚合报告
3. 逻辑控制器
3.1 ForEach和循环控制器
- 用于遍历列表, 详见7.6
3.2 事务控制器
3.2.1 关于事务的概念
- 什么是事务: 把多个操作看做一个整体
- 例如: 建行A账户转账500元给工行B账户
- A - 500
- B + 500
- 上述的两步操作必须是一个整体, 同时成功, 同时失败, 受事务控制
- 例如: 建行A账户转账500元给工行B账户
- 事务的特点: ACID
- A(Atomicity) -> 原子性: 是不可分割的最小单位, 表示事务不可分割
- C(Consistency) -> 一致性: 事务发生前和发生后状态(数据)是一致的
- 操作前的总金额(A+B) = 操作后的总金额(A+B)
- I(Isolation) -> 隔离性: 事务和事务之间相互隔离, 互不影响
- 例如:
- A --(转账500)-> B 事务1
- B --(转账100)-> C 事务2
- 例如:
- D(Durability) -> 持久性: 事务一旦提交, 持久化到硬盘上, 不是临时状态
- 数据库的事务
- 自动提交事务, 每执行一条sql, 就是一条事务
- 测试的事务
- 例如: 测试充值接口
- 前置: 先查所有用户, 提取出电话号码
- 测试: 发起充值请求
- 如果充值接口有bug, 异常率为100%
- 例如: 测试充值接口
3.2.2 测试事务-事务控制器
- 新建两个请求
- 通过查看结果, 可以看出两个请求是分隔的, 异常率是50%, 并非一个事务
- 添加事务控制器
- 将两个请求置于事务控制器之下
3.3 仅一次控制器
-
请求只发送一次, 主要用于性能测试, 每个用户的请求是并发执行的
-
使用场景:
- 5个用户进行测试充值的压力测试, 1个用户发起10个请求
- 然充值需先登录, 每个用户都只登录一次即可
-
解决方案:
- 把登录放在仅一次控制器下, 每个用户只登录一次, 其他的操作实现多次
4. 所有数据都放在CSV文件中
4.1 基本步骤
- 新建CSV Data Set Config
- 从csv获取值, 发起请求
- 修改线程数
- 添加json断言
4.2 if控制器
- 通过if控制器实现只执行登录
-
设置if控制器
-
查看结果, 可以看到只执行了登录请求
-
修改if控制器实现其他请求
4.3 jexl3函数
- 用于If条件控制器, 此时需要勾选第一个选项
5. Jemeter管理Cookie
5.1 无Cookie访问
-
无Cookie时发起请求
-
重定向到登录页面
5.2 有Cookie访问
- 登录的请求
- 添加HTTP Cookie管理器
- 通过结果可以看到第二个请求没有重定向到登录页面, 证明请求带了Cookie
6. Jmeter无界面运行
"jmeter.bat" -n -t xxx.jmx -l xx.jtl -e -o path
- jmeter.bat: 可以用绝对路径,或者是相对路径指向可执行文件
- -n: 非界面运行
- -t xxx.jmx: 要执行的脚本(可以是相对路径也可以是绝对路径)
- -l xx.jtl: 执行的结果放在哪个文件中
- -e: 生成测试报告
- -o path: 测试报告放在哪个文件夹下面
“D:\Develop\jmeter\apache-jmeter-5.4.3\bin\jmeter.bat” -n -t 线程组.jmx -l jemeter_result/result.jtl -e -o jemeter_result