项目介绍和部署
项目背景
轻商城项目是一个现在流行的电商项目。我们需要综合评估该项目中各个关键接口的性能,并给出优化建议,以满足项目上线后的性能需要。
项目功能架构
前台商城:购物车、订单、支付、优惠券等
后台管理系统:商品管理、会员管理、商场管理、推广管理等。
项目技术架构
前端:Vue技术框架开发,支持微信小程序、手机移动端、web界面
后端:SpringBoot框架开发,MySQL做数据库
无论是前端代码,还是后端代码,都是存放在服务器上。
前后端分离的项目:
前后端不分离的项目:
对比两种方式:
- 前后端分离的形式,数据传输的效率要高很多(JSON数据格式远小于HTML页面格式)
- 前后端分离的形式,服务器不需要处理HTML页面逻辑,由浏览器自己完成,减轻服务器的压力
- 在实际项目中,主要是使用前端后分离的形式。
数据库设计
作用:
- 构造测试时,监控数据库的性能指标,定位bug
- 构造测试数据。
微商场项目的部署过程
项目搭建步骤
-
获取项目源代码
- 包括前端代码和后端代码
- 实际工作当中项目源码由开发提供,项目所需的配置文件、启动项目的顺序也由开发提供文档介绍
-
构建轻商城后端代码
- 编译、打包
- 打包成jar包或war包
-
构建前端代码
- 使用node.js打包
- 部署包中包含HTML、JS、CSS等文件
-
初始化MySQL数据库
- 项目启动前需要先初始化数据库
- 执行初始化数据库的sql文件
source /usr/local/litemall/litemall-db/litemall.sql
-
启动轻商城后台管理系统的后端服务
java -jar litemall-all.jar
-
部署轻商城前端服务
- 可以使用nginx服务器
-
通过浏览器访问启动的前端,测试项目是否能够正常运行。
性能测试需求分析
获取需求
客户方提出:
- 能够提出明确需求的一般是金融、银行、电信、医疗等企业,他们一般对系统的性能要求高,并且对性能也非常了解。
根据历史运营数据分析,如:
- 用户频繁使用的功能模块是哪些
- 每月、每周、每天的峰值业务量是多少
竞品分析:
- 对比同类型软件的性能指标结果
提取性能测试点
业务维度提取:
- 用户频繁使用的业务性能
- 非常关键的业务功能
- 特殊交易日或峰值交易的业务功能
- 核心业务发生重大调整的业务功能
技术维度提取:
- 资源占用非常高的业务功能
确定性能测试目标
轻商城作为一个新开发的项目,性能测试目标包括:
- 确定核心业务功能的TPS
- 对业务流程(多接口组合)进行压测
- 系统能在实际系统运行压力的情况下,稳定的运行24小时
性能测试计划及方案
测试计划的核心内容:
-
测试背景
-
测试目的
- 确定核心业务功能的TPS
- 对业务流程(多接口组合)进行压测
- 系统能在实际系统运行压力的情况下,稳定的运行24小时
-
测试范围
-
测试策略
- 基准测试:先做基准测试,确定估算的标准
- 负载测试:分别模拟5、10、30、50、100个用户对系统进行负载测试
查看不同并发时系统软件各项指标是否符合需求。
- 稳定性测试:用200用户对系统进行7*24小时的不间断稳定性测试。
-
风险控制
-
交付清单
-
速度与分工
性能测试计划:
- 测什么
- 测试目的、测试范围
- 谁来测
- 测试的人工、进度、安排
- 怎么测
- 使用什么方法来进行
性能测试用例设计
测试用例模板:
-
根据测试点逐条进行细化:
- 性能测试数据,有明确要求,需要达到一定的业务量
- 从接口维度来描述测试步骤
- 如果两个接口强绑定(结算、下订单),放在一个用例中间测试
编写测试脚本
常用测试元件:
1.取样器-HTTP请求
2.配置文件-HTTP请求默认值
3.配置文件-用户定义的变量
4.后置处理器-JSON提取器
5.断言-响应数据
6.断言-JSON数据
7.监听器-查看结果树
8.监听器-聚合报告
Jmeter脚本的基本结构:
1.创建测试用例结构
2.设置HTTP请求默认值
3.用户定义的变量
4.添加监听器-查看结果树
5.添加监听器-聚合报告
编写脚本的要点:
单接口测试脚本:
(1)登录脚本
- 添加HTTP请求默认值:设置HTTP请求中的默认部分(协议、域名、端口、编码格式)
- 添加HTTP信息头管理,设置HTTP请求的头域
- 添加线程组-登录
- 添加HTTP请求-登录,填写路径和请求参数
- 在HTTP请求下添加断言:
- 如果做接口测试,必须断言 响应中的业务数据,可以加上 状态码和描述信息
- 如果做性能测试,可以 只添加状态码和描述信息 断言
(2)进入首页、搜索商品、获取商品详情
进入首页:
- 请求:
- 断言:响应状态码、errmsg
搜索商品:
- 请求:
- 断言:
- 状态码、errmsg
- 如果是接口测试脚本,必须针对响应中的商品数量进行断言(数据库)
获取商品详情
- 请求:
- 断言:
- 状态码、errmsg
- 如果是接口测试脚本,需要针对响应中的商品的详细数据进行对比(数据库)
(3)加入购物车的脚本
- 添加请求1:登录
- 添加JSON提取器,提取token
- 将token设置在HTTP信息头管理器中
- 添加请求2:加入购物车
-
添加断言
-
状态码,errmsg
-
如果是接口测试脚本,需要再查询我的购物车,检查我的购物车返回的数据是否与加入购物车
返回的数据一致。
-
(4)查看我的购物车、结算下订单、查看我的订单
查看我的购物车:
- 先发送登录请求,提取token信息,添加查看购物车请求,将token信息赋值为X-Litemall-Token头域,填写请求路径和参数
- 响应:
- 状态码,errmsg
- 如果是接口测试脚本,需要断言响应报文中的购物车中的商品总数量或者商品总价值
提交订单:
-
请求:(1)先发送登录请求,提取token信息,(2)添加结算请求,将token信息为X-Litemall-Token头域,填写请求路径和参数(3)添加下订单请求,将token信息为X-Litemall-Token头域,填写请求路径和参数(注意地址ID必须与用户ID匹配)
-
响应:
- 状态码,errmsg
- 如果是接口测试脚本,需要断言响应报文中的订单数据,与数据库中订单表中的订单数量一致。
业务流程的测试脚本:
- 将业务流程中的所有单接口的脚本组装在一起
- 注意所有的脚本组装在一起时,数据是否一致
搭建测试环境
性能测试环境的特点:
- 独占性
- 尽量保持性能测试环境与真实生产环境的一致性。
- 硬件环境
- 包括服务器环境、网络环境等。
- 软件环境
- 版本一致性:包括操作系统、数据库、被测应用程序、第三方软件等。
- 配置一致性:包括操作系统、数据库、被测应用程序、第三方软件等。
- 使用场景的一致性
- 基础业务数据的的一致性
- 业务操作模式的一致性:尽量模拟真实场景下用户的使用情况。
- 硬件环境
构造性能测试数据:
目的:压测环境中的数据量尽量与生产环境中的数量一致
方法:为了快速创建大量数据,可以直接操作数据库进行添加。
- 准备插入数据的SQL语句
- 循环执行SQL语句来插入数据
- 导包
- 连接数据库
- 创建游标
- 执行SQL语句
- 将SQL语句中唯一的字段,使用占位符{}来替换,方便在脚本中传递不同的值。
- 编写脚本,循环执行sql语句插入对应的商品记录
- 关闭游标
- 关闭连接
练习1:通过编写python脚本,构造10万条商品记录
# 导包
import pymysql
#连接数据库
conn = pymysql.Connect(host="192.168.234.139",port=3306,user="root",password='123456',database='litemall')
#创建游标
cursor =conn.cursor()
#执行SQL语句
# 插入商品表
sql1="INSERT INTO `litemall`.`litemall_goods` (`id`, `goods_sn`, `name`, `category_id`, `brand_id`, `gallery`, `keywords`, `brief`, `is_on_sale`, `sort_order`, `pic_url`, `share_url`, `is_new`, `is_hot`, `unit`, `counter_price`, `retail_price`, `detail`, `add_time`, `update_time`, `deleted`) VALUES ({}, '{}', '母亲节礼物-舒适安睡组合_{}', 1008008, 1001020, '[\"http://yanxuan.nosdn.127.net/355efbcc32981aa3b7869ca07ee47dac.jpg\", \"http://yanxuan.nosdn.127.net/43e283df216881037b70d8b34f8846d3.jpg\", \"http://yanxuan.nosdn.127.net/12e41d7e5dabaf9150a8bb45c41cf422.jpg\", \"http://yanxuan.nosdn.127.net/5c1d28e86ccb89980e6054a49571cdec.jpg\"]', '', '安心舒适是最好的礼物', 1, 1, 'http://yanxuan.nosdn.127.net/1f67b1970ee20fd572b7202da0ff705d.png', '', 1, 0, '件', 2618.00, 2598.00, '<p><img src=\"http://yanxuan.nosdn.127.net/3ddfe10db43f7df33ba82ae7570ada80.jpg\" _src=\"http://yanxuan.nosdn.127.net/3ddfe10db43f7df33ba82ae7570ada80.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/7682b7930b4776ce032f509c24a74a1e.jpg\" _src=\"http://yanxuan.nosdn.127.net/7682b7930b4776ce032f509c24a74a1e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e0bb6a50e27681925c5bb26bceb67ef4.jpg\" _src=\"http://yanxuan.nosdn.127.net/e0bb6a50e27681925c5bb26bceb67ef4.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/ba63b244c74ce06fda82bb6a29cc0f71.jpg\" _src=\"http://yanxuan.nosdn.127.net/ba63b244c74ce06fda82bb6a29cc0f71.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/3c7808c3a4769bad5af4974782f08654.jpg\" _src=\"http://yanxuan.nosdn.127.net/3c7808c3a4769bad5af4974782f08654.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/71798aaac23a91fdab4d77e1b980a4df.jpg\" _src=\"http://yanxuan.nosdn.127.net/71798aaac23a91fdab4d77e1b980a4df.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c88cbb2dd2310b732571f49050fe4059.jpg\" _src=\"http://yanxuan.nosdn.127.net/c88cbb2dd2310b732571f49050fe4059.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/5dfdcd654e0f3076f7c05dd9c19c15ea.jpg\" _src=\"http://yanxuan.nosdn.127.net/5dfdcd654e0f3076f7c05dd9c19c15ea.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/bd55d6ef7af69422d8d76af10ee70156.jpg\" _src=\"http://yanxuan.nosdn.127.net/bd55d6ef7af69422d8d76af10ee70156.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/bae571b22954c521b35e446d652edc1d.jpg\" _src=\"http://yanxuan.nosdn.127.net/bae571b22954c521b35e446d652edc1d.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e709c4d9e46d602a4d2125e47110f6ae.jpg\" _src=\"http://yanxuan.nosdn.127.net/e709c4d9e46d602a4d2125e47110f6ae.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/83e41915035c418db177af8b1eca385c.jpg\" _src=\"http://yanxuan.nosdn.127.net/83e41915035c418db177af8b1eca385c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/f42c561e6935fe3e0e0873653da78670.jpg\" _src=\"http://yanxuan.nosdn.127.net/f42c561e6935fe3e0e0873653da78670.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/8317726fbae80b98764dc4c6233a913e.jpg\" _src=\"http://yanxuan.nosdn.127.net/8317726fbae80b98764dc4c6233a913e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/ba904b7c948b8015db2171435325270f.jpg\" _src=\"http://yanxuan.nosdn.127.net/ba904b7c948b8015db2171435325270f.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/4969c73d0d8f29bffb69529c96ca4889.jpg\" _src=\"http://yanxuan.nosdn.127.net/4969c73d0d8f29bffb69529c96ca4889.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/d80b9b8c5c31031d1cd5357e48748632.jpg\" _src=\"http://yanxuan.nosdn.127.net/d80b9b8c5c31031d1cd5357e48748632.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/3fe79bdae40662a7b1feed3179d3dd1f.jpg\" _src=\"http://yanxuan.nosdn.127.net/3fe79bdae40662a7b1feed3179d3dd1f.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/79eef059963b12479f65e782d1dca128.jpg\" _src=\"http://yanxuan.nosdn.127.net/79eef059963b12479f65e782d1dca128.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e5a8f64f4297ccc01b41df98b0f252c8.jpg\" _src=\"http://yanxuan.nosdn.127.net/e5a8f64f4297ccc01b41df98b0f252c8.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/a940b9e9525c4861407e4c3b07b02977.jpg\" _src=\"http://yanxuan.nosdn.127.net/a940b9e9525c4861407e4c3b07b02977.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/224b8b81cbe12e4ad060a50f1e26601a.jpg\" _src=\"http://yanxuan.nosdn.127.net/224b8b81cbe12e4ad060a50f1e26601a.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/85e151647452fad718effb7b1adc18e2.jpg\" _src=\"http://yanxuan.nosdn.127.net/85e151647452fad718effb7b1adc18e2.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/d47444ff3bb9dc0aa4ab1f9b84d83768.jpg\" _src=\"http://yanxuan.nosdn.127.net/d47444ff3bb9dc0aa4ab1f9b84d83768.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/136262743f0c849cc0c55c8e7963dd7e.jpg\" _src=\"http://yanxuan.nosdn.127.net/136262743f0c849cc0c55c8e7963dd7e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/331a97cbaff5b25a3b08ed7cdfe29df9.jpg\" _src=\"http://yanxuan.nosdn.127.net/331a97cbaff5b25a3b08ed7cdfe29df9.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/89b450aa0a8afe1db566dcad926f1fe8.jpg\" _src=\"http://yanxuan.nosdn.127.net/89b450aa0a8afe1db566dcad926f1fe8.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c1cf94f13b7280a97e751cebe573fa78.jpg\" _src=\"http://yanxuan.nosdn.127.net/c1cf94f13b7280a97e751cebe573fa78.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/1822c23def83b77e7607c24237eeec74.jpg\" _src=\"http://yanxuan.nosdn.127.net/1822c23def83b77e7607c24237eeec74.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/2af234312b3914d6d0bc316f92134614.jpg\" _src=\"http://yanxuan.nosdn.127.net/2af234312b3914d6d0bc316f92134614.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c4f8ab2b3813275d954a8bedcf902d26.jpg\" _src=\"http://yanxuan.nosdn.127.net/c4f8ab2b3813275d954a8bedcf902d26.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/42f18842ff0c92ed849c4401ae47bb61.jpg\" _src=\"http://yanxuan.nosdn.127.net/42f18842ff0c92ed849c4401ae47bb61.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/a8ea64a35799e50ab31ecb65345fe8f4.jpg\" _src=\"http://yanxuan.nosdn.127.net/a8ea64a35799e50ab31ecb65345fe8f4.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/18759fa90cd153bdd744280807c3c155.jpg\" _src=\"http://yanxuan.nosdn.127.net/18759fa90cd153bdd744280807c3c155.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/431f00d068a8e747959deb3b7bdd495a.jpg\" _src=\"http://yanxuan.nosdn.127.net/431f00d068a8e747959deb3b7bdd495a.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/5bd3b44f1f4c627bfa39f7809e866ec6.jpg\" _src=\"http://yanxuan.nosdn.127.net/5bd3b44f1f4c627bfa39f7809e866ec6.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/7fc36778fe2f6129b9c26e8298c5be7e.jpg\" _src=\"http://yanxuan.nosdn.127.net/7fc36778fe2f6129b9c26e8298c5be7e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c568432e3d5ab6786cd9dcae8008891b.jpg\" _src=\"http://yanxuan.nosdn.127.net/c568432e3d5ab6786cd9dcae8008891b.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/ec82ff5aecafa48807117da68cce2ce9.jpg\" _src=\"http://yanxuan.nosdn.127.net/ec82ff5aecafa48807117da68cce2ce9.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/b8eccbed570da595e6f8a71ed4abc42c.jpg\" _src=\"http://yanxuan.nosdn.127.net/b8eccbed570da595e6f8a71ed4abc42c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/9cae1fed6ecefcd61435fe6e2c700fd6.jpg\" _src=\"http://yanxuan.nosdn.127.net/9cae1fed6ecefcd61435fe6e2c700fd6.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e306a418f82777399f5e88b93cca22db.jpg\" _src=\"http://yanxuan.nosdn.127.net/e306a418f82777399f5e88b93cca22db.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/a66d717084e23864ce079f936557709f.jpg\" _src=\"http://yanxuan.nosdn.127.net/a66d717084e23864ce079f936557709f.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/6ae06c6505cdbf87a0210fe3b8727d5f.jpg\" _src=\"http://yanxuan.nosdn.127.net/6ae06c6505cdbf87a0210fe3b8727d5f.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/58ac2086725b0ba2fe800195f274a0b4.jpg\" _src=\"http://yanxuan.nosdn.127.net/58ac2086725b0ba2fe800195f274a0b4.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/5e2e9d9eb099647fbe041ec6645ac034.jpg\" _src=\"http://yanxuan.nosdn.127.net/5e2e9d9eb099647fbe041ec6645ac034.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/8154357c0fab82bd4e67cda9aaa128c0.jpg\" _src=\"http://yanxuan.nosdn.127.net/8154357c0fab82bd4e67cda9aaa128c0.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/4325763b738ec3183ecf0d82b2b28e32.jpg\" _src=\"http://yanxuan.nosdn.127.net/4325763b738ec3183ecf0d82b2b28e32.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/06d8ea9d10035a00f26c5c52cc601ca7.jpg\" _src=\"http://yanxuan.nosdn.127.net/06d8ea9d10035a00f26c5c52cc601ca7.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/499f30b9e69b5dddf3db36f105756111.jpg\" _src=\"http://yanxuan.nosdn.127.net/499f30b9e69b5dddf3db36f105756111.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/ed7e1733d54e711a560edb3a76f1a60c.jpg\" _src=\"http://yanxuan.nosdn.127.net/ed7e1733d54e711a560edb3a76f1a60c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/b6474347eebdb917d2e827fd526dd01c.jpg\" _src=\"http://yanxuan.nosdn.127.net/b6474347eebdb917d2e827fd526dd01c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/b2c0691f9204c5ebc94b4ff678919ca7.jpg\" _src=\"http://yanxuan.nosdn.127.net/b2c0691f9204c5ebc94b4ff678919ca7.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/b4811e702a6884a9251d7cc9e3b06b6f.jpg\" _src=\"http://yanxuan.nosdn.127.net/b4811e702a6884a9251d7cc9e3b06b6f.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/d518783c054695acf329e81d597fdec3.jpg\" _src=\"http://yanxuan.nosdn.127.net/d518783c054695acf329e81d597fdec3.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/835ce09e785cca635c176008975053a1.jpg\" _src=\"http://yanxuan.nosdn.127.net/835ce09e785cca635c176008975053a1.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/769af780de81a302c0a3b03ed8e6c528.jpg\" _src=\"http://yanxuan.nosdn.127.net/769af780de81a302c0a3b03ed8e6c528.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/da34f99daf9141f0fe56a766461b8485.jpg\" _src=\"http://yanxuan.nosdn.127.net/da34f99daf9141f0fe56a766461b8485.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/d7c9cd8722a2f9a78e158ce02ec5d4f2.jpg\" _src=\"http://yanxuan.nosdn.127.net/d7c9cd8722a2f9a78e158ce02ec5d4f2.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/09ea18953884b15227819e326103462b.jpg\" _src=\"http://yanxuan.nosdn.127.net/09ea18953884b15227819e326103462b.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/5ef728213983842edf1aec27b2c1f5b6.jpg\" _src=\"http://yanxuan.nosdn.127.net/5ef728213983842edf1aec27b2c1f5b6.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/95409f2a884dcfeaabfe5e61fcf9ec37.jpg\" _src=\"http://yanxuan.nosdn.127.net/95409f2a884dcfeaabfe5e61fcf9ec37.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/6807836dc2a940ba56ea10c7a63b14c9.jpg\" _src=\"http://yanxuan.nosdn.127.net/6807836dc2a940ba56ea10c7a63b14c9.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e1d976d06853e7a0e6c9cc4ab484ac8a.jpg\" _src=\"http://yanxuan.nosdn.127.net/e1d976d06853e7a0e6c9cc4ab484ac8a.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/47f5673dec5005092f6d897d6335966c.jpg\" _src=\"http://yanxuan.nosdn.127.net/47f5673dec5005092f6d897d6335966c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/1b0109abd0e6a0d13fa2423a96c1167e.jpg\" _src=\"http://yanxuan.nosdn.127.net/1b0109abd0e6a0d13fa2423a96c1167e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/916111a8f94cc0bd39375b3dcac14e35.jpg\" _src=\"http://yanxuan.nosdn.127.net/916111a8f94cc0bd39375b3dcac14e35.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c1360df3d6b703c5df9b2f47a2a3d12e.jpg\" _src=\"http://yanxuan.nosdn.127.net/c1360df3d6b703c5df9b2f47a2a3d12e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/1d5a31eb93ef873a165993bd99f29df1.jpg\" _src=\"http://yanxuan.nosdn.127.net/1d5a31eb93ef873a165993bd99f29df1.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/997a48948b89dd7261ed5a59ba884f45.jpg\" _src=\"http://yanxuan.nosdn.127.net/997a48948b89dd7261ed5a59ba884f45.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/eb96d9689735c9f4019ebf76da43b2b2.jpg\" _src=\"http://yanxuan.nosdn.127.net/eb96d9689735c9f4019ebf76da43b2b2.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/a92cf2172e6cafe080e4511205568d79.jpg\" _src=\"http://yanxuan.nosdn.127.net/a92cf2172e6cafe080e4511205568d79.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c9e94570428f197292bb3f43609963f5.jpg\" _src=\"http://yanxuan.nosdn.127.net/c9e94570428f197292bb3f43609963f5.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/37145f06cce747311692ad7f276645db.jpg\" _src=\"http://yanxuan.nosdn.127.net/37145f06cce747311692ad7f276645db.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c9a698b71ed911364fc6f243006c241c.jpg\" _src=\"http://yanxuan.nosdn.127.net/c9a698b71ed911364fc6f243006c241c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e89db969711efaa441c43d6b90498a0c.jpg\" _src=\"http://yanxuan.nosdn.127.net/e89db969711efaa441c43d6b90498a0c.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/3803bb1a18229562f18943512b1d3524.jpg\" _src=\"http://yanxuan.nosdn.127.net/3803bb1a18229562f18943512b1d3524.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/235cbb5be905ac2b87e7e8f7c8d90144.jpg\" _src=\"http://yanxuan.nosdn.127.net/235cbb5be905ac2b87e7e8f7c8d90144.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/3e38435b3fdbae4ee80b83995592901e.jpg\" _src=\"http://yanxuan.nosdn.127.net/3e38435b3fdbae4ee80b83995592901e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/8ceb7cd3231585da60a74dd2c1aa9015.jpg\" _src=\"http://yanxuan.nosdn.127.net/8ceb7cd3231585da60a74dd2c1aa9015.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e151e225c2e30aab7ccf086094381577.jpg\" _src=\"http://yanxuan.nosdn.127.net/e151e225c2e30aab7ccf086094381577.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/363c19306953daf10968f4aa86617997.jpg\" _src=\"http://yanxuan.nosdn.127.net/363c19306953daf10968f4aa86617997.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/4237a392cf2e69b110ad4ecf35e44059.jpg\" _src=\"http://yanxuan.nosdn.127.net/4237a392cf2e69b110ad4ecf35e44059.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/da8ab35ada2dfe55006db01efa96e51a.jpg\" _src=\"http://yanxuan.nosdn.127.net/da8ab35ada2dfe55006db01efa96e51a.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/aa1d4fd00b7879db3f1051dc6d16aa87.jpg\" _src=\"http://yanxuan.nosdn.127.net/aa1d4fd00b7879db3f1051dc6d16aa87.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/302a8f2d997ff22bedcd837672cdafc2.jpg\" _src=\"http://yanxuan.nosdn.127.net/302a8f2d997ff22bedcd837672cdafc2.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/a39ff68c00522aef0472402958a334d2.jpg\" _src=\"http://yanxuan.nosdn.127.net/a39ff68c00522aef0472402958a334d2.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/86ccd0eb677c8b552398869d11a8917e.jpg\" _src=\"http://yanxuan.nosdn.127.net/86ccd0eb677c8b552398869d11a8917e.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/a6d0ede352da947060d912d903646a5d.jpg\" _src=\"http://yanxuan.nosdn.127.net/a6d0ede352da947060d912d903646a5d.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e6a118bf95bdb61891409d25f193e9c4.jpg\" _src=\"http://yanxuan.nosdn.127.net/e6a118bf95bdb61891409d25f193e9c4.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c214066e9bf65d60bcebd691b5b1cbc1.jpg\" _src=\"http://yanxuan.nosdn.127.net/c214066e9bf65d60bcebd691b5b1cbc1.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/c301559ba3ee280bcbf2fc4269bfa9ca.jpg\" _src=\"http://yanxuan.nosdn.127.net/c301559ba3ee280bcbf2fc4269bfa9ca.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/573748f5c12ecb4515ba00a7b6e981dc.jpg\" _src=\"http://yanxuan.nosdn.127.net/573748f5c12ecb4515ba00a7b6e981dc.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/27bcc8bf512a7e6f994a9683b3deea82.jpg\" _src=\"http://yanxuan.nosdn.127.net/27bcc8bf512a7e6f994a9683b3deea82.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/e22a4507fd1e4b5ef859035e857ae419.jpg\" _src=\"http://yanxuan.nosdn.127.net/e22a4507fd1e4b5ef859035e857ae419.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/27b07b4ca709c33ad71b368f87781307.jpg\" _src=\"http://yanxuan.nosdn.127.net/27b07b4ca709c33ad71b368f87781307.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/ef31eb48bcb133728bffda7e1239b592.jpg\" _src=\"http://yanxuan.nosdn.127.net/ef31eb48bcb133728bffda7e1239b592.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/5f49aaaca59c0733ec92f100d01bc0af.jpg\" _src=\"http://yanxuan.nosdn.127.net/5f49aaaca59c0733ec92f100d01bc0af.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/818889261deb75044e1018ec53485d85.jpg\" _src=\"http://yanxuan.nosdn.127.net/818889261deb75044e1018ec53485d85.jpg\" style=\"\"/></p><p><img src=\"http://yanxuan.nosdn.127.net/200369f023243e2faeb18a2a0a352ef1.jpg\" _src=\"http://yanxuan.nosdn.127.net/200369f023243e2faeb18a2a0a352ef1.jpg\" style=\"\"/></p><p><br/></p>', '2018-02-01 00:00:00', '2018-02-01 00:00:00', 0);"
#商品参数表
sql2="INSERT INTO `litemall`.`litemall_goods_attribute` (`id`, `goods_id`, `attribute`, `value`, `add_time`, `update_time`, `deleted`) VALUES ({}, {}, '重要提醒', '活动时间:5月8日0点-5月14日24点。\n请在以上时间段内购买,其余时间均不可享受组合装优惠。', '2018-02-01 00:00:00', '2018-02-01 00:00:00', 0);"
#商品货品表
sql3="INSERT INTO `litemall`.`litemall_goods_product` (`id`, `goods_id`, `specifications`, `price`, `number`, `url`, `add_time`, `update_time`, `deleted`) VALUES ({}, {}, '[\"1.5m床垫*1+枕头*2\",\"玛瑙红\"]', 1500.00, 195, 'quality=90&thumbnail=200x200&imageView', '2018-02-01 00:00:00', '2024-06-13 08:51:33', 0);"
#商品规格表
sql4="INSERT INTO `litemall`.`litemall_goods_specification` (`id`, `goods_id`, `specification`, `value`, `pic_url`, `add_time`, `update_time`, `deleted`) VALUES ({}, {}, '规格', '1.8m床垫*1+枕头*2', '', '2018-02-01 00:00:00', '2018-02-01 00:00:00', 0);"
goods_start=100000
for i in range(100000):
goods_id=goods_start+i
print("插入第{}条商品数据,商品ID为{}".format(i+1,goods_id))
cursor.execute(sql1.format(goods_id,goods_id,goods_id))
cursor.execute(sql2.format(goods_id,goods_id))
cursor.execute(sql3.format(goods_id,goods_id))
cursor.execute(sql4.format(goods_id,goods_id))
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()
执行测试脚本
性能测试脚本执行
登录脚本:
1、准备数据
# 导包
import pymysql
#建立连接
conn = pymysql.Connect(host="192.168.234.139",port=3306,user="root",password='123456',database='litemall')
#创建游标
cursor =conn.cursor()
#执行SQL语句
sql1="INSERT INTO `litemall`.`litemall_user` (`id`, `username`, `password`, `gender`, `birthday`, `last_login_time`, `last_login_ip`, `user_level`, `nickname`, `mobile`, `avatar`, `weixin_openid`, `session_key`, `status`, `add_time`, `update_time`, `deleted`) VALUES ({}, 'user{}', '$2a$10$lTu9qi0hr19OC800Db.eludFr0AXuJUSrMHi/iPYhKRlPFeqJxlye', 1, NULL, '2024-06-13 08:34:17', '192.168.234.1', 0, 'user{}', '{}', '', '', '', 0, '2019-04-20 22:17:43', '2024-06-13 08:34:17', 0);"
sql2="INSERT INTO `litemall`.`litemall_address` (`id`, `name`, `user_id`, `province`, `city`, `county`, `address_detail`, `area_code`, `postal_code`, `tel`, `is_default`, `add_time`, `update_time`, `deleted`) VALUES ({}, 'user{}', {}, '北京市', '市辖区', '东城区', 'changyangqu', '110101', '', '{}', 0, '2024-06-11 22:29:21', '2024-06-12 22:20:09', 0);"
user_start=100000
for i in range(100000):
user_id=user_start + i
print("插入第{}条用户数量,用户ID为{}".format(i+1,user_id))
mobile="13011"+str(user_id)
addr_id=user_start+i
cursor.execute(sql1.format(user_id,user_id,user_id,mobile))
cursor.execute(sql2.format(user_id, user_id, user_id, mobile))
conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()
2、修改脚本
- 使用random函数,来保证每次运行登录时,使用不同的用户名进行登录
3、监控性能指标
-
系统指标:响应时间、吞吐量、错误率、并发数
- 聚合报告
-
资源指标:CPU、内存、磁盘、网络
- PerfMon
4、模拟并发
如果系统之前进行过性能测试,直接模拟TPS20的场景,进行性能测试,并监控指标
如果系统之前未进行过性能测试,安装负载测试的原则,逐步增加负载量,观察性能的指标—采用该方法。
执行
- 模拟5个用户并发,观察吞吐量TPS和响应时间
结果分析:
- 用例要求登录TPS为20,要求响应时间不超过3s
- 实际执行登录TPS为20.3(达到要求),实际执行的响应时间为244ms(达到要求),因此用例通过。
补充:
-
当前用例测试时CPU利用率为98%,内存利用率为85.62%,超出正常的范围
-
如果在公司进行性能测试时,该用例不能算通过,因为资源使用率也是一个重要指标
-
在课上由于虚拟机资源不足,暂时不关注资源使用率
-
进入首页脚本:
模拟5个并发:
- 实际TPS未达到要求TPS100,实际响应时间(1)未超过要求实际5s,无法证明是否存在BUG,需要进一步增加负载量。
模拟30个用户并发:
- 实际TPS未达到要求TPS100,实际响应时间(10s)未超过要求实际5s,说明用例测试不通过,需
要提交bug
添加购物车-查看购物车-商品结算-下订单-查看订单脚本;
加入购物车脚本:
1、数据准备工作:
(1)修改待添加的商品库存为足够大,避免在性能测试过程中把商品库存耗尽导致脚本失败
update litemall_goods_product set number='1000000000' where id=2
2、脚本修改:
(1)可以使用随机用户登录,并添加购物车吗?
3、运行并分析结果
模拟5个用户并发:
- 实际TPS41.9达到要求TPS20,实际响应时间59ms未超过要求响应时间3S,用例测试通过
结算并下订单脚本:
修改测试脚本:
- 设置计数器
- 修改HTTP请求登录:
- 修改HTTP请求下订单:
执行测试脚本:
模拟5个用户并发
- 实际TPS为29.5达到要求TPS10,实际响应时间为19ms(不超过要求3s),用例测试通过
业务流程的测试:
步骤:
- 准备测试数据
- 修改脚本
- 添加事务控制器,并把所有的脚本放入到事务控制器中
- 添加性能监控
- 并发执行并分析结果
注意:
- 在进行业务流程的脚本性能测试时,前提必须保证该业务流程中所有的单接口性能测试结果都达标
稳定性测试:
稳定性用例设计:
- 确定出稳定运行的所有业务操作:(同时运行)
- 根据运营数据,分析出每个业务操作对应的虚拟用户数
稳定性测试执行:
- 所有的脚本同时执行(接触前后依赖)
- 每个脚本都是一个事务/业务—事务控制器
- 按照要求设置虚拟用户数和运行时间
- 执行稳定性测试并监控
补充:
- 如果单个接口/业务流程还存在性能bug,需要再修复性能bug,再进行稳定性测试
性能测试分析和调优
性能调优的步骤:
1.确定问题:根据性能监控的数据和性能分析的结果,确定性能存在的问题(要求)
2.确定原因:确定了问题之后,对问题进行分析,找出问题产生的原因
3.给出解决方案:确定调整目标和解决方案(改服务器参数配置/增加硬件资源配置/修改代码)
4.验证问题:按照给出的解决方案,重新进行测试
5.分析调优结果:分析出问题的性能指标是否有提升,关注其他指标未下降
注意:性能测试调优并不是一次完成的过程,针对同一性能问题,上面的五步可能要经过多次循环才能最终完成性能调优的目标(即:测试发现问题-找原因-调整-验证-分析-再测试。。)
性能问题产生的原因分析:
在实际的性能测试中,会遇到各种各样的问题,比如TPS压不上去,导致这种现象的原因很多,作为测试人员应配合开发人员进行分析尽快找出瓶颈的所在。
硬件服务器资源指标:
1、服务器的硬件
CPU、内存、磁盘、外设(键盘、鼠标、显示器、散热器、机箱)
运行速度从快到慢:CPU>>内存>>磁盘
存储空间从大到小:磁盘>>内存>>CPU
2、CPU时间的介绍
CPU:单位HZ
- 将CPU划分为若干个时间片,为每个程序分配对应的时间片,保证所有的程序占用时间片来串行执行。
CPU使用率:表示一段时间内,正在使用的CPU时间段/总的CPU时间段*100%
- 已使用的时间片=用户CPU+系统CPU
- 总时间片=用户CPU+系统CPU+空闲CPU
- 用户CPU:所有应用程序运行时消耗的CPU
- 系统CPU:操作系统运行消耗的CPU
CPU使用率分为用户态、系统态和空闲态
- 用户态:表示cpu处于应用程序执行的时间
- 系统态:表示系统内核执行的时间
- 空闲态:表示空闲系统进程执行的时间
查看CPU使用率的命令:top
测试关注点:
- 当CPU使用率高时,确定是用户CPU高,还是系统CPU高
- 如果是用户CPU高,说明某个软件程序的CPU资源占用率高,需要定位代码程序运行的效率
- 如果是系统CPU高,同步观察是否是其他资源(磁盘IO、内存、网络等)不足。
3、内存和虚拟内存
内存:又称主存储器/物理内存,计算机中所有程序的运行都在内存中进行
虚拟内存:是计算机系统内存管理的一种技术,当计算器内存不足时,可以使用虚拟内存进行补偿。
- 在程序运行时,可以将程序的一部分装入内存,而将其余部分留在外存(磁盘),就可以启动程序来执行。
- 在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。
- 同时,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息
- 这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟内存。
命令:
- 查看总量:top
- 查看虚拟内存的使用量:vmstat
测试关注点:
- 实际内存:查看内存使用百分比,检查是否超过80%
- 虚拟内存:查看swap的si和so是否为0,如果不为0,说明内存可能不足。
4、磁盘IO
磁盘IO瓶颈:影响性能的时磁盘的读写速度(Input和Output速率),不是磁盘大小。
查看磁盘IO使用的命令:iostat -x 11
- %iowait:CPU等待输入输出完成时间的百分比
- %util:表示一秒钟有百分之多少的时间用于I/O
测试关注点:
- 如果%iowait高,说明磁盘IO传输数据的任务很多,在等待,说明磁盘传输速度不足,存在瓶颈
- 如果%util高,说明磁盘长时间占用CPU在发送数据,说明磁盘传输速度不足,存在瓶颈。
5、网络
网络瓶颈:影响性能的是网络的传输速度,与网络的总带宽进行对比,接近总带宽,说明网络存在瓶颈。
查看网络使用的命令:sar -n DEV 1 2
- rxkB/s:每秒接收的数据量(千字)
- txkB/s:每秒发送的数据量(千字)
测试关注点:
实际统计的发送速率和接收速率,与网络的总带宽进行对比,查看使用的百分比(如果无限接近100%,说明存在网络性能瓶颈)
补充介绍:
- 宽带:用户(业务)维度来描述网络速率的方式。例如20M宽带、100M宽带、1000M宽带
- 速率单位:b(bit)/s
- 带宽:数据在网络中传输的速率,在技术中都是通过带宽来描述速率。
- 速率单位:B(Byte)/s
- 1B = 8bit
- 实际情况:1000M宽带——对应着的宽带速率为1000/8=125M
数据库监控
数据库瓶颈分析——慢查询
1、慢查询:
概念:找出查询速度慢的sql语句
- 慢:查询时间超过设置的阈值
慢查询的相关参数:
- slow_query_long:慢查询开关
- slow_query_long_file:慢查询日志存放位置
- slow_query_time:慢查询时间阈值
查询慢查询的相关参数:show avriables like “”
设置慢查询的相关参数:set global 参数名=值
设置完成,并运行脚本抓取到慢查询的日志信息为:
测试关注点:
- 基于当前记录下来的慢查询sql进行进一步的分析,判断是否存在问题,需要修改。
2、数据库连接池
数据库连接池:事先建立好连接,当程序请求sql执行时,直接分配空闲连接,使用完成后释放连接。节省了SQL语句执行前后连接的建立和关闭的时间。
作用:可以提高对数据库操作的性能
工作原理:
查看方法:
- 最大连接数:show variable like “max_connections”
- 当前使用的连接数:show status like “threads_connected”
测试关注点:
- 关注:利用率=当前使用的连接数/最大连接数,建议:85%左右
- 如果利用率超过85%,连接池可能会被占满
- 如果利用率过低,说明资源存在浪费,可能会影响其他性能指标。
3、mysql锁
数据库瓶颈分析——数据库死锁
锁的介绍:
- 一个用户修改数据时,对该数据进行加锁操作,其他用户不能进行修改。
- 只有当第一个用户修改完成后,其他用户才能修改
MySQL主要有两种锁:表级、行级。
- 表级锁:开销小,加锁快;不会出现死锁,锁定粒度最大,并发度最低。
- 行级锁:开销大,加锁慢;会出现死锁,锁定粒度最小,并发度也最高。
死锁:
- 两个进程同时使用资源时,出现的相互争抢的现象
- 死锁后需要等待很长的时间,要么有程序校验机制来释放,要么手动释放。
数据库中锁的介绍:
行锁:
转账功能: 第一步 第二步
A给B转500元。 ———— A记录余额减少500, B记录余额增加500
B给A转600元。 ———— B记录余额减少600, A记录金额增加600
测试关注点:
- show open tables where in_user>=1:查看当前正在使用的表(可能是锁定的表)
- show pricesslist:查看执行时间长的线程,找到对应的sql
- kill pid:如果锁死,先手动杀死死锁的连接
Java应用瓶颈分析—JVM内存
JVM(JAVA Virtual Machine)JAVA虚拟机管理JAVA程序运行时,所管理的内存
- 堆内存:存储动态数据,创建对象时申请的空间。给程序员使用
- 非堆内存:存储静态数据。共JVM运行使用。
JAVA应用:
JVM—Jvisualcm.exe
1、在java程序启动时,添加启动参数
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=182.92.81.159
-Dcom.sun.management.jmxremote.port=10086
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
2、进入jdk的bin目录下,选择“exeisualvm.exe”
3、点击远程,右键选择“添加远程主机”,并设置服务器IP
4、点击主机IP,右键点击“添加JMX连接”,并设置JVM监控的端口
5、点击IP+Port,右边选择“监视”,可以查看JVM内存的实际使用情况
压测机:
-
压测机影响性能测试结果的原因主要是:
- Jmeter单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会导致TPS压不上去
-
监控的方法:
- windows压测机——任务管理器
- linux压测机——PerFMon 或者top命令
-
解决方法:
- 添加资源
- 添加多台压测机,进行分布式测试
性能调优案例
案例1——获取首页数据(CPU高)
场景描述:进入首页后,加载首页的相关数据,包括:轮播图、频道、优惠券、团购专区
品牌商直供、新品首发、热卖商品、专题精选等数据。
测试结果数据:
分析过程:
- 每发送一个HTTP请求,需要查询27个SQL语句,当TPS为100时,每秒要处理2700个SQL语句。
解决方案:
- 增加CPU
- 通过分批次、异步加载的方式,第一次进入首页时只加载第一屏的内容,下拉时再加载后续的数据
案例2——查看商品详情(网络)
场景描述:
- 进入商品详情页面时,加载商品的详细信息
测试结果数据:
原因:
- 已使用的网络带宽已接近于总带宽
解决方案:
- 增加网络带宽
- 减少进入商品详情页时的数据请求量
案例3——搜索商品(慢查询)
场景描述:
进入首页,在搜索框中输入关键字搜索商品
测试结果数据:
- 搜索关键字“床”时,出现慢查询SQL语句
- 查看慢查询语句cat/var/lib/mysql/localhost-slow.log,包含如下SQL语句:
select id, `name`, keywords, `desc`, pid, icon_url, pic_url, `level`,
sort_order, add_time, update_time, deleted from litemall_
category WHERE ( id in (1008009, 1008009, 1008008, 1008008, 1015000, 1015000,
1008009, 1008009, 1008009, 1008008, 1036000) and
`level` = 'L2' and deleted = 0);
分析步骤:
- 当搜索关键字匹配到大量的商品时,第3条SQL语句会返回大量重复数据
- 第4条SQL语句中的in查询条件中同样包含大量重复的商品分类id
- 因此:第4条SQL会出现查询时间较长,是由于第3条SQL返回的ID有大量重复
本案例解决方案:
案例4——JVM内存溢出
场景描述:
- 请求测试接口(wx/index/oom),模拟内存溢出
测试结果数据:
解决方案:
开发定位出泄露的点,修改代码。
性能测试报告
测试报告核心内容:
1、测试过程回顾——测试目的、测试范围、测试环境、测试使用的工具
2、测试问题记录及结果分析——性能测试过程中遇到的问题,分析过程和解决方案
3、测试结论
4、经验总结和教训