分享一次性能测试过程

在企业中完成性能测试项目是一个挑战性强、技术含量高的任务。本文将分享一个公司完成高性能游戏系统的性能测试过程,展示如何完成一次成功的性能测试项目。

项目背景:这是一家游戏公司,推出了一款新的游戏软件,系统要求高性能、高并发、高可用,为确保用户体验和游戏体验,公司决定在正式上线前对系统进行性能测试。

第一步:定义测试目标

在项目启动之初,团队首先进入到定义测试目标的阶段,据此来确定测试范围、测试手段和测试工具。此阶段重要性不言而喻,目标不明,则结果无从说起。

图片

通过团队讨论,确立了以下的目标:

针对目标场景下的指标进行基准测试,并得到高可用性的性能数据。

评测流量下的异常场景,确定系统多少负载能力及扩展架构。

通过性能测试结果来查找和定位系统的瓶颈,并通过在代码层面进行优化提升系统吞吐量及性能表现。

揭示用户最有可能使用系统的行径模式及环境和业务决策。

第二步:测试计划调研

按照测试目标,测试团队进行测试计划调研。我们将基于应用程序不断压测及观察应用程序的运行状况来判定应用程序的瓶颈,并且对观察结果进行分析和总结,为分析改善提供有力数据支撑。

针对要测的业务模式,我们设计出了4个具有典型意义的场景:

500-10000个并发用户请求。

负载测试,根据实际场景数据模拟用户操作习惯,

容量测试,以应用程序在各个方面的性能和资源限制,并确定系统配置的最大极限。

24小时稳定性测试,保证系统在持续24小时真实环境下的高可用性。

第三步:执行测试计划

通过测试计划调研,我们进行了测试项目将近1个月的时间安排到执行。我们使用了多种工具,应用于不同测试领域,例如LoadRunner、JMeter、Appdynamics、Keynote、Fiddler、Wireshark、Flume等等。在这里不展开程序设计中复杂的使用。

下面是使用JMeter测试的例子,它是一款开源的压力测试工具。它可以对不同种类的服务器、网络协议进行测试。

图片

下面是相关的测试结果:

基准测试:

将系统在低负载环境下按照预定的标准进行性能测试,例如单用户响应时间,服务器负载以及数据库处理能力都是很好的评估指标。测试结果如下所示:

在这里插入图片描述

负载测试:

使用模拟混合负载的测试,在同一时刻模拟大量高并发用户同时访问系统,测试结果如下所示:

在这里插入图片描述

容量测试:

容量测试中使用jMeter模拟出可实现的并发用户访问系统,测试结果如下所示:

在这里插入图片描述

稳定性测试:

保证系统在持续24小时真实环境下的高可用性,测试结果如下所示:

在这里插入图片描述

第四步:测试结果及异常分析

通过以上测试,团队分析性能数据,据此针对性进行优化, 例如通过清理CPU 日志和数据库存储调优等方式进行优化,以提高系统稳定性,优化结果如下所示:

在这里插入图片描述

根据性能测试结果,我们发现系统在负载和容量测试场景下呈现出问题

负载测试:

我们注意到在高负荷下,响应时间开始大幅上升并且响应时间的标准差开始下降。这表明系统正在达到其极限,并可能无法容忍更多的用户。

容量测试:

当我们在大负载下执行测试时,发现系统性能发生了很大的下降。我们发现jMeter本身不能支持如此大量的并发用户访问,我们使用了不同的工具来验证测试结果,我们发现系统极限在28000并发访问量左右。该结果使我们意识到系统还需要在某些方面进一步优化。

第五步:得出结论——性能测试报告

通过各种性能测试方式,团队得出了一个详细的测试报告。该报告概括了测试结果及其优化方案,并包括了性能测试的详细数据、结论和建议,以便游戏开发团队根据测试结果决定是否更改系统架构、代码或参数。最终,该游戏系统在经过不断测试和改进后成功上线,并获得了良好的用户体验。

总结:

该高性能游戏系统性能测试案例中,测试团队首先制定了测试目标,确定测试计划,然后采用不同的测试工具进行测试,为改进系统性能提供了数据支持,并得出了详细的测试报告。测试结果中的异常分析让工程团队能够针对具体的问题进行精细的优化。这一成功性能测试的案例展示出一个优秀公司如何在高压力的环境下验证性能、保证高可用性和安全性,实现巨大价值的过程。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】
在这里插 入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter压测【简单使用】

目录 🧂1.性能指标 🍿2.下载安装 🥞3.压测 1.创建线程组 2.设置要模拟的数据 3.设置压测http 4.设置要压测的具体路径 5.查看 1.性能指标 响应时间(Response Time: RT)响应时间指用户从客户端发起一个请求开始,到客…

SPI总线知识总结

1 SPI的时钟极性CPOL和时钟相位CPHA的设置 1.1 SPI数据传输位数 SPI传输数据过程中总是先发送或接收高字节数据,每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据,在发送前必须左对齐,如果接收的数据小于16位,则采用软…

HI3516DV500 HI3516DRFCV500 HI3516DRBCV500 海思安防监控芯片 提供原厂开发包

总体介绍 Hi3516DV500是一颗面向视觉行业推出的高 清智能SoC。该芯片最高支持2路sensor输入,支持最高5M30fps的ISP图像处理能力,支持2F WDR、多级降噪、六轴防抖、多光谱融合等多种 传统图像增强和处理算法,支持通过AI算法对输 入图像进行实…

【Java EE 】认识文件与Java文件操作

目录 🍀认识文件🌸树型结构组织 和 目录🌸文件路径(Path)🌸其他知识 🌳Java 中操作文件🌸File 概述🌻属性🌻构造方法🌻方法 🌸代码示例…

代码随想录算法训练营第22天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

目录 一、力扣235.二叉搜索树的最近公共祖先1.1 题目1.2 思路1.3 代码 二、力扣701.二叉搜索树中的插入操作2.1 题目2.2 思路2.3 代码 三、力扣450.删除二叉搜索树中的节点3.1 题目3.2 思路3.3 代码3.4 总结 一、力扣235.二叉搜索树的最近公共祖先 1.1 题目 1.2 思路 利用二叉…

(二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布

前言 本节内容会介绍如何使用Docker Pipeline插件实现docker项目的pipeline流水线项目的可持续化集成发布,在开始本节内容之前,我们要先搭建好docker环境,以及镜像本地存储仓库docker harbor,关于docker和docker harbor的安装,可查看作者往期博客内容。 正文 ①安装Doc…

maven打包失败 Cannot create resource output directory[已解决]

文章目录 前言1.打开资源管理器(ctrlAltdelete打开任务管理器)2. 选择性能,再选择打开资源监视器3. 搜索“target”4. 我这里示范操作输入的perfmon,显示perfmon.exe占用的,右键结束这个进程 。5.然后重新用package打包…

C++之queue和deque

1、queue queue(队列),一种数据结构,可以让某些数据结构的操作变得简单。队列(queue)最大的特点就是先进先出。就是说先放入queue容器的元素一定是要先出队列之后,比它后进入队列的元素才能够出…

MySQL 多表查询 连接查询 自连接

介绍 自连接查询,可以是内连接查询,也可以是外连接查询,一句话自己连接自己,一个表当作两个表进行连接。 语法 SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件两个表A说明是同一张表,但是别名不同 案例…

【pyinstaller打包记录】程序使用多进程,打包后,程序陷入死循环

简介 PyInstaller 是一个用于将 Python 程序打包成可执行文件(可执行程序)的工具。它能够将 Python 代码和其相关的依赖项(包括 Python 解释器、依赖的模块、库文件等)打包成一个独立的可执行文件,方便在不同环境中运行…

websocket在java中的使用教程

本文从websocket服务端和客户端两个方面简单介绍下websocket在java中的使用。 一、websocket服务端(WebSocketServer) websocket服务端是以本机作为消息的接受端,用于接受客户端websocket发送过来的消息,并可以通过客户端的webs…

Cesium 自定义Primitive - 圆

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点,生成圆 3、方便后期绘制圆 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomCirclePrimitive类,并加入更新的代码 export default class CustomCirclePrimitive …