逻辑控制器
线程组-批量删除话题.jmx
上面脚本可以删除 用户发布的最新的话题。
使用逻辑控制器,可以让这些请求执行多次。
循环控制器
- 添加循环控制器。 线程组上—【右键】—【添加】—【逻辑控制器】—【循环控制器】
将请求放在循环控制器中, 可以控制请求的执行次数
线程组-批量删除话题-控制器.jmx
练习
使用自己的服务器,创建100个测试账号
testuser.csv
性能场景
服务器配置:
1核 CPU
2GB 内存
50GB 磁盘空间
1MB 宽带
- 100用户同时在网站上进行注册
- 要求服务器的cpu使用率不超过50%,内存不超过80%
- 创建线程组,添加注册的请求
- 因为要做100个并发,准备测试数据
- 在脚本添加csv文件配置
引用变量
- 设置线程组
线程数:200 表示200并发
Ramp-up : 200个线程启动的时间。1 表示1秒之内启动200个线程。
循环次数: 线程组中创建的所有请求执行多少次,如果要一直不间断的去压服务器,设置为【永远】。
调度器:可以配置http请求执行的时间
持续时间: 持续运行多长时间。
启动延迟: 等多少时间后运行。
线程组—用户注册场景-添加csv配置.jmx
运行
监控服务器 使用top 命令
查看聚合报告
查看服务器的日志
tail -f /root/nodeclub/logs/cheese.log
app端的性能压测
app端通过调用接口来访问服务器的资源。下面模拟app端的压测
- 测试场景:
- 100个用户在手机app 发布话题,平均每个用户发布3个话题
- 压测时间为5分钟
根据以上场景设置
循环次数设置为永远,时间为300秒
添加对应的http请求,并设置对应变量
面试常问到的问题: 你的100个token值从哪里的?
- 从数据库中
- 从数据库中导出,保存csv文件中。
mongodb 数据库 基本操作
// 查看数据库
show databases;
// 使用数据库
use node_club_dev
// 查看数据库中所有的表
show tables;
// 查询所有的users 表中数据
db.users.find();
// 查询users 表中 "loginname"为"testuser1074"的信息
db.users.find({"loginname" : "testuser1074"})
// 将查询结果美化
db.users.find({"loginname" : "testuser1074"}).pretty()
更多: https://www.runoob.com/mongodb/mongodb-query.html
重点命令 mongodb 数据导出
mongoexport -d node_club_dev -c users -o /tmp/testuser.csv --type csv -f "accessToken"
- -d 导出的数据库名
- -c 表名
- -o 数据导出之后保存的文件路径
- — type 文件类型, 支持json / csv 类型
- -f 导出的字段 “accessToken” 表示导出accessToken 字段, 如果要导出多个字段 “accessToken,loginname”
文件导出之后,下载本地。
sz /tmp/testuser.csv
创建csv文件配置
如果csv中数据为5条
线程组中设置20个并发 (数据不够分配)
遇到文件结束符再次循环:
设置为True: 第6个线程会从csv文件中从头再去取数据。
设置为False: 不再取数据
遇到文件结束符停止线程:
设置为True: 如果没有数据就不再运行
设置为False: 继续运行。
在做性能测试的时候,需要注意: 如果要压测200个并发,往往在准备数据的数据会准备300条或者更多,要保证数据比压测用户多。
在配置csv文件数据驱动的时候,遇到文件结束符再次循环, 遇到文件结束符停止线程, 使用默认值。 我们要做的是, 多准备一些测试数据即可。
总结
做性能测试基本流程
- 设计测试脚本,主要使用 上下游传参,添加断言,json提取器等。
- 设置csv数据(准备测试数据)从数据库导出
- 设置线程组中线程数
- 添加聚合报告
- 运行过程中查看服务器的状态和追踪对应的日志。
测试完成之后,如果性能有缺陷,交给开发优化即可。
练习
- 从数据库中导出所有数据, 包含 用户名对应的token( loginname, accessToken)
- 创建线程组,创建请求
- 用户发布话题 post /topics 新建主题 发帖的title内容为 ${loginname} 正在发帖
- 用户修改话题 修改帖字的title内容为 ${loginname} 正在修改帖子
- 查看话题详情 查看话题 — 添加断言 状态码200
- 并发50,压测10分钟
- 观察服务器的状态
完成
LInuxshuju.xlsx
nmon analyser v66.xlsm
testusers.csv
服务器压测.jmx
JDBC Mysql 连接
配置mysql连接文件
下载 jar 文件
打开JMeter的安装位置。将jar 文件复制到安装目录的 lib 目录下
创建配置
在【线程组】-【右键】—【添加配置元件】—【jdbc connection configuration】
添加 mysql的连接信息
Mysql 数据库连接:
外网地址: rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com
外网端口: 3306 (默认端口)
用户名: fanmao55
密码: ABCfanmao55
数据库: taofei55
databaseurl: jdbc:mysql://rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com:3306/taofei55
jdbc driver class:
创建jdbc请求
编写sql语句
数据库查询结果作为变量来使用
编写 sql 语句
select username,age from students;
发布话题,将sql中返回的结果作为 参数。
在 Variable name中设置变量。
添加 调试取样器
foreach 控制器
设置变量名
{
"accesstoken":"1bfffaa4-7840-43cf-b1aa-5802abb4d28b",
"title":"${username}今年${age}",
"tab":"ask",
"content":"xxxxxyyyyyyyyyx"
}