前言
目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出不穷,但是,能够明白自动化测试并很好落地实施的团队还不是非常多,我们接来下用通俗的方式来介绍自动化测试……
自动化测试
自动化测试就是用程序测试程序。项目需要快速迭代快速交付,或手工测试无法完成(譬如性能测试)时,就需要考虑自动化测试,自动化测试可以简单分为:
- UI driven testing - 模拟鼠标键盘事件来验证程序行为,或者录制回放(UI通常变化较快,录制脚本不容易维护,因此不推荐)
- Code driven testing
- Unit Test - 利用xUnit框架测试类方法,模块接口,库接口的输入输出来验证程序行为
- API driven testing - 程序常常分层设计,可以测试每一层的API interface来验证程序行为
记住,自动化测试是为了提高效率,测试脚本要易维护,不能让测试脚本变成另一种技术债务,不能为了自动化测试而自动化测试。
自动化测试框架
正如有各种各样的开发框架,自动化测试也有各种各样的框架,这些框架可以帮助我们更快速的实现自动化测试,更方便的写测试脚本,让我们更专注于项目逻辑和测试本身,自动化测试框架非常多,有的开源,有的收费,开源测试框架基本能满足我们的大多数需要,因此我们将主要推荐开源测试框架。
如何选择测试框架?不同框架适用不同测试目的,支持不同平台,支持不同语言等,想明白这几个问题就很容易找到适合自己的框架了。
Unit test, UI driven test, performance test这三种类型是比较常见的自动化测试类型,相应的自动化测试框架也多一些。
下面列出一些比较常见的框架,后面会详细介绍一些框架。
- STAF/STAX - Software Test Automation Framework (STAF)
是由IBM开发的开源、跨平台、支持多语言的自动化测试框架 - Robot Framework
- 由Nokia
Networks提供的跨平台、支持Python,Java等语言的开源测试框架,主要代码由Python实现,是一种keyworlddriven的测试框架。可以通过XML-RPC插件实现跨机器的testingRobotFramework +Selenium是比较常见的web UI的测试方案。 - STAF和RobotFramework都属于管理执行框架,本身不提供基础的自动化测试支持,一般会集成一个其他自动化测试框架,譬如robot可以集成selenium,
- http://wiki.opensfs.org/Automation_framework_evaluation有STAF vs Robot
Framework的比较. - TestNG - Java功能测试一般使用这个框架
- JMeter - Java性能测试一般使用这个框架
- UI testing framework:
- QTP(收费) - HP QuickTest Professional
- calabash-android, calabash-ios - 移动平台的测试框架
- Selenium/webdriver - web UI测试一般使用这个框架
- Robotium - android UI测试一般使用这个框架
- AutoIt - windows UI,基于windows控件消息
- UI Automation - 微软提供的测试框架,基于MSAA技术
- LoadRunner(收费) - HP提供,用于性能测试
iOS/Android/OSX等平台都自带了测试自动化的支持,Visual Stadio和Xcode也包含自动化测试工具.
xDD
软件工程界流行各种xDD (x driven developmen),下面介绍几个:
TDD - Test Driven Development
大概的流程是先针对每个功能点抽象出接口代码,然后编写单元测试代码,接下来实现接口,运行单元测试代码,循环此过程,直到整个单元测试都通过。
BDD - Behavior Driven Development
BDD基于TDD,使用Given/When/Then的句式描述一个个use case,描述更接近自然语言和容易理解,方便DEV/QA/PO/stakeholders等人员相互交流。Cucumber是目前流行的BDD框架,由Ruby实现。
其他的xDD还有IDD(Inteface Driven Development), DDD(Domain Driven Development), FDD(Feature Driven Development), MDD(Model Driven Development), ATDD(Acceptance Test-Driven Development)等。
个人认为,程序能做到Interface Driven Design就可以有效的实现模块间的解耦和方便测试代码的编写,IDD也是TDD的基础,因此开发代码时需要先做到IDD,再做到TDD,其他的xDD则未必需要。
下面是我整理出来的一份软件测试工程师全过程方向知识架构体系图。
希望大家能在这个成长过程中收益良多。可以说,这个过程会让你痛不欲生,但只要你熬过去了。以后的生活就轻松很多。正所谓万事开头难,只要迈出了第一步,你就已经成功了一半,古人说的好“不积跬步,无以至千里。”等到完成之后再回顾这一段路程的时候,你肯定会感慨良多。
干货知识分享
欢迎大家加入我的学习交流群里面包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试,面试时面试官必问的知识点等。