一、项目介绍
1、轻商城简介
轻商城是一个电商项目,主要测试接口性能
2、技术架构
技术架构:支持微信小程序,web访问,采用前后端分离的架构设计
前端:以Node.js为核心的Vue.js前端技术生态架构
后端:springBoot(spring全家桶),mysql做数据库
3、功能模块
注:
数据库密码:123456
虚拟机用户名:root
虚拟机密码:123456
二、项目的搭建
1、熟悉数据库
查看表:
desc可以查看表的结构,而select可以查看表的数据
2、具体搭建(省略)
- 下载vm
- 打开如图所示的虚拟机(数据库以及其他配置该虚拟机以及搭建好了,可直接使用)
3、搭建项目的注意事项
- 搭建项目需要:前后端代码,数据库(mysql)、web服务器(Nginx)、操作系统(Linux)
- 获取项目环境:必须从(开发、项目经理)获取指定的版本
4、搭建环境的常用命令
查看网络:
ifconfig(Linux)、ipconfig(win)
测试网络:
ping 目标地址IP
修改权限:
文件:chmod 777 文件名
目录:chmod -R 777 目录名
压缩、解压缩:
zip:unzip xxx.zip
tar:tar -zxvf xxx.tar.gz -C 指定解压的位置(解压缩命令)
查看系统的进程使用情况:
ps aux|grep 关键字
指定进程杀死:
kill -9 进程id
启动脚本:
bash xxx.sh
scp超级拷贝
scp -r 待拷贝的文件名、目录名 目标主机用户名@目标主机IP:绝对路径存储位置
scp -r ServerAgent.zip root @172.16.28.5:/home/admin/test
5、启动轻商城项目步骤:
- 将CentOS-litemall商城虚拟机压缩包,解压缩到系统中
- 使用VM工具打开解压缩的.vmx
- 点击“未列出”,输入root,密码123456
- 登录成功后,Linux服务器需要一段时间启动nginx和mysql服务器的程序
- 获取Linux虚拟机的IP地址,保证Windows系统能ping通
- 修改C:\Windows\System32\drivers\etc\hosts下的hosts文件
写入:服务器IP地址和域名(192.168.98.129 www.litemall360.com)
建议不要直接在目录里面该,可以先拷到桌面,修改后再拷回目录,覆盖原有的hosts文件
- 在浏览器访问轻项目商城
前端:http://www.litemall360.com:8082/#/ 用户名和密码:user123
后端:http://www.litemall360.com:8081/#/dashboard 用户名和密码:admin123
注:
当虚拟机中安装了一个服务器,那么该虚拟机的IP地址就是该服务器的IP地址。
域名和IP地址:如www.baidu.com就是百度的域名
在虚拟机里配置好数据库、前后端代码等,服务器
本机可以访问虚拟机的商城服务器的原理:域名解析(在hosts文件中查看是否有该服务器的解析)
三、性能测试基础理论知识
1、性能测试流程
- 性能测试需求分析
- 性能测试测试计划
- 性能测试测试用例
- 测试脚本编写(创建和配置线程组、http请求、聚合报告等等)
- 建立测试环境(测试项目(虚拟机)和测试工具环境)
- 执行脚本
- 监控性能(工具(聚合报告)和命令)
- 性能分析和调优(由易到难(硬件、网络、中间键、代码))
- 性能测试报告总结
2、性能测试常用指标
- 响应时间(网络时间-应用服务器处理时间):查看聚合报告(平均值、95%)
- 并发数(设置线程数)
- 吞吐量(设置常数吞吐量定时器):查看聚合报告(吞吐量)
- 错误率:查看聚合报告
- 服务器资源利用率(CPU、磁盘、网络、内存)
3、性能测试需求分析:
- 挑选测试的模块:
用户频繁使用的模块
项目的核心模块
修改过的核心模块,频繁使用模块
- 确定测试指标和预期值
有文档,根据需求文档
没有文档,参考历史数据
4、 轻商城测试点的提取
编号 | 功能模块 | 业务功能 | 功能描述 | 优先级 |
---|---|---|---|---|
T01 | 登录 | 登录 | 用户通过用户名和密码登录 | 高 |
T02 | 首页 | 进入首页 | 获取商城首页数据 | 高 |
T03 | 商品 | 搜索商品 | 通过关键字搜索商品 | 高 |
T04 | 商品 | 查看商品详情 | 点击商品进入商品详情页面 | 高 |
T05 | 购物车 | 添加购物车 | 把商品加入购物车 | 高 |
T06 | 购物车 | 查看购物车 | 用户查看购物车的商品 | 高 |
T07 | 订单 | 商品结算 | 对已选择的商品进行结算 | 高 |
T08 | 订单 | 提交订单 | 用户提交商品订单 | 高 |
T09 | 订单 | 查看我的订单 | 用户查看到达列表 | 低 |
5、性能测试的指标(相当于预期结果)
业务功能 | tps | 响应时间 |
登录 | 20 | 3s |
搜索商品 | 100 | 5s |
查看商品详情 | 40 | 3s |
添加购物车 | 20 | 3s |
查看购物车 | 20 | 3s |
商品结算 | 10 | 3s |
提交订单 | 10 | 3s |
查看我的订单 | 40 | 2s |
6、编写测试脚本
http请求默认值
位置:测试计划-配置元件-http请求默认值
作用:测试计划中的所有请求,均可以共用http请求默认值设置的内容(请求方法,URL,端口号)
四、编写脚本
1、编写测试脚本-注册接口步骤
添加http请求默认值和配置服务器IP和端口号(多个请求的服务器IP是一致的,参数不一致罢了)
注册接口有两个请求:一是获取验证码,二是注册
获取验证码(请求方法,请求路径通过抓包,请求体)
注册(请求方法、请求路径通过文档、请求体(获取验证码和注册的手机号要一致))
添加http信息头管理器(请求头)
注:
使用的端口号8080(不能使用8082)
发送注册请求前,要先获取验证码请求(方法、URL、请求体数据从F12获取)
实现注册接口时,保证用户唯一,手机号与获取验证码的手机号保持一致
2、编写测试脚本-登录接口步骤
对注册接口进行复写,编辑登录请求信息(路径和请求体)
3、各个接口的请求和响应信息
注:
提取公共参数:要在测试计划中添加“http请求默认值”和“http信息头默认值”
提取token和引用token
接口 | 请求信息 | 响应信息 | 注意事项 |
登录 | /wx/auth/login POST {"username":"user123","password":"user123"} | token和成功 | |
进入首页 | /wx/home/index GET | 首页的全部商品信息:礼物、笔记本手机等 | |
搜索商品 | /wx/goods/list GET keyword=手机&page=1&limit=10&categoryId=0 | 手机这个商品的信息 | 手机的id为1127047,这个是对应的,搜索不同的商品对应id是不一样的 |
查看商品详情 | /wx/goods/detail GET id=1127047 | 手机这个商品的详细信息 | |
添加购物车 | /wx/cart/add POST {"goodsId":1127047,"number":1,"productId":182} | 成功 | |
查看购物车 | /wx/cart/index GET | 查看购物车的记录:可能有很多加入购物车的商品 | |
商品结算 | /wx/cart/checkout GET cartId=0&addressId=0&couponId=0 &userCouponId=0&grouponRulesId=0 | 显示购物车中结算的商品和收货地址 | 引用token:将登录的token使用json提取器,在http请求下添加http信息头管理器引用token |
提交订单 | /wx/order/submit POST {"addressId":"1","cartId":"0","couponId":"0", "userCouponId":"0","grouponLinkId":0, "grouponRulesId":0,"message":""} | 成功 | 这个addressId的意思是收货地址列表的第一个地址 |
订单列表 | /wx/order/list GET showType=0&page=1&limit=10 | 显示购买记录 |
4、下单业务流程
注:
fiddler中配置filters过滤的方法:
1、添加代码并保存
2、在filters过滤
五、执行用例并监听服务器资源
1、执行用例-并发数和事务响应时间
用例名称 | 登录 |
用例编号 | Login001 |
用例描述 | 登录时tps达到20的情况下,登录时间不超过3S |
用例步骤 | 进入登录页面,用户名密码设置 |
期望的性能 | 响应时间<=3s |
测试结果 | 当线程并发数为30时,tps是20,平均响应时间为384ms,小于预期的3s,测试通过 |
设置登录的并发数为1和tps为20(看响应时间和tps‘’)
设置登录的并发数为5和tps(事务响应)为20
2、执行测试用例-并发用户数和应用服务器
查看服务器资源利用率:
1、在服务器安装启动配合jmeter监听的工具(ServerAgent)
2、在jmeter中添加组件,监听CPU、内存、磁盘、网络使用率
六、Linux命令查看服务器资源
(一)、分析与调优
按照由易到难的顺序:
- 硬件资源(CPU、内存、磁盘)
- 网络资源
- 中间件(应用服务器),数据库配置
- 源代码、数据库脚本
- 系统架构设计
(二)、硬件资源监控
- 工具:结合服务器安装serveragent工具,配合jmeter组件的PerMon.实现服务器硬件资源的监控。通过q退出。使用E修改显示的命令。
- 命令:
- top:(通过top直接查看登录的CPU的用户占用率)
在Linux系统中,实时查看CPU、内存的命令(类似于Windows的资源管理器)
- free
查看系统内存的使用情况
参数:-m 以兆为单位
- vmstat
查看系统的内存、CPU使用情况
参数:
r:表示等待CPU时间片的进程数,如果这个数量长期大于逻辑CPU,要考虑增加CPU
b:表示等除CPU以外的其他资源的进程数
- sar
sar -n DEV 1 3:查看网络发送、接收数据包情况
sar -n EDEV 1 1:查看网络发送、接收数据包过程中,丢包、坏包情况。
- lostat:
查看系统中,磁盘的读写情况。
(三)、应用服务器和数据库配置
- 应用服务器配置:
Apache:默认最大练接数:256
Nginx:默认最大连接数为1024,受Linux系统默认打开的最大文件个数限制。(ulimat -n)
注:我们只需要定位性能瓶颈是由应用服务器的默认最大连接数限制即可。
- 数据库服务器配置:
mysql:最大连接数151
(四)、数据库脚本(查询)
1、慢查询开关和阈值的查询和修改
(1)由于数据库中数据量较大,并且对应的字段没有设置提高检索效率的手段,很容易导致查询速度慢,降低系统性能。
(2)实现步骤:
- 开启mysql数据库慢查询开关状态(默认关闭off)
show variables like 'slow_query%';
- 使用SQL语句,开启mysql慢查询开关
set global slow_query_log='ON';
- 查看mysql默认的慢查询阈值
show variables like 'long_query_time';
- 修改慢查询阈值
set global long_query_time=1;
注:有些设置需要重启后可以成功,(exit,重新登录,再次查询)
2、慢查询-准备测试数据
使用Python解释器,运行指定的Python文件,制造10w条测试数据。
pymsql是连接数据库的包
用pymsql包调用connect方法,host是IP地址
3、慢查询-测试
连接数据库
(五)、Java虚拟机内存监测
1.内存泄漏和内存溢出
2.Java虚拟机
Java程序被Java虚拟机编译后,可以传给不同操作系统,从而驱动硬件执行。
3、jvm监听工具
jvisual vm能监控jvm(Java虚拟机)
4、内存的分类
stack 栈:存储新建对象的引用(内存地址)和基础数据类型
heap 堆:存储新建对象的实际内容,是监控代码内存溢出的主要目标。
6、配置jvisualvm并重启服务
6.1、监控jvm的步骤:
- 添加参数,重启litemall服务器
保证Linux服务器和Windows系统相互之间是能ping通
使用ps aux|grep litemall 查询当前轻商城项目的服务器进程id
使用kill -9 进程id关闭原有的轻商城项目的服务器
使用带有参数的命令,重启litemall服务器。(注意:修改自己的IP和端口号)
浏览器借助http://www.litemall360.com:8082/#/user/测试服务器是否重启成功
- 在jdk安装目录的bin下,找到jvisualvm文件,双击启动
- 双击“远程”,在弹出页面中,写入litemall服务器IP地址
- 在新生成的项目,右键添加“jmx连接”
- 在弹出页面中设置端口号
- 双击,选择“监视”,可以看到heap堆信息
6.2、图示
重启litemall服务器
java -jar -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.98.129 -Dcom.sun.management.jmxremote.port=10086 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false litemall-all-0.1.0-exec.jar
为什么要绕过前端的端口,使用的端口为什么不能使用8082
为什么获取验证码的token不用提取传给注册接口
从一个服务器获取不同的接口,是不是除了参数不一样,服务器IP和端口号都是一样的
令牌可以放到cookie或session,使用提取器与cookie的区别
为什么添加购物车的令牌和第一次登录的令牌值不一样
搜索商品与查看商品详情是一个接口信息吗
怎么抓取首页详细信息
只有添加购物车要使用token吗,那个搜索商品为什么不需要
已经用过自己的手机号注册过一遍,在写进jmeter里面这些手机号参数会不会显示已注册,但是别的手机号的验证码又不知道是什么
添加购物车前面必须要添加登录请求吗,不能直接引用吗
不直接添加到开头http请求头信息管理器,是因为有些接口不需要用token