面试必知的9个性能测试指标,你完全了解吗?

37

28

2022-11

今天距2023年35天

ITester软件测试小栈第437次推文

点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 09:00准时推送,每月不定期赠送技术书籍

微信公众号后台回复“资源”、“测试工具包”领取测试资源,回复“微信交流群”、“内推群”一起进群打怪。

本文2546字,阅读约需7分钟

Hi,大家好,我是CoCo。今天给大家分享一波面试中经常被问到性能指标,希望能帮助大家,建议收藏~

1

吞吐量

单位时间内,系统能够处理多少请求,吞吐量代表网络的流量,TPS越高,吞吐量越大,还包含了数据的吞吐量。一般单位为秒,每秒处理的请求量。

注意:我们看到的JMeter聚合报告一般如下图,下表中的吞吐量实际是我们文中说的TPS或者QPS。如果要计算吞吐量的话应该是接收+发送网络流量总和。

性能测试的时候关注吞吐量和测试环境网络带宽之间的关系,如果吞吐量接近或者等于测试环境带宽极限,那么很可能存在网络瓶颈。

2

TPS

TPS的全称是Transaction Per Second,即每秒处理的事务数,那什么是事务呢?

如:用户操作伴随着数据的变更,【下单---->支付——一个请求会有多个操作】;如:11.11用淘宝下单,产生订单数据【40W订单/每秒】。

衡量一个系统性能的好坏,主要看的是单位时间内,系统可以处理多少业务量。

举个电商的例子:

1)假设要测试“下单”,那么“下单”业务就可看做是一个事务;

2)假设需要测试“添加购物车+下单”整体业务,那么“添加购物车”和“下单”这2个业务就组成了一个事务,此时TPS就是每秒处理“添加购物车+下单”这个一整个事务的数量。

响应时间单位为秒的情况下,TPS = 1/响应时间*并发数。

  • 一般情况下采用二八原则去计算,80%的交易发生在20%的时间去处理。如:一天10000笔,TPS = (10000* 80%=8000笔)/(24*60*60*20%)。
  • 10000笔交易,上午2小时,下午2个小时,TPS = 10000*/4*60*60。

在系统达到瓶颈之前,TPS和并发数成正比关系。

3

QPS

QPS = 并发数/响应时间,QPS的全称叫Request Per Second。字面意思比较好理解,就是每秒处理的请求数(如:用户查询数据【打开某个页面】,打开淘宝某个商品页面的时候),并没有去做数据的修改,只是把数据加载到页面中。

如果是测试单接口的情况下,TPS=QPS,例如上面电商例子中的第1)个场景。

4

TOP响应时间

响应时间,Rsponse Time,从用户的角度来讲,就是用起来快不快。

一个请求从用户发起,到收到服务器响应,所需的时间:

  • 页面打开响应的时间;
  • 具体单个资源的响应时间。

一个请求的响应时间由以下几部分时间构成,响应时间=网络传输的总时间+各组件业务处理时间。

TOP响应时间是将所有请求的响应时间先从大到小进行排序,计算指定比例的请求都是小于某个时间。

该指标统计的是大多数请求的耗时,用JMeter进行测试通常看到下面几个数据:

  • Top90(90%响应时间):90%的请求耗时都低于某个响应时间;
  • Top95(95%响应时间):95%的请求耗时都低于某个响应时间;
  • Top99(99%响应时间):99%的请求耗时都低于某个响应时间;

5

平均响应时间

平均响应时间=所有请求的平均耗时=ART(Average Response Time)。

6

并发数/虚拟用户数

即并发处理能力,压测工具中设置的并发线程/进程数量,海量用户使用系统,在系统不崩溃情况下,能够支撑多少人同时使用。可以理解为每秒/毫秒可以处理多少并发。

7

资源占用率

2个App,功能都一样,都是用来做“图片美颜”,我们来判断下,哪个App的性能好。

  • 第一个App能够运行在5年前的手机上,2GB运行内存,需要内存资源少。
  • 第二个App只能够运行在3年前的手机上,4GB运行内存,需要内存资源更多。

我们可以看出,第一个App所需要的运行内存更小,占用的内存资源更少,而第二个App需要的运行内存是更大的,以及内存资源更多,只能在三年的手机运行,5年前的是运行不了,所以是第一个App相对于与第二个App来说,第一个App性能是更加好的。

性能好一些,对我们实际有什么帮助呢?

假设我们在开发一款应用,有1000使用用户:

  • 500w用户——3年内的新手机(运行内存4G)
  • 500w用户——5年前的老手机(运行内存2G)

如我们开发时没有考虑到老手机运行内存的问题,只可以运行在新手机上,那就意味着50%,500w的老手机的用户是正常使用不了的,如我们所设计时考虑到了,性能足够的好,新、老手机都可使用,那就是100%的用户是都可以正常使用的。

8

成功率

请求的成功率,一般执行压测后我们会关注请求或者事务的成功率是多少,一般公司可能要求成功率在99.99%以上。

9

PV/UV

  • PV(Page View)页面/接口的访问量;
  • UV(Unique Visitor)页面/接口的每日唯一访客。

PV/UV的概念好像也是常在电商中出现,一般可能是在性能需求分析的时候提到,比如某页面每日的PV是多少,UV是多少。

以上就是今天的全部内容,希望对大家有所帮助,也希望大家多多留言、点赞、在看、转发四连爱❤️ 支持。 咱们下篇文章见,Bye~?

以上

That‘s all

本文转载于网络 如有侵权请联系删除

相关文章

  • MySQL实现按天分组统计,提供完整日期列表,无数据自动补0

    业务需求 最近要在系统中加个统计功能,要求是按指定日期范围里按天分组统计数据量,并且要能够查看该时间段内每天的数据量。解决思路 直接按数据表日期字段groupby统计,发现如果某天没数据,该日期是不出现的,这不太符合业务需求。百度一番发现方案大致有两种:一是新建日期列表,把未来10年的日期放进去,然后再跟统计表作连接查询;二是用程序代码在SQL逻辑中union多个连续日期查询。都比较繁琐。 参考Oracle的“selectlevelfromdualconnectbylevel<31”的实现思路: 1、先用一个查询把指定日期范围的日期列表搞出来SELECT   @cdate:=date_add(@cdate,interval-1day)asdate_str,0asdate_count FROM(SELECT@cdate:=date_add(CURDATE(),interval+1day)fromt_table1)t12、业务统计查询也按上述日期查询给统计日期和数量设置别名SELECT   FROM_UNIXTIME(m.sdate,'%Y-%m-%d')asda

  • 基于mimeTex的数学公式WebService的部署和实现

    通过Latex语法,实现生成数学公式的解决方案也很多。这里介绍一种方法,使用开源的mimeTex。该项目的官网地址如下: http://www.forkosh.com/mimetex.html 网站主页有一个声明。如果你的服务器上已经安装了latex,那么推荐使用mathTex,因为mathTex基于真正的Latex,并且显示的图像质量高于mimeTex。但是mathTex只能在Linux环境部署,并且需要已安装了latex才行。而mimeTex则可以在Linux和Windows下都部署,并且不需要安装latex。在Linux下的部署方式首先,需要安装Apache等服务器,并且配置好cgi环境。不熟悉的点这里。 接下来,下载mimetex.zip下载地址如下:http://www.forkosh.com/mimetex.zip 下载完毕后,解压缩。 unzipmimetex.zip-dmimetex然后编译cc-DAAmimetex.cgifsave.c-lm-omimetex.cgi然后可以看到生成了一个mimietex.cgi文件 可以先测试一下这个文件,运行命令 ./mimete

  • vue H5项目:利用vant ui二次封装的选择月份的日历组件

    因为vant里面只有选择天数的日历没有选择月份的,所以我自己又封装了一个组件。上代码: 这是封装的子组件:<template> <div> <div@click="showPopup"> {{yesr}}-<spanv-show="actived<10?true:false">0</span >{{actived}} </div> <van-popup v-model="show" position="top" :style="{height:'50%'}" @click-overlay="close" > <main> <!--选择年--> <divclass="yesr"> <van-iconname="arrow-left"@click="last"/&

  • Mysql资料 索引--索引优化(下)

    最左前缀示范mysql>select*froms1whereid>3andname='egon'andemail='alex333@oldboy.com'andgender='male';Emptyset(0.39sec)mysql>createindexidxons1(id,name,email,gender);#未遵循最左前缀QueryOK,0rowsaffected(15.27sec)Records:0Duplicates:0Warnings:0mysql>select*froms1whereid>3andname='egon'andemail='alex333@oldboy.com'andgender='male';Emptyset(0.43sec)mysql>dropindexidxons1;QueryOK,0rowsaffected(0.16sec)Records:0Duplicates:0Warnings:0mysql

  • ICMP协议详解

    ICMP协议详解 ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 所以我们就需要一种协议来完成这样的功能–ICMP协议。ICMP协议的功能 ICMP协议的功能主要有: 1.确认IP包是否成功到达目标地址 2.通知在发送过程中IP包被丢弃的原因 如下图所示:我们需要注意几点: 1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议 2.ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6ICMP的报文格式 ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。 如下图:字段说明:类型说明 类型占一字节,标识ICMP报文的类型,从类型值来看ICMP报文可以分为两大类。第一类是取值为1

  • K8S之CronJob尝试(参考别人的Demo)

    场景有些服务部署的时候有跑crontab的需求,刚开始的时候是application部署在K8S集群上,然后另开ECS机器跑cron,然后两个task在deploy的时候做联动,这两天抽时间看下基于K8S的CronJob,看看如何实践下 常规操作01创建Dockerfile#https://medium.com/@pandit.summit/kubernetes-cron-job-with-python-image-in-minikube-windows-10-ac33851d573d FROMpython:3.7-alpine RUNaddgroup-Szhuimagroup&&adduser-Szhuima-Gzhuimagroup #createsworkdir WORKDIR/app #copypythonscripttothecontainerfolderapp COPYpython-hello-zhuima.py/app/python-hello-zhuima.py RUNchmod+x/app/python-hello-zhuima.py #userisa

  • 数据洞悉全球色情行业

    东莞事发,排除不择手段的同业竞争因素,单从管理角度看,经营者、监管者甚至是消费者也有做的不到位的地方,让我们一起走出国门,用数据说话,看看其他国家如何管理色情行业。全世界提供性服务工作者多达4200万,如果由TA们组成一个国家,将成为全球人口排名第31位的国家。高达1/8的网站都是色情网站。每秒钟全球有28000人在同时浏览色情网站。搜索引擎中高达1/4的搜索请求与色情相关。35%的网络下载是色情内容。各国色情内容消费额排名人均色情内容消费额排名绝大多数国家或地区禁止卖淫卖淫合法国家如何管理色情行业啥也不说了,上图已经非常清楚了,汗⊙﹏⊙部分内容摘自:腾讯新闻、《商界》

  • 教AI打星际2也不难,试试暴雪和DeepMind的工具包 | 附论文+代码

    安妮编译整理 量子位出品|公众号QbitAI去年年底,DeepMind宣布想教会AI智能体玩《星际争霸2》(后简称星际2),计划创造出能击败人类玩家的智能体。9个多月后这事又有了进展。今天,DeepMind和暴雪娱乐发布了星际2中加速AI研究的工具SC2LE。难!难!难!星际2是个实用的基础AI研究环境,因为游戏本身复杂多变,且胜利方式不固定。玩家想要取胜需要同时做多手准备,比如管理并创造资源、指挥军事单位和部署防御结构等操作需要同时进行,逐步完成。此外,玩家还需预测对手的策略。这项任务确实不容易,但不是无解。DeepMind和暴雪尝试将游戏分为多个“迷你游戏”,将不同任务分解成“可管理的组块”,比如建立特定单元、收集资源或在地图上移动等。细分是为了方便研究人员进行不同任务的测试比较及细化,最终在智能体中组合,从而教会智能体通关整个游戏。厉害的SC2LE目前,暴雪和DeepMind在开放的环境平台中加入了SC2LE工具包,加速AI研究。SC2LE包括——机器学习API:由暴雪开发,将研究人员和开发人员接入游戏,并自带首次发布的Linux工具包。至此,Windows、Mac与Linux系

  • Go发起Http请求及获取相关参数

    golang要请求远程网页,可以使用net/http包中的client提供的方法实现。查看了官方网站有一些示例,没有太全面的例子,于是自己整理了一下。get请求get请求可以直接http.Get方法,非常简单。funchttpGet(){ resp,err:=http.Get("http://www.01happy.com/demo/accept.php?id=1") iferr!=nil{ //handleerror } deferresp.Body.Close() body,err:=ioutil.ReadAll(resp.Body) iferr!=nil{ //handleerror } fmt.Println(string(body)) }复制post请求一种是使用http.Post方式funchttpPost(){ resp,err:=http.Post("http://www.01happy.com/demo/accept.php", "application/x-www-form-urle

  • 《ASP.NET Core 6框架揭秘》勘误

    P5第2段 原文:由于创建的是一个针对ASP.NETCore的可执行控制台应用,所以将OutputType和TargetFramework的属性分别设置为“Exe”和“net6.0”。 改为:由于创建的是一个针对.NET6的可执行控制台应用,所以将OutputType和TargetFramework的属性分别设置为“Exe”和“net6.0”。 P7第2段 原文:由于创建的是ASP.NETCore的应用程序,所以最终生成的程序集被保存在“\bin\Debug\net6.0\”目录下。 改为:由于创建的是.NET6的应用程序,所以最终生成的程序集被保存在“\bin\Debug\net6.0\”目录下。 P34第2段 原文:为了能够使API,我们为App2添加“Dapr.AspNetCore”这个NuGet包的引用。将缓存相关的3个操作定义在IResultCache接口中。 改为:为了能够使DaprAPI,我们为App2添加“Dapr.AspNetCore”这个NuGet包的引用。将缓存相关的3个操作定义在IResultCache接口中。 P47第3段 原文:首先ASP.N

  • nodeJS创建工程

    转http://blog.csdn.net/i348018533/article/details/47258449   设置镜像地址 1.通过config命令 npmconfigsetregistryhttps://registry.npm.taobao.org npminfounderscore(如果上面配置正确这个命令会有字符串response)复制 2.命令行指定 npm--registryhttps://registry.npm.taobao.orginfounderscore复制 3.编辑~/.npmrc加入下面内容 registry=https://registry.npm.taobao.org复制 Ionic开发是依赖于Nodejs环境的,所以在开发之前我们需要安装好Nodejs。下载安装:http://nodejs.org/ 安装完成之后打开PowerShell输入命令node-v和npm-v验证是否安装成功,如果返回版本号则说明成功。 在PowerShell命令行中执行:   npminstall-gcordovaionic &

  • hdfs测试(文件上传,内容读取,文件删除)

    工具:idea2021 配置:hadoop2.6.0 项目:Maven项目   首先编辑pom.xml(Maven项目的核心文件)文件,添加如下内容,导入依赖(所需jar包)(注意hadoop版本号) <?xmlversion="1.0"encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>HDFS_test1</artifactId> &

  • 小批量、多品种生产模式如何快速响应客户交期

    总经理在面对糟糕的履约情况时,经常质问供应链总监和CIO们:“别扯太远了!你们就告诉我,面对我们每月上千个不同品种、每周每天几百个不同交期的定单与客户的紧急插单,几十道工序,几千种物料……,我们生产计划指挥部怎么处理?” 这是很现实的事情,大部分客户用excel和人工调度,ERP传统的MRPII计划系统对此无能为力 要想在这样的环境中取得成功,所以制造企业面临的新挑战是:随着外部环境的不断变化,生产管理的复杂度及规模性也发生了较大变化,必须能够迅速响应市场多样化和不确定的需求,多品种小批量的快速提供满足顾客需求的产品。准时、保质、保量和以最小化的成本制造满足顾客需求的产品成为生产管理的目标。 一、订单生产下的企业现状 任务多,生产能力不够,生产不均衡 销售无法预测,旺季、淡季资源难把控 订单品种多,数量少,交期速度快 经常插单,计划变更频繁 二、现代生产制造业的瓶颈问题 物料脱节,停工待料,物料计划不准、控制不良造成库存增多,生产计划与实际脱节,销售预测不准以及产能分析不准,计划、生产及物料进度协调性不强 计划不准,容易忽略的几点:何时、何地、何人、何物、为何、如何做、消耗的资

  • python的接口

      写法一: classPayment: defpay(self,money): raiseNotImplementedError classAlipay(Payment): defpay(self,money): print('支付宝支付{}元。'.format(money)) classYunpay(Payment): defpay(self,money): print('云支付{}元。'.format(money)) classMypay(Payment): defzhifu(self,money): print('我的支付{}元。'.format(money)) defpayx(payment,money): payment.pay(money) payx(Mypay(),90) 复制   由于Mypay类并未实现pay方法,所以上述代码会报错: NotImplementedError 这就起到了限制作用。 但是这种写法如果不去调用Mypay.pay就不会报错。   第二种写法: fromabcimportABCMeta

  • 解决UITextField输入汉字会下移的问题

    //输入汉子时会下移动    self.searchText.clearButtonMode=UITextFieldViewModeWhileEditing;

  • 分类 :kNN(k nearest neighbour)最近邻算法(Python)

    kNN算法概述 kNN算法是比较好理解,也比较容易编写的分类算法。 简单地说,kNN算法采用测量不同特征值之间的距离方法进行分类。 我们可以假设在一个N维空间中有很多个点,然后这些点被分为几个类。相同类的点,肯定是聚集在一起的,它们之间的距离相比于和其他类的点来说,非常近。如果现在有个新的点,我们不知道它的类别,但我们知道了它的坐标,那只要计算它和已存在的所有点的距离,然后以最近的k个点的多数类作为它的类别,则完成了它的分类。这个k就是kNN中的k值。 举个例子:我们知道地球是有经纬度的,中国人肯定绝大多数都集中在中国的土地上,美国人也一样多数都集中在自己的土地上。如果现在给我们某个人的坐标,让我们给它分类,判断他是哪国人。我们计算了他和世界上每个人的距离,然后取离他最近的k个人中最多国别的国别作为他的国别。这样我们就完成了他的国别分类。(当然也有可能一个外国人正好来中国游玩,我们错误的将他分类为中国人了,这个只是举例,不要在意这些细节啦^_^)   所以kNN算法无非就是计算一个未知点与所有已经点的距离,然后根据最近的k个点类别来判断它的类别。简单,粗暴,实用。 &nbs

  • fork函数 linux创建子进程

    #include<stdio.h> #include<sys/types.h> #include<unistd.h> #include<cstdlib> inta=1; intmain(){ pid_tpid; constchar*msg; intk; printf("ProcessCreationStudy\n"); pid=fork(); if(pid)printf("parenta:%d\n",a); elseprintf("childa:%d\n",a); switch(pid){ case0: msg="Childprocessisrunning"; k=3; a=2; break; case-1: perror("Processcreationfailed\n"); break; default: msg="Parentprocessisrunning"; k=5; a=3; break; } if(pid)printf("parenta:%d\n",a); elseprintf("childa:%d\n",a); while

  • RazorPage-Get、Post、自定义handler、ajax、partial

    OnGet/Post{Handler}{Async} @page @modelCoreMvc.PM1Model @{ ViewData["Title"]="PM1"; } <h1>PM1</h1> <p> nj:@Model.Age+@Model.name </p> <form> @Html.AntiForgeryToken() <p> name:<inputasp-for="name"/> <inputtype="submit"value="sumbit"formmethod="post"/> </p> <p> <buttonasp-page-handler="Demo1"formmethod="post">自定义Handler</button> </p> <p> <buttononclick="ajax();returnfalse;">ajax</button> </p> &

  • Spring源码解析——如何阅读源码

      最近没什么实质性的工作,正好有点时间,就想学学别人的代码。也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想。   手码不易,转载请注明:xingoo   这篇博文你可以了解到:   1Springjar包以及源码使用   2简单的spring运行示例   3利用断点调试程序,如何快速的阅读程序【快捷键等的使用】   这次阅读的源码比较老了,是3.0.5版本的,由于正好手头有这个版本的源码,而且平时基本上也是用的这个版本Spring,因此后文的分析也都是针对这个版本。   下面贡献一下Jar包以及源码,由于百度云上传的压缩包总是解压失败,就放在csdn上面了。 如何使用jar包以及源码的source包   首先,在工程右键,属性中,添加必要的jar包。   选中必要的jar包,上面给出的源码jar包中,导入spring3.0.5中的所有jar包。   其中lib内的是spring的jar包,用到哪个导入哪个,不知道的话,全部导入就行了。   外面的几个jar包,用于日志以及mysql的驱动。commons-loggingj

  • 环境配置 PHP-V 提示缺失 vcruntime140.dll 丢失

     PHP-V提示缺失vcruntime140.dll丢失,解决: 1、https://www.microsoft.com/zh-cn/download/details.aspx?id=48145 链接下载vc_redist.x64.exe安装 2、再次运行PHP-V

  • delphi 快捷键大全

    ************************* 1.功能键 2.组合键 3.其他快捷键 4.补充 5.补充1(带分类) 6.补充2 --Editby2013.1.14 **************************   1.功能键:F1   help帮助(help文档)                             F3     find(searchagain)                  F4 &n

相关推荐

推荐阅读