逻辑控制器

线程组-批量删除话题.jmx
image.png
上面脚本可以删除 用户发布的最新的话题。

使用逻辑控制器,可以让这些请求执行多次。

循环控制器

  1. 添加循环控制器。 线程组上—【右键】—【添加】—【逻辑控制器】—【循环控制器】

image.png
将请求放在循环控制器中, 可以控制请求的执行次数
image.png
线程组-批量删除话题-控制器.jmx

练习

使用自己的服务器,创建100个测试账号
testuser.csv

性能场景

服务器配置:
1核 CPU
2GB 内存
50GB 磁盘空间
1MB 宽带

  1. 100用户同时在网站上进行注册
  2. 要求服务器的cpu使用率不超过50%,内存不超过80%

  1. 创建线程组,添加注册的请求

image.png
线程组—用户注册场景.jmx

  1. 因为要做100个并发,准备测试数据

testuser.csv

  1. 在脚本添加csv文件配置

image.png
引用变量
image.png

  1. 设置线程组

image.png
线程数:200 表示200并发
Ramp-up : 200个线程启动的时间。1 表示1秒之内启动200个线程。
循环次数: 线程组中创建的所有请求执行多少次,如果要一直不间断的去压服务器,设置为【永远】。
调度器:可以配置http请求执行的时间
持续时间: 持续运行多长时间。
启动延迟: 等多少时间后运行。
线程组—用户注册场景-添加csv配置.jmx


运行
监控服务器 使用top 命令
image.png
查看聚合报告
image.png
查看服务器的日志
tail -f /root/nodeclub/logs/cheese.log
image.png

app端的性能压测

app端通过调用接口来访问服务器的资源。下面模拟app端的压测

  1. 测试场景:
    1. 100个用户在手机app 发布话题,平均每个用户发布3个话题
    2. 压测时间为5分钟

根据以上场景设置
循环次数设置为永远,时间为300秒
image.png
添加对应的http请求,并设置对应变量
image.png

面试常问到的问题: 你的100个token值从哪里的?

  1. 从数据库中
  2. 从数据库中导出,保存csv文件中。

mongodb 数据库 基本操作

  1. // 查看数据库
  2. show databases;
  3. // 使用数据库
  4. use node_club_dev
  5. // 查看数据库中所有的表
  6. show tables;
  7. // 查询所有的users 表中数据
  8. db.users.find();
  9. // 查询users 表中 "loginname""testuser1074"的信息
  10. db.users.find({"loginname" : "testuser1074"})
  11. // 将查询结果美化
  12. db.users.find({"loginname" : "testuser1074"}).pretty()

更多: https://www.runoob.com/mongodb/mongodb-query.html
重点命令 mongodb 数据导出

  1. mongoexport -d node_club_dev -c users -o /tmp/testuser.csv --type csv -f "accessToken"

image.png

  • -d 导出的数据库名
  • -c 表名
  • -o 数据导出之后保存的文件路径
  • — type 文件类型, 支持json / csv 类型
  • -f 导出的字段 “accessToken” 表示导出accessToken 字段, 如果要导出多个字段 “accessToken,loginname”

文件导出之后,下载本地。

  1. sz /tmp/testuser.csv

线程组-手机app测试.jmx

创建csv文件配置

image.png
如果csv中数据为5条
线程组中设置20个并发 (数据不够分配)
遇到文件结束符再次循环:
设置为True: 第6个线程会从csv文件中从头再去取数据。
设置为False: 不再取数据
遇到文件结束符停止线程:
设置为True: 如果没有数据就不再运行
设置为False: 继续运行。

在做性能测试的时候,需要注意: 如果要压测200个并发,往往在准备数据的数据会准备300条或者更多,要保证数据比压测用户多。
在配置csv文件数据驱动的时候,遇到文件结束符再次循环, 遇到文件结束符停止线程, 使用默认值。 我们要做的是, 多准备一些测试数据即可。

线程组-手机app测试.jmx

总结

做性能测试基本流程

  1. 设计测试脚本,主要使用 上下游传参,添加断言,json提取器等。
  2. 设置csv数据(准备测试数据)从数据库导出
  3. 设置线程组中线程数
  4. 添加聚合报告
  5. 运行过程中查看服务器的状态和追踪对应的日志。

测试完成之后,如果性能有缺陷,交给开发优化即可。

练习

  1. 从数据库中导出所有数据, 包含 用户名对应的token( loginname, accessToken)
  2. 创建线程组,创建请求
    1. 用户发布话题 post /topics 新建主题 发帖的title内容为 ${loginname} 正在发帖
    2. 用户修改话题 修改帖字的title内容为 ${loginname} 正在修改帖子
    3. 查看话题详情 查看话题 — 添加断言 状态码200
  3. 并发50,压测10分钟
  4. 观察服务器的状态

完成
LInuxshuju.xlsx
nmon analyser v66.xlsm
testusers.csv
服务器压测.jmx


JDBC Mysql 连接

配置mysql连接文件

下载 jar 文件
打开JMeter的安装位置。将jar 文件复制到安装目录的 lib 目录下
image.png

创建配置

在【线程组】-【右键】—【添加配置元件】—【jdbc connection configuration】
image.png

添加 mysql的连接信息

  1. Mysql 数据库连接:
  2. 外网地址: rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com
  3. 外网端口: 3306 (默认端口)
  4. 用户名: fanmao55
  5. 密码: ABCfanmao55
  6. 数据库: taofei55

image.png
databaseurl: jdbc:mysql://rm-bp188nr95fk4l9545ao.mysql.rds.aliyuncs.com:3306/taofei55
jdbc driver class: image.png

创建jdbc请求

image.png

编写sql语句
image.png

线程组jdbc-数据库操作.jmx

image.png

数据库查询结果作为变量来使用

  1. 编写 sql 语句

    1. select username,age from students;

    image.png

  2. 发布话题,将sql中返回的结果作为 参数。

image.png
在 Variable name中设置变量。
添加 调试取样器
image.png
image.png

foreach 控制器

image.png
设置变量名
image.png

  1. {
  2. "accesstoken":"1bfffaa4-7840-43cf-b1aa-5802abb4d28b",
  3. "title":"${username}今年${age}",
  4. "tab":"ask",
  5. "content":"xxxxxyyyyyyyyyx"
  6. }

image.png

image.png

线程组jdbc传参.jmx