今天育米与大家分享的是下面这5个测试的概念:
白盒测试 3性能测试 5自动化测试
(1)黑盒测试
黑盒测试(Black-Box Testing)也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试主要测到的错误类型有:不正确或遗漏的功能;接口、界面错误;性能错误;数据结构或外部数据访问错误;初始化或终止条件错误等等。
黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。
举个例子,我们平常使用美团外卖来点餐,流程是这样的:你在APP上浏览菜品,选好后下单,过上二十分钟,外卖经由快递小哥送到你手中,你检测发现色香味料符合预期,确认此次点餐成功。这个点餐的过程,其实就是一种黑盒测试。你只关心自己付钱了收到符合预期的外卖了。至于饭怎么做出来的,用了什么食材,用的什么油,厨房卫生条件如何,快递小哥配送过程怎样,你都不管。
(2)白盒测试
白盒测试(White-Box Testing)也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。
白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false)两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。
软件开发工程师常说的单元测试,就是典型的白盒测试。(单元测试(Unit Testing)是对软件基本组成单元——如函数或是一个类的方法——进行的测试,通常通过静态代码检查或编写测试代码调用被测单元的方式来实现。)白盒测试不仅仅包含单元测试,只要是针对程序内部工作机制设计的测试,都是白盒测试。
我们还以美团外卖点餐为例来说明一下。
假如你现在了解到一些内部情况:有的卖家使用地沟油和腐肉来做菜,有的卖家并不现场做饭而是使用几个月前的外卖餐包加热,有的厨房老鼠满地跑,有的洗菜池涮拖把……那你在接收外卖时就可能针对这些情况设置很多条件来测试,以便降低自己遭遇这些外卖商家的概率。比如买一个地沟油检测仪、腐肉检测仪放在身边,接到外卖后挨个检测一遍,确认无误后再接收。那这次的测试流程,和黑盒测试时有一个明显的区别:你了解到了外卖送餐这个链条上各个环节的细节,知道了中间过程,有针对性的调整了测试用例。这样根据程序内部实现细节设计的测试,就属于白盒测试了。
(3)灰盒测试
灰盒测试(Gray-Box Testing)更像是白盒测试和黑盒测试的混合测试,现阶段对灰盒测试没有更明确的定义,但更多的时候,我们的测试做的就是灰盒测试,即既会做黑盒测试又会做白盒测试,既关注输入输出的是否合乎规格,也关注程序员内部逻辑是否正确。
(4)性能测试
性能测试(Performance Testing)用来测试软件在集成系统中的运行性能,它可以发生在测试过程的所有步骤中,即使在单元层,一个单独模块的性能也可以用白盒测试来进行评估。然而,只有当整个系统的所有成分都集成在一起之后,才能检查一个系统的真正性能。性能测试必须要有工具的支持,在某些情况下,不得不自己开发专门的接口工具。
“性能测试”的目标是度量系统相对于预定义目标的差距,将实际的性能级别和需要的性能级别进行比较,并把其中的差距文档化。
与性能测试相关的其实有3个比较容易混淆的常见概念:性能测试、负载测试和压力测试。
“性能测试”是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
负载测试(Load Testing)是一种性能测试,用于确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
压力测试(Stress Testing)是一种性能测试,它是一种刻意为之的强度测试,用来确定软件系统在特定条件下的稳定性,目的是找到系统的最大服务级别(瓶颈)、系统在哪里失效以及如何失效。压力测试通常包括下面几类测试:
1)Spike Testing:短时间的极端负载测试
2)Extreme Testing:在过量用户下的负载测试
3)Hammer Testing:连续执行所有能做的操作
4)Volume Testing:确定系统可处理同时在线的最大用户数
性能测试、负载测试和压力测试,比较容易搞混。
我们举个视频点播的例子进行解释。
性能测试:在系统出口带宽占用为0%的情况下,新进入到视频点播系统的用户,首次开播时长(第一次点击影片到影片开始播放)是多少?
负载测试:在系统出口带宽占用为10%、30%、50%……等情况下,新进入到视频点播系统的用户,首次开播时长是多少?
压力测试:在系统出口带宽占用已到90%的情况下,新进入到视频点播系统的用户,首次开播时长是多少?
(5)自动化测试
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,即模拟手工测试步骤通过执行程序语言编制的测试脚本自动地测试软件。
我们以12306网站为例来说明下什么是自动化测试。
通常你买票时,是打开12306网站,输入用户名、密码、验证码,登录到系统中,然后手动选择乘车区间、时间、座位类型,检查有没有票,如果有,就输入乘客信息,提交订单,支付,完成购买。这整个过程,都是你在操作,这就是手工测试。
这样手动买票,非高峰期时可以买到,遇到春运这种极端情况,你发现不管怎么调整手速和网络,都买不到票了。于是你就开始使用刷票软件。把自己的用户名、密码、乘车区间和时间等信息,都提交给刷票软件,刷票软件自动登录12306,自动查询余票,自动在有余票时下单,下单成功后通知你付款。现在,刷票软件这个买票的过程,就是自动化测试。
自动化测试可运用于测试的各个阶段和场景。比如在单元测试阶段,比如回归测试。(回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。)