【1】第1章 自动化测试基础 (测试分类+分层的自动化测试)
1.测试自动化意味着使用一个软件工具, 对被测试的应用程序运行可重复的测试. 为回归测试提供响应能力。
2.优点:
频繁地回归测试
提供开发者快速地回馈
几乎没有限制测试案例的迭代执行
支持敏捷和极限开发方法
测试案例的文档化
自定义缺陷报告
查找手工测试遗漏的缺陷
3.自动化测试并不总是有益的;如果一个应用程序有非常紧的时间期限,没有现成的、可得到的测试自动化,而且测试必须在 给定的时间范围内完成,显然手工测试是最佳的解决方案。
4.Selenium IDE(集成开发环境)是一个用于构造测试脚本的原型工具,是个FireFox插件;有录制功能;
1.1 软件测试分类
根据项目流程阶段划分软件测试
1)单元测试:单元测试(或模块测试)是对程序中的单个子程序或具有独立功能的代码段进行测试的过程。
2)集成测试:集成测试是在单元测试的基础上,先通过单元模块组装成系统或子系统,再进行测试。重点是检查模块之间的接口是否正确。
3)系统测试:系统测试是针对整个产品系统进行的测试,验证系统是否满足需求规格的定义,以及软件系统的正确性和性能等是否满足其需求规格的要求。
4)验收测试:验收测试是部署软件之前的最后一个测试阶段。验收测试的目的是确保软件准备就绪,向软件购买者展示该软件系统能够满足用户的需求。
白盒测试、黑盒测试、灰盒测试
根据软件测试工作中对软件代码的可见程度进行的划分。
1)黑盒测试。
只关心软件的输入数据和输出结果,检查程序呈现给用户的功能是否按照需求规格说明书的规定正常使用。
眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
2)白盒测试。
研究里面的源代码和程序执行结果。
按照程序内部的结构测试程序,检验程序中的每条逻辑路径是否都能按预定要求正确工作。
3)灰盒测试。
灰盒测试既关注输出对于输入的正确性,同时也关注内部表现。
不像白盒测试那样详细、完整,它只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
功能测试与性能测试
1)功能测试。
功能测试主要检查实际功能是否符合用户的需求,因此测试的大部分工作也是围绕软件的功能进行。
功能测试又可以细分为很多种:逻辑功能测试、界面测试、易用性测试、安装测试、兼容性测试等。
2)性能测试。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
时间性能:主要是指软件的一个具体的响应时间。例如一个登录所需要的时间,一个商品交易所需要的时
间等。当然,抛开具体的测试环境,来分析一次事务的响应时间是没有任何意义的。需要搭建一个具体且独立
的测试环境下进行。
空间性能:主要指软件运行时所消耗的系统资源,例如硬件资源,CPU、内存,网络带宽消耗等。
手工测试与自动化测试
1)手工测试。
手工测试就是由测试人员一个一个地去执行测试用例,通过键盘鼠标等输入一些参数,并查看返回结果是否符合预期结果。
通常是指我们在系统测试阶段所进行的功能测试。
2)自动化测试。
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计测试用例并通过评审之后,由测试人员根据测试用例中描述的规则流程一步步执行测试,把得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间和硬件资源,提高测试效率,便引入了自动化测试的概念。
自动化测试又可分为:功能自动化测试与性能自动化测试。
功能自动化测试:它是把以人为驱动的测试行为转化为机器执行的一种过程。
通过测试工具(或框架)录制/编写测试脚本,对软件的功能进行测试,并验证测试结果是否正确,从而代替部分的手工测试工作,达到节约人力成本和时间成本的目的。
性能自动化测试:通过性能工具来模拟成千上万的虚拟用户向系统发送请求,从而来验证系统的处理能力。
冒烟测试、回归测试、随机测试、探索性测试和安全测试
1)冒烟测试。
是指在对一个新版本进行大规模的系统测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
指测试小组在正式测试一个新版本之前,先投入较少的人力和时间验证一个软件的主要功能,如果主要功能都没有运行通过,则打回开发组重新开发。这样做的好处是可以节省时间和人力投入到不可测的项目中。
2)回归测试。
回归测试是指修改了旧代码后,重新进行测试以确认修改后没有引入新的错误或导致其他代码产生错误。
一般是在进行软件的第二轮测试时开始的,验证第一轮中发现的问题是否得到修复。当然,回归也是一个循环的过程,问题通不过,则需要开发人员修改后再次进行回归,直到所有问题回归通过为止。
3)随机测试。
是指测试中的所有输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
优点:可以发现一些隐蔽的错误,
缺点:例如测试不系统、无法统计代码覆盖率和需求覆盖率、发现的问题难以重现等。
一般是放在测试的最后执行。其实,随机测试更专业的升级版叫探索性测试。
4)探索性测试。
可以说是一种测试思维技术,它没有很多实际的测试方法、技术和工具,但是却是所有测试人员都应该掌握的一种测试思维方式。
强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
5)安全测试。
安全测试是在IT 软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。
安全测试现在越来越受到企业的关注和重视,安全性问题造成的后果是不可估量的,尤其是互联网产品,最容易遭受各种安全攻击。
1.2 分层的自动化测试
基本观点是:我们应该有更多的低级别的单元测试,而不仅仅是通过用户界面运行的高层的端到端的测试。
传统的自动化测试我们可以理解为基于产品UI 层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。
分层自动化测试倡导的是从黑盒(UI)单层到黑白盒多层的自动化测试体系,从全面黑盒自动化测试到对系统的不同层次进行自动化测试:
单元自动化测试
单元就是人为规定的最小的被测功能模块。
一个函数、一个类、一个菜单、一个窗口;
范的进行单元测试就需要借助单元测试框架,如java 语言的Junit、TestNG,C#语言的NUnit,以及Python 语言的unittest、pytest,目前几乎所有的主流语言都会有其相应的单元测试框架。
Code Review:代码审查、代码评审,软件开发过程中,通过对源代码进行系统性检查的过程;
Java 语言中基于Eclipse 的Review Clipse 和Jupiter、主要针对Python 语言的Review Board。
接口自动化测试
可分类:模块接口测试和Web 接口测试
(1)模块接口测试,主要测试模块之间的调用与返回。强调对一个类方法或函数的调用,并对返回结果的验证,所用到的测试工具与单元测试相同。
(2)Web 接口测试又可分为两类:服务器接口测试和外部接口测试。
服务器接口测试:指测试浏览器与服务器的接口。Web 开发一般分前端和后端,把前端通过调用这些接口来获得需要的数据。
外部接口测试:指调用的接口由第三方系统提供。典型的例子就是第三方登录,接口测试也有相应的类库或工具,例如测试HTTP 的有HttpUnit、Postman 等。
UI自动化测试
主流的测试工具有UFT、Watir、Robot Framework、Selenium 等。QUnit 就是针对JavaScript 的一个强大的单元测试框架。