QA入门必看干货 | 一看就懂,8分钟了解自动化测试理论!

斯波

2022-06-2713193次浏览

11评论

63收藏

23点赞

分享

在讲自动化测试之前,我们先简单梳理下大致的测试流程:

首先是验证设计:分为文档分析以及性能分析。

例如,现在大多数玩家会使用移动端来玩游戏,策划文档中想要游戏界面做得非常酷炫,我们要考虑大家的游戏设备是否能达到要求。

接下来是设计测试方案:编写测试用例,准备测试环境以及编写测试脚本

例如,一个关卡是否好玩?数值是否正确?这时我们就需要测试环境。在测试中,我们会发现一些BUG,并且记录,目标是解决这些BUG。

最后是执行测试:包含跟进缺陷以及产出测试报告。

那么有哪些测试方法呢?常见的有功能测试,压力测试,性能测试等等。当然这些只是一部分,并不是全部。 

这里我整理了测试的分类。例如按目标分类,有功能测试,压力测试等,当然还有其他的测试分类,如下图所示: 

梳理完流程和分类,今天我们来探讨三点:自动化测试的原理与价值,持续集成与交付,常用工具介绍。

一、什么是自动化

什么是自动化?百度百科是这么描述的:机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人的要求,经过自动检测、信息处理、分析判断、操纵控制,实现预期的目标的过程。

维基百科的描述是:自动化的最大好处是可以节省劳动力,但是,它也可用于节约能源和材料,并改善质量,准确度和精度。

所以可以看到自动化对于质量保障来说是一个非常好的工具。我自己总结了4个词,来解释什么是自动化及自动化的好处。

让我们工作
更高效:比如说按一下按钮,就自动保存。
更精确:自动化测试产生的报告非常精确。
更可靠:自动化测试可以在很短的时间内找出明显的问题,排除问题。
省人力:用最少的人完成等量的工作。

生活中也存在非常多自动化。

例如相机的发展:从开始需要人力拍照,到后面可以一秒拍7次,都是自动化延伸的功劳。 

二、自动化测试的价值

什么是自动化测试?百度百科描述如下:把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。

那么自动化测试和手工测试有什么区别呢?我们先看一下两类测试的流程: 

图中我们可以看到,转化用例是自动化特有的。转化用例是指,把文件式的用例转化成代码来表示,变成自动化文本。

自动化测试发展得越来越好,但目前而言手工测试不会完全被替代。我去观察了很多业内的情况,很多公司没有办法完全实现自动化测试。

我们来看下手工测试和自动测试的对比。

手工测试有以下特点:首次执行的成本低,也能迅速适应变更。比如你突然想起一个测试用例,可以拿两台手机迅速测试一下。适合于测试新的快速迭代的需求。

而自动化测试有以下特点:重复执行成本低,适合反复执行,例如我们要测所有的匹配组合,我们可以设置一个自动化测试脚本,进行自动化测试,验证所有的匹配状态,并且生成报告汇总在一起。适合需要反复测试的需求。

但是自动化测试的成本非常高,一是操作的转化成本,例如将人的行为转化成机械力的指令,这是操作转化的成本。举个例子,登录游戏时只需要点击一下登录按钮,而自动化需要进行图像识别,模拟点击,失败截图等等。

二是验证的转化成本。人工判断是否成功登录一眼就能判断,但自动测试要判断客户端是否异常、服务端是否异常等等。一行正式代码可能配几十行测试代码才完美。

我们有两种自动化思路。一是全自动的自动化测试,无需手工干预。可自行进行导表检查、静态代码检查等,另一种是半自动的自动化测试,写一些脚本,辅助手工测试。进行多台手机同步操作、弱网模拟、千人同屏模拟、代码覆盖率统计、mock服务器等操作。 

当我们在进行测试时,我们考虑的不是“能不能做自动化”,而是“适不适合做自动化“。要考虑投入产出比,我们的目标是收益最大化,不要为了自动化而自动化。 

除了成本收益,还需要考虑产品。产品适合自动化吗?市场是瞬息万变的,有些产品的更新迭代速度非常快。比如策划想出了一个点子,你花了三天三夜写出了一个自动化脚本,而后策划告诉你改方向了。这样的自动化测试是没有价值的。

所以自动化测试不得不考虑产品所处的领域和产品的生命周期,在合适的时候去推行自动化测试,在不合适的时候可以采用手工测试的方法做临时过渡。 

三、适合自动化的测试

那么,到底什么样的测试适合自动化测试呢?

回归测试。回归测试是软件测试的一种,旨在检验软件原有功能在修改后是否保持完整。

举个例子,一个MOBA游戏加了一个新英雄,但上线后收到投诉,这个英雄的伤害太高,究其原因,在单独开发这个新英雄的时候,对之前的英雄产生了影响。

那这种时候怎么办?我们要做出一个解决方案。

你出一个功能,我就测一个功能,你再出一个我就再测一个,但当你把所有的功能一起打包上线之前,我们要对所有的功能一起测试,这个时候就要进行自动化测试。 

还有一种测试也非常适合自动化测试:兼容性测试

我们将很多台手机连在一起,任意选择其中一台手机进行操作,用同一个代码就能使得不同尺寸不同分辨率、不同操作系统的手机去做测试。测试比如说游戏运行、闪退问题、网络情况等。

 

四、分层测试

自动化测试理论里有一些成熟的概念,例如分层测试。

我们将测试分为几层,最底层的是单元测试,数量庞大,每一个类都匹配一个单元测试用例。

再上一层是集成测试,若干各类、若干个组件放在一起进行测试。

最上层是UI层的测试,测试真正呈现在用户面前的界面,来核实用户与软件的交互。

这三层测试的维护成本、执行时间、误报率都由低到高排序。 

这里详细提一下UI测试和集成测试。UI层面的测试,举个例子,一个登录框,我们往Email里填入Email,往密码框里填入密码,看是否能成功显示Welcome的界面。 

同样一个在集成测试层面是如何测试的?

直接把用户的Email和密码组装起来,用代码的方式伪造界面和网络请求,发给服务器,检查返回的页面是否是Welcome。这种测试方法劣势是集成测试通过的时候不能代表用户界面显示的就是对的。优势是能够降低成本去测试更多东西。

总结一下,分层测试要根据需求逐步提高等级,最开始做单元测试,之后集成测试,最后UI测试。这是基于整个测试流程去考虑的。如果是项目初期无法开展自动化测试,可以用手工测试进行UI测试。

这里也提到一个概念,如果我们能尽早的去做单元测试的话,提前发现BUG,所需要的测试成本就会更低。

最后总结一下自动化测试的优劣势

从纯手工测试到自动化测试,将来,自动化测试或许能发展成更高的机器学习和AI,用于更短周期的测试。

五、自动化测试常用的工具

PC端的自动化测试,最常用的工具是按键精灵,按键精灵可以通过制作脚本,自动执行一系列鼠标键盘动作。这个属于大面积运用的软件。

更加适用于测试领域的有sikuli,可以用图片去匹配游戏里的场景,用截出来的图形元素组合出神奇的程序。

还有HP QTP/UFT,在PC上做自动化测试,大家可自行去搜索了解和使用,或在网上搜视频进行了解。

移动端的自动化测试工具会更丰富一点,Android系统的有一些自动化测试工具,如Robutium、UiAutomator,IOS系统的测试工具有Instruments, UIAutomation等,甚至还有跨平台的测试工具,例如Monkey、Appium。 

还有自动化web端的测试工具,例如常用的:Selenium、SoapUI。还有一些压力测试的工具LoadRunner、Apache JMeter。TCP的协议也会有压力测试的需求,但由于TCP的协议每一个都是自定义、不统一的,一般无法做到供业内使用的庞大的工具,因此都是公司去做定制化。

与自动化测试紧密相关的两个概念是持续集成与持续交付,常用的持续集成工具以jenkins为代表,常用的持续交付工具以Docker+Compose为代表,大家可根据自己的业务场景灵活选用。

 

 

最后推荐几本和自动化测试相关的读物,供大家拓展知识,自动化测试和持续集成关联非常紧密,因此持续集成的书本也推荐了一些。大家工作和学习之余可以好好去体会一下,希望能给大家带来一些启发。 

评论 (11)

0/1000
网易游学APP
为热爱赋能
扫描二维码下载APP