性能测试的入门了解

前言

好久没有写文章,打字都不利索了,赶紧水一篇出来练练手。

就实际而言,很多从事软件测试工作的人,之所以能干这活,就是功能测试要求极低,肯干活就行。不少情况都是跨专业工作,对软件开发中一些基本的术语都不太了解,后续职业发展肯定受阻。这里整理下性能测试可能接触的一些术语并进行说明。有些说法可能不那么正确,还是需要系统。

性能测试

本文将通过餐厅点餐这一行为说明一些术语。餐厅点餐包括:到柜台点餐、等待餐、取餐。
性能测试需要牢记一点,就是所有生产活动,都需要占用资源,完成后需要释放资源。

事务

事务是测试对象的具体测试内容或集合,它是由测试目标决定的。以餐厅点餐为例,我可以定义点餐到取餐离开为一个事务,这个测试目标是完整的点取餐流程;也可以定义柜台点餐为一个事务,这个测试目标仅仅是点餐。

线程

抛开硬件层面不谈。在同一事务中,多线程就是为了并发当成并行也行。
在柜台点餐环节,我们可以把柜台数当作线程数。假设有10个顾客同时到店,柜台10s处理一个顾客点餐。1个柜台就是1个线程,此时完成10个顾客点单就要10*10s;10个柜台就是10个线程,此时只需10/10*10s就能完成顾客点餐。这就是为什么大多数情况增大线程数就能提升性能。
此外,多线程还可以改善一些业务阻塞的情况,例如某个人点餐,点餐量非常大,需要10min才能完成点单,多线程就可以避免其他人被迫等待10min。

实际业务开发中,流行线程池之类的管理线程,动态管理线程,基本上就是点餐人多了,柜台多开点,人少了,柜台关几个。线程本身是占用性能的,所以测试性能时测试工具低并发和高并发是不同的,即使预设事务压力一致。

协程

协程是一个轻量级的线程,开发测试的话需要升入了解下,如果只做性能测试,当成线程就行,在下面的异步和同步里简单会说下区别。

异步和同步

异步相对于同步,主要外在区别在于是否阻塞运行。
对于计算机软件而言,软件由CPU运行(就像点餐事务由营业员操作),其工作内容可以主要分为两类: IO密集型和CPU密集型。在IO密集型中cpu经常闲置。实际工作中有优化需求的多数为IO密集型(能优化CPU密集型的,这是真大佬了)。

经常听到异步处理提升性能,这个性能提升来源于减少CPU闲置。还是以点餐为例,营业员是有限的(这是大前提,测试也好开发也好,须知资源是有限的)。

类似开封菜点菜,过去就有过争论,营业员点完单后到底是去先配餐,完成这个客户的业务还是继续点餐,直到一定人数或没有点餐人。
假设只有一个营业员,2个客户同时到店,现成的食品,完成一次流程需要 点餐10s,配餐10s,等待取餐1s。
模式1:采取严格的 点餐-配餐-取餐-点餐 模式,此时一个客户需要的时间是 点餐(10s)+等待取餐(10s)+取餐(1s),耗时21s。第二个客户耗时21+21=42s。
模式2:采取中间闲置时可以打断当前行动,处理其他客户 模式,此时第一个客户最短需要等待 10+10+10+10=40s(在等待取餐时进行下个点单,)),第二个客户耗时41s
模式3: 采取完成所有点餐,完成所有配餐,再一次性完成所有取餐的模式。这个模式中,分别耗时41s,41s。

注意上面这个取餐的1s是营业员等待客户取走餐,可以看成线程中进行不同任务会需要占用释放资源,这需要时间。在实际开发中这个资源的占用和释放很重要,是优化的要点之一,毕竟你不能逼迫营业员10s完成点餐或者5s完成取餐,这很难。

在点-配-取上,模式1 是同步,模式2是异步,模式3是实际有可能开发出的一种也可能被叫异步的模型,自行甄别,所幸实际开发中资源并没有短缺到如此。(只有一个营业员这是协程,由开发主动控制在闲置时切换任务。)。咋一看似乎模式1,好于模式2。因为这是一个典型的cpu密集型的,营业员只有在等待客户取餐时才会处于闲置状态,而起工作压力极其的大,无法快速处理业务。可见异步和同步的优劣还是要根据实际情况来确定。

我们在假设在配餐过程需要等待40s,等待食物烹饪,这个过程中营业员闲置。
模式1 分别耗时61s(10+40+10+1),122s;模式2分别耗时61s(10+40+10+1),111s(61+40+10+1).模式2更为优异。

为了更好理解,我们进一步做假设,我们这时候假设有三个营业员分别从事点餐,配餐(无需等待),取餐。
此时模式1的耗时不变,分别是21秒,42秒。(当然有聪明的小伙伴就想到了,我可以让两个人同时服务两个人,这样的话一个21秒就可以搞定了。)
但模式2的耗时,分别是21s,31s。(模式3也是这个时间,这是多线程,可以不用考虑闲置问题,模式3跟模式2并无不同)
模式2很明显优于模式1。

mq和消息队列和中间件

mq就是消息队列,message queue,是一种面向消息的中间件。中间件顾名思义就是夹在两个实体中间的起到连接二者的作用。在异步中中间件不可或缺。

在上面点餐的例子中,我们将点餐清单作为消息。
负责点餐的营业员,在客户完成点餐之后,需要将这个消息传递给负责配餐的人员,但是负责配餐的人员不一定处于闲置状态,他有可能正在工作中。
负责点餐的营业员不可能等待配餐员,这样的话就成一种阻塞,某种程度上可以算成是一种同步。
所以这里需要中间件,负责点餐的营业员将这个消息存放到中间件中,而负责配餐的营业员,在闲置的时间就可以去中间件中去获取点餐清单。这样才算一个真正的一个异步。
中间件的优点非常多,除了上述的异步之外,它还可以实现包括排队之类的功能。

缓存和缓冲

缓存cache,缓冲buffer,都有缓缓的作用。但二者不同。
缓存
还是上面的例子,一开始配餐只需要10秒钟,不需要进行等待,这里就是假设存在已经煮熟的食品(在快餐店非常常见)。这些已经预制好的食品,我们可以将它视为一种缓存。在缓存还足够的时候,可以用非常快的速度完成配餐这一件事情,但是一旦缓存消耗殆尽,就需要重新进行食品配置(这个速度远远慢于直接拿成品)。
上面的例子里,预制食品就是缓存空间,每次占用缓存就是消耗了预制食品,储存食品的柜子大小决定了缓存总大小,缓存被使用后可以被释放就像食品柜中可以补充食品。一次配餐(一个计算工作)再有预制食品时(缓存)可以非常快速完成,一旦耗尽(内存写不下写磁盘,速度起码慢三个数量级),就需要现烧(速度非常慢)。

缓冲
缓冲可以说是一种行为。常见的日志缓冲写入。以上面的点餐为例,可以在配餐过程中一件一件拿给客户,也可以等完成所有配餐后一口气拿过去。很显然一件一件拿很浪费资源。
完成所有配餐后再取餐,这一行为可以称为缓冲。测试过程中,有时候需要查看日志,很多日志都有缓冲设置,特别是一些小设备,硬件能力有限,采取缓冲写入设置了超过多少条后写入,很长时间都没有日志,中间设备异常断电,有时候可能会丢日志,测试过程中对测试数据来源要进行保证,一要保真,二要保有。

暂时先这样,随便写写,可能有不少理解表述不当的地方。
最好还是多看书,系统学习。软考的软件评测师的教材其实还行,有点老,脱离实际,但是系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值