软件测试笔记(十一)自动化测试和手动测试的选择

前言

软件测试是为了评估软件应用程序的功能,以肯定开发的软件是否知足指定的要求,并肯定缺陷,以确保产品完好陷,从而生产出高质量的产品。而软件测试分为手工测试和自动化测试两大类。手工测试和自动化测试都有各自的优势和缺点,并且咱们知道项目都有很关键的要素:质量、成本和时间,任何项目的目标都是得到高质量的产出,同时控制完成项目所需的成本和时间,因此了解手工测试和自动化测试以及什么时候使用手工测试和什么时候使用自动化测试之间的区别是很是必要的。web

robotic-automation-for-companies.jpg

手动测试

对软件进行手工测试以发现缺陷的过程。测试人员是站在用户的视角,并确保全部功能都按照需求文档中那样工做。在这个过程当中,测试人员执行测试用例并在不使用任何自动化工具的状况下手动生成报告。编程

手动测试类型

  • 黑盒测试:黑盒测试是一种软件测试方法,测试人员在测试中测试被测软件的功能,而不查看内部代码结构。这能够应用于软件测试的各个层次,如单元、集成、系统和验收测试。
  • 白盒测试:它是基于应用程序内部的代码结构的测试。在白盒测试中,系统的内部视角以及编程技巧被用来设计测试用例。这种测试一般在单元级别进行。
  • 单元测试:也称模块测试或组件测试。这样作是为了检查源代码的单个单元或模块是否正常工做。一般它是由开发人员在开发人员的环境中完成的。
  • 系统测试:测试完整的应用程序,以评估系统是否符合其客户的需求,咱们称之为系统测试,也称为端到端测试。目标是已完成的系统,以确保软件是否按预期工做。
  • 集成测试:集成测试是测试两个软件单元之间接口的过程。集成测试有三种方式。大爆炸法,自上而下法,自下而上法。
  • 验收测试:一般它由最终用户和测试人员一块儿完成的,以验证软件的功能是否按照用户需求来实现。进行测试后,客户能够接受或拒绝所提供的软件功能。验收测试的类型有Alpha、Beta和Gamma测试。

固然还有许多的手动测试种类,请查考《软件测试笔记(三)多种多样的测试类型》。segmentfault

什么时候适用手动测试

  • 探索性测试:由行业专家进行探索性测试。他们经过探索应用程序的功能来执行测试,而不了解详细的需求。
  • 可用性测试:验证软件是否用户友好,是否被最终用户温馨地使用。主要重点是检查最终用户是否可以轻松理解和操做软件。一个好的软件应该是自我探索的,具备引导性的,而且不须要太多的培训来操做它。
  • 随机测试:测试人员在不遵循任何文档和测试设计技术的状况下随机测试软件。若是试人员的知识很是丰富,则主要执行此类测试,测试人员在没有任何测试用例或业务需求文档的状况下随机测试应用程序。

什么时候使用手动测试,而非自动化测试

  1. 当项目处于初始开发阶段时,测试框架搭建完成前。
  2. 当测试用户界面。
  3. 当须要进行探索性或随机性测试。
  4. 若是项目是短时间的,与手动测试相比,编写脚本和搭建测试框架很是耗时的时候。
  5. 若是测试用例不能自动执行验证码示例。

手动测试的优劣

优:
  1. 适用范围广,能够在各类软件上进行手动测试。
  2. 对于短生命周期产品更可取。
  3. 新设计的测试用例应该手动执行,以确保用例的正确性。
  4. 应用程序在自动化以前必须手动测试。
  5. 在需求频繁变化的项目和GUI不断变化的产品。
  6. 与自动化测试相比,它的初始投资更便宜。
  7. 开始手动测试所需的时间和费用更少。
  8. 它容许测试人员执行随机测试。
  9. 测试人员没有必要了解自动化工具和框架。
劣:
  1. 手工测试主要是在作回归测试时耗时,并且重复性很大。
  2. 与自动化测试相比,手动测试不太可靠,由于有人的影响。因此总会有人为因素致使的一些错误。
  3. 从长远来看,相比于自动化测试代价更高。
  4. 没法重用,由于没法记录整个测试过程。

自动化测试

自动化测试是使用自动化工具来发现软件缺陷的测试过程。在这个过程当中,自动化工具会自动执行测试脚本并生成结果。一些最流行的自动化测试工具是QTP、Selenium Webdriver,Jmeter, TC等。windows

经常使用的自动化工具:并发

  1. HP QTP
  2. Selenium
  3. LoadRunner
  4. SilkTest
  5. TestComplete
  6. WinRunner
  7. Jmeter

什么时候适用自动化测试

  • 回归测试:对一个已经测试过的缺陷,在修改后进行的重复测试,目的是用于发现因为软件或其余相关或不相关的软件组件的变化而引入的任何缺陷。回归测试很是适合作自动化测试,由于软件常常更改代码,并且须要进行及时的测试。
  • 性能测试:测试软件的速度、可伸缩性和稳定性。性能是指实现知足项目或产品性能目标的响应时间、吞吐量和资源利用率级别。它很是适合自动化测试。

能够同时进行手动和自动化测试的测试类型:框架

  • 系统测试:测试软件是否符合其指定的要求实现,也称端到端测试。目标是验证已完成的系统,以确保应用程序是否按预期工做。
  • 单元测试:单元测试也称为模块测试或组件测试。为了检查代码的单元或模块是否正常工做。一般由开发人员在开发人员的环境中完成的。
  • 验收测试:一般它由最终用户和测试人员一块儿完成的,以验证软件的功能是否按照用户需求来实现。进行测试后,客户能够接受或拒绝所提供的软件功能。验收测试的类型有Alpha、Beta和Gamma测试。

哪些场景不适合自动化测试

  • 探索性测试
  • 用户界面测试
  • 随机测试

什么时候使用自动化测试,而非手动测试

  • 处理重复和耗时的任务
  • 并发测试
  • 非功能性测试,如负载、性能、压力测试
  • 避免人为错误

自动化测试的优劣

优:
  1. 自动化测试的执行速度更快。
  2. 从长远来看,它比手工测试便宜。
  3. 自动化测试更可靠。
  4. 自动化测试可扩展性好和更通用。
  5. 用于回归测试。
  6. 可重用,由于自动化过程能够被记录。
  7. 它不须要人为干预。测试脚本能够在无人参与的状况下运行。
  8. 它有助于提升测试覆盖率。
劣:
  1. 仅推荐用于大型,稳定的产品。
  2. 自动化测试最初费用很昂贵。
  3. 大多数自动化工具都很昂贵,固然除开源软件外。
  4. 它会有有一些限制,例如处理验证码,获取ui的视觉方面的信息。
  5. 需求反复变化时。
  6. 不是全部的工具都支持各类测试如windows、web、移动性、性能/负载测试。

总结

自动化测试 手动测试
自动化测试更可靠。每次执行相同的操做。它消除了人为犯错误的风险。 手动测试相对不太可靠因为可能会出现人为失误,人工检测也有可能不许确。
自动化测试初期投资较高。测试工具须要投资从长远来看,它比手动的便宜。与手工测试相比,从长远来看,性价比更高。 手工测试的初始投资小于自动化。人力资源须要投资。从长远来看,与自动化测试相比,性价比更低。
当咱们进行回归测试时,自动化测试则是很是有意义的。 若是测试只须要运行一次或两次,那么手动测试是实用的选择,在这种状况下,测试用例不会重复运行。
执行是经过软件工具完成的,所以它比手动测试更快,而且与手动测试相比须要更少的人力资源。 测试用例的执行很是耗时,须要更多的人力资源
不可能进行探索性测试 能够进行探索性测试
性能测试如负载测试、压力测试等是自动化测试的选择。 手动化的性能测试不是一个好的选择
自动化测试能够并行完成,减小测试执行时间。 在手动测试中并行执行测试用例不是一件容易的事情。咱们须要更多的人力资源来作到这一点,而且变得更加昂贵。
它能够并行完成,减小测试执行时间。 在手动测试中并行执行测试用例不是一件容易的事情。咱们须要更多的人力资源来作到这一点,而且变得更加昂贵。
须要一些脚本方面的知识 一般不须要脚本知识
集成到CI/CD(持续部署/发布)很方便 没法集成到CI/CD(持续部署/发布)
人工干预很少,因此作用户界面测试效果很差 它涉及到人工干预,因此进行用户界面测试是很是有效的

无论黑猫白猫,抓到老鼠的就是好猫。在测试中也是一样,无论自动化测试和手动测试,能发现缺陷,最合适的就是好的测试方法。但愿上面手动测试和自动化测试的区别和适用范围能够帮助你们找到合适的测试方法。若是你们有感兴趣的话题和相关感觉,也请回复到评论中和你们一块儿分享。工具