搭建环境

Copy of CNode社区应用 · 凡猫资源项目组

根据上面文档搭建测试环境。

参考视频 cnode社区环境搭建.mp4

压测场景

场景

打开注册页面,注册1000个账号


用户注册没有专门的接口。可以通过抓包来获取注册的接口。
打开注册页面
image.png
使用 【右键】—【检查】
image.png
找到 【网络】
image.png

点击【清空】,清空所有请求历史记录。
image.png
勾选【保留日志】, 【禁用缓存】
image.png
在注册页面输入 对应的数据。点击【注册】按钮。

抓包分析

image.png

请求方式:Post
请求地址:http://1.117.45.85:3000/signup
请求参数类型: Content-Type: application/x-www-form-urlencoded
请求body数据:

  1. loginname: helloworld
  2. pass: 123456
  3. re_pass: 123456
  4. email: helloworld@163.com
  5. _csrf:

image.png

JMeter创建线程组

根据抓到的包,设置对应的请求。因为用户名和邮箱地址不能重复,使用函数助手生成对应的随机值。
image.png

比如现在要注册1000个账号

线程组设置

image.png
线程数: 模拟虚拟用户
Ramp-Up 时间: 虚拟用户启动所需的时间。 比如上面的线程数设置为100, ramp-up 设置为10, 表示10秒内启动100个虚拟用户(这个时间的配置根据自己的电脑来决定)
循环次数: 执行次数 如果设置为【永远】,默认一直执行。
设置【永远】跟【调度器】 一起联合使用
image.png

持续时间: 运行的时间
启动延迟:延迟启动。

聚合报告

执行性能测试的时候,可以通过【聚合报告】,查看性能情况。
添加【聚合报告】
image.png

运行,查看聚合报告
image.png
样本数: 执行数量
平均值:平均响应时间【毫秒】
异常率: 出错的情况 (最好是 0%)
吞吐量:每秒处理的能力

激活账号

账号注册完成之后,需要自己手动去服务器中修改数据激活。

登录Linux服务器。
输入命令 mongo 进入mongo数据库中
image.png

常用mongo命令

查看数据库

  1. show databases;

image.png

使用数据库

我们项目使用的库 node_club_dev

  1. use node_club_dev;

image.png

查看所有的表

  1. show tables;

image.png

查询表中内容

  1. db.users.find({});

image.png

激活所有注册的账号

  1. db.users.update({"active" : false},{$set:{ "active" : true}},{multi:true});

image.png

导出所有的token

我们的token是在users表中存储。后续做 新建主题 压测 需要使用到token值。
退出mongo 的命令行。

  1. exit;

image.png
执行命令

  1. mongoexport -d node_club_dev -c users -f accessToken --csv -o /tmp/testusers.csv
  • mongoexport mongodb的导出命令
  • -d node_club_dev 导出的数据库
  • -c users 导出表名称
  • -f accessToken 导出的字段名
  • —csv 导出的数据文件格式为 csv
  • -o /tmp/testusers.csv 数据导出路径

image.png
将导出的csv文件下载到本地

  1. sz /tmp/testusers.csv

image.png

压测服务器

性能场景:

  1. 新建主题
  2. 收藏主题

性能要求:

  1. 并发数 50
  2. 持续时间 300秒

提交:

  1. 聚合报告
  2. 服务器的CPU,内存信息。

创建CSV文件配置
image.png
引用变量
image.png
添加聚合报告
image.png
监控服务器状态
image.png

相关问题

  1. 服务器挂了 怎么办?
    1. 使用 reboot 命令 重启服务器
    2. 重新连接服务器,执行命令 ```python cd /root/nodeclub pm2 start app.js

```

  1. 下面配置 执行压测。 有没有区别

1个线程循环10次 与 10个线程循环一次的区别
image.pngimage.png
虽然最终都产生了10个请求,但是他们是有区别的:
1 个线程, 表示1个用户,1个用户发送第一个请求之后再发送第二个请求,这样循环了10次,他们是串行的(一个执行完成之后才能执行下一个)
10个线程, 表示 同时10个用户在发送请求, 10个请求同时在发送,他们是并行的。