软件测试的重要一环:「性能测试」怎么做?

性能测试是软件测试中的重要一环,今天给大家介绍性能测试及如何使用RunnerGo完成性能测试任务。

性能测试是什么?

一句话概括:不断地通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡,为开发人员提供消除瓶颈所需的诊断信息。

测试类型:

性能测试中常用的性能有:负载测试、压力测试两种。

负载测试(Load Testing)主要是通过逐渐增加系统负载,如并发用户数、数据量等,来测试系统的性能变化。测试的目的是确定在满足性能指标的情况下,系统所能承受的最大负载量。负载测试通常从较小的负载开始,逐渐增加并发数和数据量,观察并记录不同负载下系统的各项指标,直至系统无法承受而崩溃或服务不可用。

压力测试(Stress Testing)则更侧重于测试系统的限制和故障恢复能力,通常是在超强的、近乎会导致系统崩溃的负荷(如大数据量、大量并发用户等)下进行。这种测试方法旨在观察系统在极限负荷下的性能变化,如CPU利用率、内存使用率、磁盘I/O吞吐率、网络吞吐量等,以及系统是否会出现内存泄漏、功能性故障等问题。压力测试包括稳定性压力测试和破坏性压力测试。稳定性压力测试是在选定的压力值下长时间持续运行,以考察各项性能指标是否在指定范围内;而破坏性压力测试则是通过继续加压的手段,使系统迅速崩溃,以暴露潜在的问题。

不同的测试类型需要配置不同的测试脚本,如我们常用的阶梯压测、高并发的压力测试等等。通过RunnerGo内置的六种压测模式可以满足多种性能测试类型。

图片

性能测试指标:

常见的测试指标:

吞吐量:系统在指定时间内处理多少个信息单元。

响应时间:从用户输入的请求到系统开始响应该请求之间经过的时间量。

带宽:每秒可以在工作负载之间移动的数据量,通常是指通过网络。

每秒 CPU 中断次数:取的是平均值。指处理器每秒接收和处理的硬件中断数。

内存使用:计算机上进程可用的物理内存量。

磁盘使用:磁盘忙于执行读取或写入请求的时间量

确定测试指标:

实际我们在测试时,只要不报错我们关注吞吐量、响应时间就可以了。测试指标需要根据以下两点进行确定:

根据系统在线用户数,来计算生产环境的用户 TPS,通过基准环境的测试,来验证真实的 TPS 是否满足生产环境的 TPS 需求,以及我们的运维架构和资源使用是否合理。

保证在 CPU 利用率小于80%,内存小于80%,并且没有错误的 Http 请求。

并发压力测试tps计算:

在开始计算前需要了解三个概念:

用户数:数据库中的总用户数

在线用户数:登录状态的用户数,挂在系统上,但是不会对系统产生压力=

并发用户数:真正产生操作的用户,产生压力之源

TPS计算公式为:tps=持续时长/总请求数

秒杀活动压测数据计算

假如平台总注册用户数有100w,有10w用户约定好同时对某一接口进行访问,比如1分钟,陆续来访10w用户,那么我们系统并发用户是比实际的10w要小的

那一个秒杀活动开始时,10w用户在10秒内重复请求多次,平均3次每个人,那么tps=100000/10=10000tps,表明我们目标的tps应达到10000才能抗住100000用户的同时请求

领券活动压测

平台注册用户数100w,用10w用户准备抢券,即10w人同时在10秒内访问抢券接口,在过程中每个用户可能会多次点击抢券,估算每个用户点击3次抢券接口,那么

tps=100000*3/10=30000tps,系统的目标tps需达到30000才抗住10w用户的并发访问压力

使用RunnerGo做性能测试:
RunnerGo支持单接口压测和场景压测。并且使用RunnerGo做性能时只需简单几个操作:

单接口压测:

每个接口在测试完成后可以在一键压测处进行单接口压测,同样支持测试模式选择:

图片

场景压测:

RunnerGo可以创建测试场景,在场景的基础上进行场景性能测试,在右侧任务配置栏,根据需求配置控制模式、压测模式并配置并发数即可开始测试。

图片

开始测试:

这里我们使用RunnerGo对单个商品评论接口进行一次阶梯模式的压力测试:

配置如下图:(配置完成后会显示加压梯度图)

图片

测试完成后 RunnerGo会提供可视化图形测试报告,测试人员根据预定的测试指标进行多次调节从而得到 API 请求的实际 TPS 和 RT再与理想中TPS和RT做对比,来确定当前API性能情况。

图片

图片

还可查看debug日志和压力机情况对测试结果进行分析:

图片

除此之外,RunnerGo在进行性能测试时还支持分布式服务器部署、接口权重、服务器权重配置,更好地满足性能测试需求。

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

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

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

Android Audio基础——音频混音线程介绍(十)

MixerThread 是 Android 音频输出的核心部分,主要负责将多个音频流混合成一个输出流,通常用于处理多个音频源(如音乐播放器、语音通话、系统提示音等)的混音操作,混音后的音频数据会被发送到音频硬件(如扬声器或耳机)进行最终输出。大多数 Android 的音频都需要经过 Mix…

Ajax:表单 模板引擎

Ajax&#xff1a;表单 & 模板引擎 form 表单form 属性 Ajax操控表单事件监听阻止默认行为收集表单数据 模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器 原理 form 表单 在HTML中&#xff0c;可以通过<form>创建一个表单&#xff0c;收集用户信息。而采…

B/S架构(Browser/Server)与C/S架构(Client/Server)

基本概念 B/S架构&#xff08;Browser/Server&#xff09;&#xff1a;即浏览器/服务器架构。在这种架构中&#xff0c;用户通过浏览器&#xff08;如Chrome、Firefox、Safari等&#xff09;访问服务器上的应用程序。服务器端负责处理业务逻辑、存储数据等核心功能&#xff0c;…

基于docker 部署redis

1、拉取镜像 docker pull redis:latest如果拉取失败可以尝试下配置镜像源&#xff0c;具体参考如下&#xff0c;目前暂可以使用 Docker切换镜像源-CSDN博客 2、创建配置文件 mkdir /usr/local/redis/conf vim redis.conf bind 0.0.0.0#protected-mode no port 6379 tcp-b…

Fast Simulation of Mass-Spring Systems in Rust 论文阅读

参考资料&#xff1a; Fast Simulation of Mass-Spring Systems in Rust 论文阅读&#xff1a;Fast Simulation of Mass-Spring Systems 【论文精读】讲解刘天添2013年的fast simulation of mass spring system(Projective Dynamics最早的论文) Projective Dynamics笔记(一…

面试经典 150 题 第三周代码

【题目链接】 80. 删除有序数组中的重复项 II 【参考代码】 双指针 class Solution { public:int removeDuplicates(vector<int>& nums) {int size nums.size();if(size < 2){return size;}int slow 2, fast 2;while(fast < size){if(nums[slow-2] ! num…

五:Python学习笔记--基础知识(4)字典常用方法

目录 1. get(key, defaultNone) 返回指定键的值&#xff0c;如果键不存在&#xff0c;则返回默认值 2. keys() 返回字典中所有键的视图。 3. values() 返回字典中所有值的视图。 4. items() 返回字典中所有键值对的视图。 5. update(other_dict) 用另一个字典更新当前字典。…

el-table 表格设置必填项

el-table 表格设置必填项 要在 el-table 中集成 el-form 来设置必填项&#xff0c;并进行表单验证&#xff0c;可以使用 Element UI 提供的表单验证功能。下面是一个详细的示例&#xff0c;展示了如何在 el-table 中使用 el-form 来设置必填项&#xff0c;并进行验证。 示例代…

【C++数学 负进制】1017. 负二进制转换|1697

本文涉及知识点 数学 LeetCode1017. 负二进制转换 给你一个整数 n &#xff0c;以二进制字符串的形式返回该整数的 负二进制&#xff08;base -2&#xff09;表示。 注意&#xff0c;除非字符串就是 “0”&#xff0c;否则返回的字符串中不能含有前导零。 示例 1&#xff1a…

avue-crud组件,输入框回车搜索问题

crud组件&#xff0c;输入框回车搜索问题。 文档是并没有标注&#xff0c;实际上已经具备此功能。 需要在curd的option增加属性 searchEnter: true 即可实现输入内容后回车搜索。 avue的一些踩坑记录 - 前端小小菜 - 博客园

【编程语言】Kotlin快速入门 - 伴生对象与懒加载

静态与顶层方法 静态方法&#xff08;伴生对象&#xff09; Java中有静态方法的概念&#xff0c;但是在Kotlin中这个静态方法被弱化了&#xff0c;还记得我们使用object创建一个单例类吗&#xff0c;创建的单例类我们当时可以使用像静态方法一样的调用方式取调用&#xff0c;…

可训练的YOLO距离检测

由于很多场景需要测距&#xff0c;而深度图、点云等获取、配准、融合困难&#xff0c;尝试直接在目标增加距离标注进行训练&#xff0c;理论上标注准确&#xff0c;数据集够&#xff0c;就可以实现。 目前已经跑通YOLO增加距离训练&#xff1a; 目前准度不够&#xff0c;仅将…

零七生活API-文字转语音API使用示例

//官网地址&#xff1a;零七生活API - 提供免费接口调用平台function getAud(){axios({method: get,url: https://api.oick.cn/api/txt?text你好&spd5&apikeyyourApikey,responseType: blob, // 确保 axios 处理为二进制数据}).then((response) > {// 将 Blob 转换…

Flutter Image和Text图文组件实战案例

In this section, we’ll go through the process of building a user interface that showcases a product using the Text and Image widgets. We’ll follow Flutter’s best practices to ensure a clean and effective UI structure. 在本节中&#xff0c;我们将使用“Te…

k8s 查看 Secrets 的内容和详细信息

在 Kubernetes 中&#xff0c;您可以使用以下命令查看 Secrets 的内容和详细信息&#xff1a; 列出所有 Secrets 要列出指定命名空间中的所有 Secrets&#xff0c;可以使用以下命令&#xff1a; kubectl get secrets -n <namespace>替换 为您要查询的命名空间&#xff…

JVM 实战篇(一万字)

此笔记来至于 黑马程序员 内存调优 内存溢出和内存泄漏 内存泄漏&#xff08;memory leak&#xff09;&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在 GC ROOT 的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内…

鸿蒙next之导航组件跳转携带参数

官方文档推荐使用导航组件的形式进行页面管理&#xff0c;官方文档看了半天也没搞明白&#xff0c;查了各种文档才弄清楚。以下是具体实现方法&#xff1a; 在src/main/resources/base/profile下新建router_map.json文件 里边存放的是导航组件 {"routerMap" : [{&q…

从汇编角度看C/C++函数指针与函数的调用差异

函数指针本质上是一个指针变量&#xff0c;只不过这个变量保存的地址是一个函数的地址&#xff0c;那么直接调用函数和通过函数指针调用有没有区别呢&#xff1f;答案是有的&#xff0c;下面的代码是一个直接调用函数和通过指针调用函数的例子&#xff0c;使用gdb反汇编main函数…

vue开发的时候,目录名、文件名、函数名、变量名、数据库字段等命名规范

在Vue开发中&#xff0c;函数名、文件名、目录名、变量名、数据库字段名的命名规范各有其特点&#xff0c;以下是根据Vue及JavaScript的命名习惯进行的详细解答&#xff1a; 分析 目录名 通常使用kebab-case&#xff08;短横线命名法&#xff09;&#xff0c;全部小写&#x…

AIGC底层技术揭秘

随着人工智能技术的发展&#xff0c;AI生成内容&#xff08;Artificial Intelligence Generated Content&#xff0c;简称AIGC&#xff09;正在逐渐改变我们的生活。从自动生成的文章、图片到音乐和视频&#xff0c;AIGC正在成为内容创造的新引擎。本文将深入探讨支撑AIGC技术的…