稳定性测试是自动化测试领域最为核心的内容之一。稳定性测试设计应该考虑哪些方面?如何在有限的样本上最大化测试产出?笔者结合自动化的一些经验和理解,总结了稳定性测试设计最核心的五个要素:压力、随机、并发、交互以及时间。何解, 一起看一下。
压力
Stress
英文中,稳定性叫做Stability;而压力称为Stress。在测试领域,很多人将稳定性测试等价为压力测试。其实不然。稳定性的一个最重要实现途径是通过压力的方式,但是压力不是测试稳定性的唯一方式。压力的内涵是重复地做同样的事情,通过长时间、多轮次的执行,以期达到让功能break或者系统crash的目标。在现实中,这往往是一个比较有效、可行的方式。
但是,压力测试的一个最主要问题是:把一个简单功能重复1000遍和把1000个简单功能轮流执行一遍的效果可能大不相同。前者不一定能够发现问题,但是后者却很有可能发现问题。为什么呢?这就涉及到到下面几个要素。
随机
Randomness
在稳定性测试中,如果按部就班地一条条case执行下来,也许并不会有太好的产出。因为你的事件序列是固定的、可预测的,没有太多“意外”。
设想一下,在A地和B地之间有若干条路径,但是你每次都走同一条路,那么你可能对这条路上的肯洼不平了如指掌,但是对于其他路径上的情况你却一无所知。
想要探明A到B之间所有的坑,理想的情况是,你可以遍历A和B之间的每一条通路。但是现实情况是,你并不知道到底有多少条路径的存在,而且要完全遍历它们也十分困难。因此,增加一些随机性就很有必要。随机能够让你在有限的时间和空间内构造出尽可能多的组合,从而创造更多的“意外”发现。
并发
Concurrency
真实世界往往是复杂多变的,比如你在刷微信的时候可能会进来一个电话,你在接听电话的时候又可能发生了网络变化,等等。这类并发大多是不可能预先知道的,可称之为“中断”,它是测试对象和周围环境之间的并发;但在真实用户场景中,还存在大量自然而然的并发场景,比如边听歌便上网,边打游戏边接听电话等等。这是测试对象内部不同功能模块之间的并发。
并发为什么有助于发现稳定性的问题?首先因为它是真实世界中大量存在的场景;其次,因为它涉及到系统资源的争抢和协同,所以系统内部状态较单一场景会复杂许多,从而也更加能够触发问题。
并发的场景数目可以是两个或者更多。越多的并发其状态就会越复杂。
交互
Interaction
交互和并发还不完全一样。并发一般是多个独立的功能或者状态同时运行。但是交互则是指完成同一个操作涉及到多个子系统之间的协同工作。
比如,你打开支付宝刷脸,那么你就要涉及到相机的调用;你把手机通过WIFI投射到电视上打游戏,那么就涉及到GPU、WIFI、Display等多个部分的协同与交互。在设计自动化时,考虑子系统交互,将能够极大提升测试产出。
时间
Time
一般来说,在考虑了以上四个要素(压力、随机、并发、交互)之后,基本就能够发现很多稳定性的问题了。如果上面几个都注意到了,却还是无法发现问题,那么可能就是你执行的时间不够长。
时间是一个很重要的因素,却也是最容易被忽略的因素。随着时间的增长,设备的状态也会发生更多的变化,比如存储空间越来越小,系统越来越慢,在这些情况下,设备也更加容易出现问题。
频繁更改测试执行策略的唯一后果就是,每一种策略的执行时间都被压缩了,都没有被充分执行。所以,做好前四点,然后静待花开就好。
综上,一个好的稳定性测试,必须要充分考虑这五个要素的影响:适当的压力 + 充分的随机性 + 针对性的并发和交互 + 足够的时长,那么就能够较好地覆盖产品在稳定性方面的质量需求。
源自公众号 测试之家