1 自动化测试概述
1.1 手工测试
由人去一个一个的执行测试用例,通过键盘鼠标等输入一些参数,查看返回结果是否符合预期结果。
手工测试同样需要熟悉业务、基本测试方法。对业务的熟悉可以发现别人发现不了的软件问题。手工测试仍是无法替代的一种测试方法。
1.2 自动化测试概念
设计测试用例->评审->根据用例执行测试->得到实际结果与期望结果的比较。
为了节省人力、时间、资源,提高测试效率,所以引入自动化测试。
广义上来讲,一切通过工具/程序来代替/辅助手工测试的行为都可以看做自动化测试。狭义上来讲,通过工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统功能进行验证。
总结:把以人为驱动的测试行为转化为机器执行的过程。
1.3 自动化测试的理解
手工测试与自动化测试都是一种测试手段。
在整个软件测试中自动化测试并没有体现出最大化的软件测试价值。
在软件测试的四个过程:
1)测试需求分析;
2)设计测试架构、方案、用例;
3)落实测试方案、具体测试点;
4)执行;
1) 2)最重要,而自动化测试关注的是执行阶段。
1.4 自动化测试优势与不足
优势:
提高测试效率,节约时间成本;
解放人力做更重要的工作(测试需求分析、设计测试用例);
可重复利用,减少对人的依赖;
提升软件测试团队整体水平(解放人力、提升效率);
可大幅度减少兼容性测试的工作量(回归测试);
有些测试必须依靠自动化测试;
不足:
开发自动化测试脚本周期长;
随着产品迭代,自动化测试脚本也要不断迭代,时间成本高;
不同项目之间自动化脚本重用度低;
对短期的项目型产品自动化测试价值不高;
无法代替手动测试找到的bug;
对团队技术的要求高(代码);
1.4 自动化测试VS手工测试
寻找产品缺陷:手工> 自动化
纯技术要求:手工< 自动化
产品稳定性要求:手工< 自动化
测试用例的高效性:手工> 自动化
对测试人才的需求:手工= 自动化(高手难求)
相互之间的可替代性:手工= 自动化(互相不可替代)
对测试项目的价值:手工= 自动化(都不是核心价值)
测试工作的核心价值在于分析与设计,手工和自动化测试都只是执行阶段。
1.5 自动化测试能力要求
对软件测试能力的要求:
熟悉软件测试的流程与方法;
熟悉软件测试用例的设计思路;
对程序设计能力的要求:
有程序语言(Java)设计基础;
有数据库知识和SQL语言基础;
对软件架构能力的要求:
理解软件客户端与服务器端的交互过程;
理解操作系统的基本原理(手机、PC);
了解软件系统的三层结构以及协议;
理解项目的技术架构;
测试产品和项目的需求和业务逻辑;
2 自动化测试工具
2.1 自动化测试可行性分析
2.1.1 产品架构与业务可行性分析
a) 单机应用程序:重点考虑界面级的自动化测试;
b) 分布应用系统:接口级、界面级结合;
c) 手机APP应用:接口级、界面级结合,兼容性;
d) 复杂业务:接口级、代码级;
2.1.2 测试技术实现可行性分析
a) 通用优先技术选择顺序:接口级>协议级>界面级>代码级;
b) 自动化测试工具面很广,所以对自动化测试技术底层实现原理的理解应高于对工具的选择;
2.1.3 团队能力可行性分析
a) 测试过程分为:分析、设计、实现、执行,重点要放在分析、设计;
b) 自动化测试仅属于执行环节,所以并非自动化测试技术或工具就可以成功实施自动化测试;
c) 测试团队的技术水平和管理,远比实施自动化测试重要(不能随便分割);
2.1.4 实施可行性分析
a) 最佳情况是早期就应该接触产品架构设计,确保自动化测试可行性,减少为测试而重构代码;
b) 主要用于回归测试和兼容测试,不能以找新bug为目的;
c) 小型企业无法坚持自动化测试(人力、管理);
d) 自动化测试宗旨:为软件测试质量服务,一种测试方法而已;
总结:
a) 需求变动不频繁;
b) 项目周期足够长;
c) 自动化脚本可重复使用;
2.2 自动化测试常用工具
2.2.1 代码级自动化测试常用工具
Junit、CppUnit、PyUnit、GoogleTest(单元测试);
JMock、GoogleMock(快速创建一个Mock对象,只对于面向对象语言编程的多态);
主要功能:断言(条件),参数化(范围、参数),测试用例管理;
2.2.2 接口/协议级
LoadRunner:支持协议测试(虽本身定位为性能测试工具);
Jmeter:HTTP和FTP服务器进行压力和性能测试;
WebLoad:支持HTTP协议;
SoapUI:支持WebSevice协议SOAP;
2.2.3 界面级
QTP:支持Windows,Web,Java,.Net应用程序;
PFR:支持Windows,Web,Java,.Net应用程序;
Selenium/Water:支持 Web应用,Safar,IE,Chrome;
AutoRunner:黑盒测试工具,可以用来完成功能测试、回归测试;
TestComlepe:支持各类应用程序及第三方组件,对象识别能力超强;
Appium/MonkeyRunner:Android,IOS移动应用;