性能测试项目实战

项目介绍和部署

项目背景

轻商城项目是一个现在流行的电商项目。我们需要综合评估该项目中各个关键接口的性能,并给出优化建议,以满足项目上线后的性能需要。

项目功能架构

前台商城:购物车、订单、支付、优惠券等

后台管理系统:商品管理、会员管理、商场管理、推广管理等。

项目技术架构

前端:Vue技术框架开发,支持微信小程序、手机移动端、web界面

后端:SpringBoot框架开发,MySQL做数据库

无论是前端代码,还是后端代码,都是存放在服务器上。

image-20240610215238081

前后端分离的项目:

image-20240610220304378

前后端不分离的项目:

image-20240610220538599

对比两种方式:

  • 前后端分离的形式,数据传输的效率要高很多(JSON数据格式远小于HTML页面格式)
  • 前后端分离的形式,服务器不需要处理HTML页面逻辑,由浏览器自己完成,减轻服务器的压力
  • 在实际项目中,主要是使用前端后分离的形式。

数据库设计

作用:

  • 构造测试时,监控数据库的性能指标,定位bug
  • 构造测试数据。

image-20240611082430398

微商场项目的部署过程

项目搭建步骤

  1. 获取项目源代码

    • 包括前端代码和后端代码
    • 实际工作当中项目源码由开发提供,项目所需的配置文件、启动项目的顺序也由开发提供文档介绍
  2. 构建轻商城后端代码

    • 编译、打包
    • 打包成jar包或war包
  3. 构建前端代码

    • 使用node.js打包
    • 部署包中包含HTML、JS、CSS等文件
  4. 初始化MySQL数据库

    • 项目启动前需要先初始化数据库
    • 执行初始化数据库的sql文件
    source /usr/local/litemall/litemall-db/litemall.sql
    
  5. 启动轻商城后台管理系统的后端服务

    java -jar litemall-all.jar
    
  6. 部署轻商城前端服务

    • 可以使用nginx服务器
  7. 通过浏览器访问启动的前端,测试项目是否能够正常运行。

性能测试需求分析

获取需求

客户方提出:

- 能够提出明确需求的一般是金融、银行、电信、医疗等企业,他们一般对系统的性能要求高,并且对性能也非常了解。

根据历史运营数据分析,如:

- 用户频繁使用的功能模块是哪些

- 每月、每周、每天的峰值业务量是多少

竞品分析:

- 对比同类型软件的性能指标结果

提取性能测试点

业务维度提取

- 用户频繁使用的业务性能

- 非常关键的业务功能

- 特殊交易日或峰值交易的业务功能

- 核心业务发生重大调整的业务功能

技术维度提取

- 资源占用非常高的业务功能

确定性能测试目标

轻商城作为一个新开发的项目,性能测试目标包括:

  1. 确定核心业务功能的TPS
  2. 对业务流程(多接口组合)进行压测
  3. 系统能在实际系统运行压力的情况下,稳定的运行24小时

image-20240611085436589

性能测试计划及方案

测试计划的核心内容

  1. 测试背景

  2. 测试目的

    • 确定核心业务功能的TPS
    • 对业务流程(多接口组合)进行压测
    • 系统能在实际系统运行压力的情况下,稳定的运行24小时
  3. 测试范围

  4. 测试策略

    • 基准测试:先做基准测试,确定估算的标准
    • 负载测试:分别模拟5、10、30、50、100个用户对系统进行负载测试

    ​ 查看不同并发时系统软件各项指标是否符合需求。

    • 稳定性测试:用200用户对系统进行7*24小时的不间断稳定性测试。
  5. 风险控制

  6. 交付清单

  7. 速度与分工

性能测试计划

  • 测什么
    • 测试目的、测试范围
  • 谁来测
    • 测试的人工、进度、安排
  • 怎么测
    • 使用什么方法来进行

性能测试用例设计

测试用例模板:

image-20240611221305201

  • 根据测试点逐条进行细化:

    • 性能测试数据,有明确要求,需要达到一定的业务量
    • 从接口维度来描述测试步骤
    • 如果两个接口强绑定(结算、下订单),放在一个用例中间测试

image-20240611221103418

image-20240611221214016

编写测试脚本

常用测试元件

1.取样器-HTTP请求

2.配置文件-HTTP请求默认值

3.配置文件-用户定义的变量

4.后置处理器-JSON提取器

5.断言-响应数据

6.断言-JSON数据

7.监听器-查看结果树

8.监听器-聚合报告

Jmeter脚本的基本结构

1.创建测试用例结构

2.设置HTTP请求默认值

3.用户定义的变量

4.添加监听器-查看结果树

5.添加监听器-聚合报告

image-20240611221837643

编写脚本的要点

单接口测试脚本:

(1)登录脚本

  • 添加HTTP请求默认值:设置HTTP请求中的默认部分(协议、域名、端口、编码格式)

image-20240612082751258

  • 添加HTTP信息头管理,设置HTTP请求的头域

image-20240612082856759

  • 添加线程组-登录
  • 添加HTTP请求-登录,填写路径和请求参数
  • 在HTTP请求下添加断言:
    • 如果做接口测试,必须断言 响应中的业务数据,可以加上 状态码和描述信息
    • 如果做性能测试,可以 只添加状态码和描述信息 断言

(2)进入首页、搜索商品、获取商品详情

进入首页:

  • 请求:

image-20240612084613863

  • 断言:响应状态码、errmsg

搜索商品:

  • 请求:

image-20240612084706101

  • 断言:
    • 状态码、errmsg
    • 如果是接口测试脚本,必须针对响应中的商品数量进行断言(数据库)

获取商品详情

  • 请求:

image-20240612084936950

  • 断言:
    • 状态码、errmsg
    • 如果是接口测试脚本,需要针对响应中的商品的详细数据进行对比(数据库)

(3)加入购物车的脚本

  • 添加请求1:登录
  • 添加JSON提取器,提取token

image-20240612090049952

  • 将token设置在HTTP信息头管理器中

image-20240612090206173

  • 添加请求2:加入购物车

image-20240612090237323

  • 添加断言

    • 状态码,errmsg

    • 如果是接口测试脚本,需要再查询我的购物车,检查我的购物车返回的数据是否与加入购物车

      返回的数据一致。

(4)查看我的购物车、结算下订单、查看我的订单

查看我的购物车:

  • 先发送登录请求,提取token信息,添加查看购物车请求,将token信息赋值为X-Litemall-Token头域,填写请求路径和参数

image-20240612091320630

  • 响应:
    • 状态码,errmsg
    • 如果是接口测试脚本,需要断言响应报文中的购物车中的商品总数量或者商品总价值

提交订单:

  • 请求:(1)先发送登录请求,提取token信息,(2)添加结算请求,将token信息为X-Litemall-Token头域,填写请求路径和参数(3)添加下订单请求,将token信息为X-Litemall-Token头域,填写请求路径和参数(注意地址ID必须与用户ID匹配)

  • 响应:

    • 状态码,errmsg
    • 如果是接口测试脚本,需要断言响应报文中的订单数据,与数据库中订单表中的订单数量一致。

业务流程的测试脚本

  • 将业务流程中的所有单接口的脚本组装在一起
  • 注意所有的脚本组装在一起时,数据是否一致

image-20240613083554274

搭建测试环境

性能测试环境的特点:

  • 独占性
  • 尽量保持性能测试环境与真实生产环境的一致性。
    • 硬件环境
      • 包括服务器环境、网络环境等。
    • 软件环境
      • 版本一致性:包括操作系统、数据库、被测应用程序、第三方软件等。
      • 配置一致性:包括操作系统、数据库、被测应用程序、第三方软件等。
    • 使用场景的一致性
      • 基础业务数据的的一致性
      • 业务操作模式的一致性:尽量模拟真实场景下用户的使用情况。

构造性能测试数据:

目的:压测环境中的数据量尽量与生产环境中的数量一致

方法:为了快速创建大量数据,可以直接操作数据库进行添加。

  • 准备插入数据的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()

image-20240613215250768

执行测试脚本

性能测试脚本执行

登录脚本

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()

image-20240613224818035

2、修改脚本

  • 使用random函数,来保证每次运行登录时,使用不同的用户名进行登录

image-20240614081616406

3、监控性能指标

  • 系统指标:响应时间、吞吐量、错误率、并发数

    • 聚合报告

    image-20240614082529444

  • 资源指标:CPU、内存、磁盘、网络

    • PerfMon

image-20240614082447345

4、模拟并发

如果系统之前进行过性能测试,直接模拟TPS20的场景,进行性能测试,并监控指标

如果系统之前未进行过性能测试,安装负载测试的原则,逐步增加负载量,观察性能的指标—采用该方法。

执行

  • 模拟5个用户并发,观察吞吐量TPS和响应时间

结果分析:

  • 用例要求登录TPS为20,要求响应时间不超过3s
  • 实际执行登录TPS为20.3(达到要求),实际执行的响应时间为244ms(达到要求),因此用例通过。

image-20240614083956963

补充:

  • 当前用例测试时CPU利用率为98%,内存利用率为85.62%,超出正常的范围

    • 如果在公司进行性能测试时,该用例不能算通过,因为资源使用率也是一个重要指标

    • 在课上由于虚拟机资源不足,暂时不关注资源使用率

image-20240614084202086

进入首页脚本:

模拟5个并发:

  • 实际TPS未达到要求TPS100,实际响应时间(1)未超过要求实际5s,无法证明是否存在BUG,需要进一步增加负载量。

image-20240614084526079

模拟30个用户并发:

  • 实际TPS未达到要求TPS100,实际响应时间(10s)未超过要求实际5s,说明用例测试不通过,需
    要提交bug

image-20240614084809837

添加购物车-查看购物车-商品结算-下订单-查看订单脚本;

加入购物车脚本

1、数据准备工作

(1)修改待添加的商品库存为足够大,避免在性能测试过程中把商品库存耗尽导致脚本失败

update litemall_goods_product set number='1000000000' where id=2

2、脚本修改

(1)可以使用随机用户登录,并添加购物车吗?

image-20240614090613548

3、运行并分析结果

模拟5个用户并发:

  • 实际TPS41.9达到要求TPS20,实际响应时间59ms未超过要求响应时间3S,用例测试通过

结算并下订单脚本

修改测试脚本:

  • 设置计数器

image-20240614214218313

  • 修改HTTP请求登录:

image-20240614214340431

  • 修改HTTP请求下订单:

image-20240614214507229

执行测试脚本:

模拟5个用户并发

  • 实际TPS为29.5达到要求TPS10,实际响应时间为19ms(不超过要求3s),用例测试通过

image-20240614215112946

业务流程的测试

步骤:

  • 准备测试数据
  • 修改脚本
    • 添加事务控制器,并把所有的脚本放入到事务控制器中

image-20240614220204125

  • 添加性能监控
  • 并发执行并分析结果

image-20240614220329998

注意:

  • 在进行业务流程的脚本性能测试时,前提必须保证该业务流程中所有的单接口性能测试结果都达标

稳定性测试

稳定性用例设计:

  • 确定出稳定运行的所有业务操作:(同时运行)
  • 根据运营数据,分析出每个业务操作对应的虚拟用户数

image-20240614220722651

稳定性测试执行

  • 所有的脚本同时执行(接触前后依赖)
  • 每个脚本都是一个事务/业务—事务控制器
  • 按照要求设置虚拟用户数和运行时间
  • 执行稳定性测试并监控

image-20240614221714154

补充:

  • 如果单个接口/业务流程还存在性能bug,需要再修复性能bug,再进行稳定性测试

性能测试分析和调优

性能调优的步骤:

1.确定问题:根据性能监控的数据和性能分析的结果,确定性能存在的问题(要求)

2.确定原因:确定了问题之后,对问题进行分析,找出问题产生的原因

3.给出解决方案:确定调整目标和解决方案(改服务器参数配置/增加硬件资源配置/修改代码)

4.验证问题:按照给出的解决方案,重新进行测试

5.分析调优结果:分析出问题的性能指标是否有提升,关注其他指标未下降

注意:性能测试调优并不是一次完成的过程,针对同一性能问题,上面的五步可能要经过多次循环才能最终完成性能调优的目标(即:测试发现问题-找原因-调整-验证-分析-再测试。。)

性能问题产生的原因分析

在实际的性能测试中,会遇到各种各样的问题,比如TPS压不上去,导致这种现象的原因很多,作为测试人员应配合开发人员进行分析尽快找出瓶颈的所在。

image-20240616143452596

硬件服务器资源指标:

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

image-20240616150333844

测试关注点

  • 当CPU使用率高时,确定是用户CPU高,还是系统CPU高
  • 如果是用户CPU高,说明某个软件程序的CPU资源占用率高,需要定位代码程序运行的效率
  • 如果是系统CPU高,同步观察是否是其他资源(磁盘IO、内存、网络等)不足。

3、内存和虚拟内存

内存:又称主存储器/物理内存,计算机中所有程序的运行都在内存中进行

虚拟内存:是计算机系统内存管理的一种技术,当计算器内存不足时,可以使用虚拟内存进行补偿。

  • 在程序运行时,可以将程序的一部分装入内存,而将其余部分留在外存(磁盘),就可以启动程序来执行。
  • 在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。
  • 同时,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息
  • 这样,系统好像为用户提供了一个比实际内存大得多的存储器,称为虚拟内存。

命令:

  • 查看总量:top
  • 查看虚拟内存的使用量:vmstat

image-20240616152458317

测试关注点

  • 实际内存:查看内存使用百分比,检查是否超过80%
  • 虚拟内存:查看swap的si和so是否为0,如果不为0,说明内存可能不足。

4、磁盘IO

磁盘IO瓶颈:影响性能的时磁盘的读写速度(Input和Output速率),不是磁盘大小。

查看磁盘IO使用的命令:iostat -x 11

image-20240616203109227

  • %iowait:CPU等待输入输出完成时间的百分比
  • %util:表示一秒钟有百分之多少的时间用于I/O

测试关注点

  • 如果%iowait高,说明磁盘IO传输数据的任务很多,在等待,说明磁盘传输速度不足,存在瓶颈
  • 如果%util高,说明磁盘长时间占用CPU在发送数据,说明磁盘传输速度不足,存在瓶颈。

5、网络

网络瓶颈:影响性能的是网络的传输速度,与网络的总带宽进行对比,接近总带宽,说明网络存在瓶颈。

查看网络使用的命令:sar -n DEV 1 2

image-20240616203905090

  • 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 参数名=值

设置完成,并运行脚本抓取到慢查询的日志信息为:

image-20240617085356457

测试关注点:

  • 基于当前记录下来的慢查询sql进行进一步的分析,判断是否存在问题,需要修改。

2、数据库连接池

数据库连接池:事先建立好连接,当程序请求sql执行时,直接分配空闲连接,使用完成后释放连接。节省了SQL语句执行前后连接的建立和关闭的时间。

作用:可以提高对数据库操作的性能

工作原理:

image-20240617090734757

查看方法:

  • 最大连接数: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

image-20240617221319816

  • kill pid:如果锁死,先手动杀死死锁的连接

Java应用瓶颈分析—JVM内存

JVM(JAVA Virtual Machine)JAVA虚拟机管理JAVA程序运行时,所管理的内存

  • 堆内存:存储动态数据,创建对象时申请的空间。给程序员使用
  • 非堆内存:存储静态数据。共JVM运行使用。

image-20240617222632043

image-20240617222735051

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

image-20240618081449962

4、点击主机IP,右键点击“添加JMX连接”,并设置JVM监控的端口

image-20240618081619177

5、点击IP+Port,右边选择“监视”,可以查看JVM内存的实际使用情况

image-20240618081722276

压测机

  • 压测机影响性能测试结果的原因主要是:

    • Jmeter单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会导致TPS压不上去
  • 监控的方法:

    • windows压测机——任务管理器
    • linux压测机——PerFMon 或者top命令
  • 解决方法:

    • 添加资源
    • 添加多台压测机,进行分布式测试

性能调优案例

案例1——获取首页数据(CPU高)

场景描述:进入首页后,加载首页的相关数据,包括:轮播图、频道、优惠券、团购专区

品牌商直供、新品首发、热卖商品、专题精选等数据。

测试结果数据

image-20240618082917729

分析过程

  • 每发送一个HTTP请求,需要查询27个SQL语句,当TPS为100时,每秒要处理2700个SQL语句。

解决方案

  • 增加CPU
  • 通过分批次、异步加载的方式,第一次进入首页时只加载第一屏的内容,下拉时再加载后续的数据

案例2——查看商品详情(网络)

场景描述

  • 进入商品详情页面时,加载商品的详细信息

测试结果数据

image-20240618084125347

原因

  • 已使用的网络带宽已接近于总带宽

解决方案

  • 增加网络带宽
  • 减少进入商品详情页时的数据请求量

案例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有大量重复

本案例解决方案

image-20240618084925610

案例4——JVM内存溢出

场景描述

  • 请求测试接口(wx/index/oom),模拟内存溢出

测试结果数据

image-20240618085248038

解决方案

开发定位出泄露的点,修改代码。

性能测试报告

测试报告核心内容:

1、测试过程回顾——测试目的、测试范围、测试环境、测试使用的工具

2、测试问题记录及结果分析——性能测试过程中遇到的问题,分析过程和解决方案

3、测试结论

4、经验总结和教训

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/719016.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【挑战100天首通《谷粒商城》】-【第一天】06、环境-使用vagrant快速创建linux虚拟机

文章目录 课程介绍1、安装 linux 虚拟机2、安装 VirtualBoxStage 1&#xff1a;开启CPU虚拟化Stage 2&#xff1a;下载 VirtualBoxStage 2&#xff1a;安装 VirtualBoxStage 4&#xff1a;安装 VagrantStage 4-1&#xff1a;Vagrant 下载Stage 4-2&#xff1a;Vagrant 安装Stag…

如何确保pcdn的稳定性?(壹)

确保PCDN的稳定性是一个重要任务&#xff0c;涉及多个方面的操作和考虑。以下是一些建议&#xff0c;帮助你确保PCDN的稳定性&#xff1a; 一&#xff0e;选择合适的服务器与硬件&#xff1a; 选择稳定可靠的服务器供应商和硬件设备&#xff0c;确保服务器具有高可用性和容错…

图说设计模式:单例模式

更多C学习笔记&#xff0c;关注 wx公众号&#xff1a;cpp读书笔记 5. 单例模式 单例模式 模式动机模式定义模式结构时序图代码分析模式分析实例优点缺点适用环境模式应用模式扩展总结 5.1. 模式动机 对于系统中的某些类来说&#xff0c;只有一个实例很重要&#xff0c;例如…

我在高职教STM32——GPIO入门之蜂鸣器

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

聚四氟乙烯离心管 四氟反应管 消解管 PTFE螺口带盖管 特氟龙试管

一、产品介绍 样品悬浮液盛放在管状试样容器中&#xff0c;在离心机的高速旋转下&#xff0c;由于巨大的离心力作用&#xff0c;使悬浮的微小颗粒 以一定的速度沉降&#xff0c;从而与溶液得以分离。这种带密封盖或压盖的管状试样容器&#xff0c;就是离心管。 PTFE离心管&…

《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()

观前提示&#xff1a;函数完整代码在文末&#xff0c;本文梳理了函数HAL_RCC_OscConfig()的主要逻辑和实现方法f105时钟树详解图 HAL_RCC_OscConfig() 函数介绍&#xff1a; 此函数是一个用于初始化RCC&#xff08;Reset and Clock Control&#xff09;振荡器&#xff08;Osc…

【ArcGIS微课1000例】0120:ArcGIS批量修改符号的样式(轮廓)

ArcGIS可以批量修改符号的样式,如样式、填充颜色、轮廓等等。 文章目录 一、加载实验数据二、土地利用符号化三、批量修改符号样式四、注意事项一、加载实验数据 订阅专栏后,从私信查收专栏配套的完整实验数据包,打开0120.rar中的土地利用数据,如下图所示: 查看属性表: …

全光万兆时代来临:信而泰如何推动F5G-A(50PONFTTR)技术发展

技术背景 F5G-A&#xff08;Fifth Generation Fixed Network-Advanced&#xff0c;第五代固定网络接入&#xff09;是固定网络技术的一次重大升级&#xff0c;代表了光纤网络技术的最新发展。F5G-A旨在提供更高的带宽、更低的延迟、更可靠的连接以及更广泛的应用场景。 F5G-A六…

ORION Space Scene Generation Framework

ORION太空场景生成框架是一个涵盖所有太空场景生成方面的系统,从程序化的行星和宇宙飞船到任何相关的特效,支持所有管道。 重要提示!!!:ORION资产可以从Sky Master ULTIMATE升级,从而可以与Sky Master ULTIMATE的全容积行星云和大气效果相结合,最适合在云层中飞行。 这…

HTML静态网页成品作业(HTML+CSS)——美食火锅介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

springboot知识点大全

文章目录 LombokLombok介绍Lombok常用注解Lombok应用实例代码实现idea安装lombok插件 Spring InitializrSpring Initializr介绍Spring Initializr使用演示需求说明方式1: IDEA创建方式2: start.spring.io创建 注意事项和说明 yaml语法yaml介绍使用文档yaml基本语法数据类型字面…

rk3568 适配WiFi模组(四)

rk3568 适配WiFi模组(Pcie+USB) 本篇文章简单讲解由Pcie+USB组成WiFi模组在rk3568 Android12适配过程。RTL8822CE是Realtek推出的一款802.11ac WiFi +蓝牙5.0组合模块。PCI Express(Peripheral Component Interconnect Express)总线WiFi,USB(Universal Serial Bus)连接蓝…

搜索与人工智能相结合如何解决企业数据问题?

作者&#xff1a;来自 Elastic Fermi Fang 企业数据是好处还是负担&#xff1f; 组织正被数据淹没 —— 从安全事件日志和应用程序错误消息到物联网指标和帮助中心常见问题解答。这些丰富的信息通常存在于孤立的孤岛中&#xff0c;在整合这些信息以提升客户体验、提高运营弹性…

关于html简单的学习和链接博客

HTML&#xff08;超文本标记语言&#xff09;是用于创建网页的标准标记语言。它通过使用一系列元素和标记来定义网页的结构和布局。这些元素用于表示标题、段落、链接、图像、列表和网页上各种其他类型的内容。HTML是网络的基础&#xff0c;是创建和设计网站的关键。 下面简单…

第十七课,海龟画图习题课(一)

图案一&#xff0c;半圆 import turtleturtle.circle(50, 180)turtle.left(90)turtle.forward(100) 图案二&#xff0c;同心圆 import turtleturtle.circle(100)turtle.right(90)turtle.penup()turtle.forward(50)turtle.pendown()turtle.left(90)turtle.circle(150) 图案三&am…

MYSQL部分术语及原理解释(缓冲池、LRU、redo log buffer、WAL、Checkpoint、LSN)

文章目录 一、缓冲池 Buffer Pool二、 LRU List、Free List、Flush List三、 重做日志缓存redo log buffer四、WAL与Checkpoint五、LSN 总结来自《MySQL技术内幕 InnoDB存储引擎》 第二版 一、缓冲池 Buffer Pool InnoDB存储引擎的MySQL是基于磁盘的数据库系统。缓冲池是一片内…

Ubuntu与RedHat Linux的不同

部署Ubuntu 安装在服务器上的系统一般追求极致的稳定&#xff0c;所以安装系统时为了避免潜在的问题&#xff0c;所以选的时候应该往后推选几个版本 首先因为现在使用的电脑是MacBook&#xff0c;还是最新的Mac所以在部署的时候要注意其安装的支持芯片架构&#xff08;最新的…

事务所管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;客户管理&#xff0c;评论管理&#xff0c;基础数据管理&#xff0c;公告信息管理 客户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;律师管理&#xff0…

【Python机器学习实战】----基于AdaBoost分类树模型、梯度提升分类树模型、Bagging分类树模型以及随机森林分类模型对空气质量等级进行预测

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【Redis实战篇】redis的擅长实现的功能

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;小林同学的专栏&#xff1a;JAVA之基础专栏 【Redis实战篇】Redis有可能出现的问题以及如何解决问题_redis实现用户登录可能造成哪些问题-CSDN博客 本文接上面的文章 目录 2.优惠券秒杀 2.1 全局唯一ID 2.…