性能测试项目实战

news2024/10/7 16:17:20

项目介绍和部署

项目背景

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

项目功能架构

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

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

项目技术架构

前端: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、经验总结和教训

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot实现药店管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现药店管理系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数…

wireshark使用情况与网口调试记录

wireshark使用情况与网口调试记录 前言wireshark无法获取本地数据方法一——Npcap方法二——WinPcap效果 UDP组播&#xff0c;却一直捕获到127.0.0.1总结 前言 在网口调试中&#xff0c;wireshark使用较多&#xff0c;常出现一些无法捕获或者ip获取数据不正确的情况&#xff0…

webpack工作流程

webpack工作流程 初始化参数&#xff1a;从配置文件和 Shell 语句中读取并合并参数,得出最终的配置对象用上一步得到的参数初始化 Compiler 对象加载所有配置的插件执行对象的 run 方法开始执行编译根据配置中的entry找出入口文件从入口文件出发,调用所有配置的Loader对模块进…

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

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

openGauss 6.0一主二备高可用架构部署,可靠很行

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

支撑每秒 600 万订单无压力,SpringBoot + Disruptor 太猛了!

一、背景 工作中遇到项目使用Disruptor做消息队列,对你没看错,不是Kafka,也不是rabbitmq;Disruptor有个最大的优点就是快,还有一点它是开源的哦,下面做个简单的记录. 二、Disruptor介绍 Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列&#xff0c;研发的初衷是解决内存…

软银与AI初创公司Perplexity达成合作;OpenAI或将改变治理结构,考虑成立营利性公司

&#x1f989; AI新闻 &#x1f680; 软银与AI初创公司Perplexity达成合作 摘要&#xff1a;6月17日消息&#xff0c;日本软银宣布与AI初创公司Perplexity达成战略合作&#xff0c;将于6月19日起向Softbank、Y-Mobile和LINEMO用户开放Perplexity Pro一年的免费试用申请。Perp…

Einops 张量操作快速入门

张量&#xff0c;即多维数组&#xff0c;是现代机器学习框架的支柱。操纵这些张量可能会变得冗长且难以阅读&#xff0c;尤其是在处理高维数据时。Einops 使用简洁的符号简化了这些操作。 Einops &#xff08;Einstein-Inspired Notation for operations&#xff09;&#xff…

CentOS 7 下gdb任意版本的升级

文章目录 前言查看gdb版本升级步骤 小结 前言 在做项目的过程中&#xff0c;遇到了难缠的bug&#xff0c;使用gdb调试的时候&#xff0c;bt调用堆栈看的一震头疼&#xff0c;于是就想起把gdb升级一下 当前环境&#xff1a;Centos7&#xff0c;gdb&#xff1a;7.6 稍微好看了那…

SpringCloudStream原理和深入使用

简单概述 Spring Cloud Stream是一个用于构建与共享消息传递系统连接的高度可扩展的事件驱动型微服务的框架。 应用程序通过inputs或outputs来与Spring Cloud Stream中binder对象交互&#xff0c;binder对象负责与消息中间件交互。也就是说&#xff1a;Spring Cloud Stream能…

AI工具快速制作爆火的影视视频混剪

今天给大家发一个有意思的工具&#xff0c;影视混剪大家应该都刷到过&#xff0c;像下面这种视频&#xff0c;播放量都超级高。 这种视频都是怎么做的呢&#xff1f; 现在AI工具这么多样性&#xff0c;先用 AI 写一段具有网感的对话段子&#xff0c;然后找影视剧片段混剪成一…

笑脸金融测试社招面经,期望20K

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 测试总监一面 1、问一些测试理论相关的知识。 自我介绍、质量模型 2、登录如何设计测试用例。 3、给你一个东西你会从哪些方面去考虑设计测试用…

【数据结构初阶】--- 堆的应用:topk

堆的功能&#xff1a;topk 为什么使用topk 先举个例子&#xff0c;假如说全国有十万家奶茶店&#xff0c;我现在想找到评分前十的店铺&#xff0c;现在应该怎么实现&#xff1f; 第一想法当然是排序&#xff0c;由大到小排序好&#xff0c;前十就能拿到了。这是一种方法&…

2024 年最新 Python 基于 LangChain 框架基础案例详细教程(更新中)

LangChain 框架搭建 安装 langchain pip install langchain -i https://mirrors.aliyun.com/pypi/simple/安装 langchain-openai pip install langchain-openai -i https://mirrors.aliyun.com/pypi/simple/ChatOpenAI 配置环境变量 环境变量 OPENAI_API_KEYOpenAI API 密钥…

在IDEA 2024.1.3 (Community Edition)中创建Maven项目

本篇博客承继自博客Windows系统Maven下载安装-CSDN博客 Maven版本&#xff1a;maven-3.9.5 修改设置&#xff1a; 首先先对Idea的Maven依赖进行设置&#xff1b;打开Idea&#xff0c;选择“Costomize”&#xff0c;选择最下边的"All settings" 之后找到Maven选项&…

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

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

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 03:强化你的子系统

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

【面试干货】常见的编译时异常(运行时异常)及其处理

【面试干货】常见的编译时异常&#xff08;运行时异常&#xff09;及其处理 1、SQLException2、IOException3、FileNotFoundException4、ClassNotFoundException5、EOFException6、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Jav…

电能表厂家的研发能力是实力的体现

电能表厂家的研发能力无疑是其整体实力的核心体现。一个拥有强大研发能力的电能表厂家&#xff0c;不仅能够持续推出具有竞争力的新产品&#xff0c;满足市场需求&#xff0c;还能引领行业发展&#xff0c;塑造企业品牌形象。 一、研发能力对电能表厂家的重要性 研发能力是电…

图纸管理的方法、图纸管理软件

图纸管理是一个复杂且关键的过程&#xff0c;它涉及到图纸的创建、存储、共享、修改、审核、存档和检索等多个环节。以下是根据参考文章总结的图纸管理的具体内容和方法&#xff1a; 一、图纸管理的目的 1、确保图纸的准确性&#xff1a;通过规范的管理流程和质量控制措施&…