鼠年全马铁人挑战 WEEK 05:软体测试的种类 - 番外篇


            Photo by Helloquence on Unsplash

前言

小弟之前在 鼠年全马铁人挑战 WEEK 03:软体测试的种类 - 第二集 的文章中有提到:"非功能性测试 (Non-Functional Test)"。 而这篇文章主要是藉由上次的内容做一个额外的介绍。 ( •ˋωˊ• )~


性能测试 (Performance Test)

什么是性能测试? 为什么需要做性能测试? 性能测试的重点是什么?
如果是第一次接触到 "性能测试" 这个名词的人,或许都会有这些疑问吧~

什么是性能测试?

性能测试可以用来验证系统是否符合製造商或供应商声明的规範。

简单来说就跟玩游戏一样,製造商或供应商就像是正在找代打的玩家;而做性能测试的人,就像是要帮忙破关解成就的职业玩家,但是如果职业玩家解不了成就破不了关,雇主可能就会森气气了。 (#ˋ皿ˊ)ノ

为什么需要做性能测试?

透过性能测试可以了解应用程式可能失败或延迟的地方。

当产品已经到了完成的阶段,还是免不了要做一些性能测试。能够提升产品的性能与效能,也能够藉此避免掉一些错误或是延迟的机率。

性能测试的重点是什么?

性能测试的重点主要分成了三种。
速度 - 确定应用程式是否快速响应。
稳定性 - 确定应用程式在不同负载下是否稳定。
可伸缩性 - 确定应用程式可以处理的最大用户负载。

然而性能测试根据上述的重点又可以画分成许多不同种类的测试。
那测试包含了哪些呢?让我们继续看下去~ (☞゚∀゚)☞

压力测试 (Stress Testing)

在极端的工作负载下测试应用程式,了解应用程式如何处理高流量高数据。
因为在某些情况下系统的故障可能导致巨大亏损,所以还是乖乖的通过压力测试吧~

压力测试的目的:

发掘应用程式的突破点。(就像是在激发出人类浅能一样)看看系统在异常情况下能不能继续工作,还是就直接罢工了。检查系统在被不合理的压榨下,能不能显示相应的错误消息。

举个例子

教授要你在一天之内完成10篇的发表论文。 (虽然听起来有点瞎@.@)
你就像是应用程式,必须处理10篇论文的高流量高数据。
而教授就是那个测试人员,他必须监督你在一天内完成10篇的发表论文。
然而合理的要求是训练,不合理的要求是磨练。
如果你真的无法完成,但是你已经尽了你最大的努力。
那就向教授反应吧,适时的表达原因 - 也就是应用程式返回的错误讯息。

负载测试 (Load Testing)

在预期的用户负载下测试应用程式,了解应用程式在预期负载下是否会遇到性能瓶颈。
必须确保软体的设计、伺服器的配置与硬体限制是没有问题的。

负载测试的目的:

检查每项动作的回应时间,千万别按一个按钮网页就转了老半天。优化客户端和伺服器之间的网路延迟。(可能是因为现代人生活步调太快惹~)检查不同负载下系统与资料库的性能,反正就是确定每个地方都没问题就对了

举个例子

你在学校上了一天课,每个老师都出了回家作业。 (天阿!听起来就觉得累)
你就像是应用程式,必须处理预期负载的回家作业。
而老师就是那个测试人员,他必须限制你在一天内完成他出的回家作业。
而老师会检查你有没有写作业,作业的内容会不会太多,有没有準时缴交。
甚至是检查你的作业内容,不能有任何的错误。

负载测试 vs 压力测试

因为负载测试与压力测试常常被搞混所以这边简单的分别说明一下两者的差异
好拉~ 其实是小弟我自己搞不清楚,所以帮自己做个笔记 (〃∀〃)

负载测试:负载测试不会破坏系统,在正常工作负载条件下测试系统行为。压力测试:压力测试试图打破系统,在极端工作负载条件下测试系统行为。

耐力测试/浸泡测试 (Endurance Testing/Soak Testing)

在预期的最大负荷下长时间的运行应用程式,确保应用程式能够运作。
通常因为系统运行时间过长,一些资源无法正常释放,导致系统回应的时间慢慢变长。

耐力测试/浸泡测试的目的:

监视资料库资源的消耗 (是否正常的清除不必要的资料)监视服务器资源的消耗 (有就是很常听到的 CPU 使用率)

举个例子

在一整个学年度中,每个老师每天都狂出作业跟考试。 (听起来是预期的XD)
你就像是应用程式,必须长时间处理预期的最大负荷。
而老师就是那个测试人员,他必须确定你不会无故请假或是翘课。
也要监督你的学业成绩不会下滑,必须能够有效地吸收老师教的东西。

体积测试/洪水测试 (Volume Testing)

将大量的数据写入资料库中,并监控整个系统的行为,确保应用程式能够运作。

体积测试/洪水测试的目的:

通过增加资料库中的数据量来检查系统性能。识别大量数据可能发生的问题。釐清系统稳定性降低的问题点。确定应用程式正常和大量的容量。

举个例子

在上英文课的时候,老师都会固定教 10 个单字,并在下次上课考试。
但是某天,老师突然教了 100 个单字,并且下次上课也要考试。
此时 100 个单字就有如大量的数据,学生的脑力就有如资料库。
确保学生是否可以有效吸收这 100 个单字的内容。

扩展性测试/伸缩性测试 (Scalability Testing)

确定系统在扩展中的有效性,以支持用户负载的增加,有助于规划软体系统容量增加。
用于在按比例放大或缩小用户请求时测量网络或系统的性能。

扩展性测试/伸缩性测试的目的:

确保应用程序可以处理预计的用户流量,数据量,事务计数频率等方面的增长确定应用程式的用户限制。确定负载下的客户端降级和最终用户体验。确定服务器端的健壮性和降级。

举个例子

在学期刚开始的时候,老师教的东西都较简单也较少。
但是随着时间的增加,老师所教的内容越来越艰深也越来越难懂。
而老师就是那个测试人员,确保学生可以处理预期的课程内容。
而学生也必须能够随着课程难度的提升而有所成长。

尖峰测试 (Spike Testing)

尖峰测试是从电力工业借鑒而来的,测试设备刚接通电源时,能否承受住通流的破坏。
而软体的冲击测试,是为了验证网站在用户突然急速增加的情况下能够正常工运行。

举个例子

还没到上下个得期间,学校附近的交通都非常的顺畅。
但是一到上下课的时间一到,大量的交通工具,一窝蜂的聚集在一起。
此时学校就会关注,家长的接送率,学校内部的接送区,与内部停车场的使用率。
就像是在关注 CPU 使用率、可用内存、内存使用百分比等。
每隔一时间就纪录上述的指标,来确定系统的问题之处。


性能测试的步骤

以下内容为性能测试的基本步骤,如果对性能测试的步骤毫无头绪,可以参考看看。

确定测试环境

了解所需测试的环境。(通常与稳定的版本环境相似)
了解可用的测试工具,或是可用的测试设备。
使用的软硬体和网络配置的详细信息。

确定性能验收标準

确认性能测试所要关注的主要内容。(包括吞吐量,响应时间和资源分配等)
还有必要在这些目标和约束之外确定项目成功标準。

计画和设计性能测试

确定最终用户的使用情况,可能会有所不同。
确定测试所有可能案例的关键方案。
模拟各种终端用户的使用情境。
规划性能测试数据并概述将收集哪些指标。

配置测试环境

执行前确保已準备测试环境,安排工具和其他资源。

实施测试设计

根据测试计画与设计创建性能测试内容。

运行测试

执行并监控测试,确定测试正常运行。

分析、调整和重新测试

整合、分析和共享测试结果。
进行微调并再次测试以确定性能是否有改善或降低。


结尾

就这样,以上是这篇所介绍的内容,希望内容不会太艰涩难懂。
希望之后有时间可以再做几篇性能测试的工具给大家做讲解。


参考文献

Guru99

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章