一直以来,软件的测试主要是以手工测试为主,但是随着现代软件的复杂程度的加深,人们对使用手工方式来完成软件测试感到的越来越力不从心,同时因为在软件测试中存在着大量的重复性工作,而这种工作是比较适合机器而不是人类来完成的。
因此,自动化测试成为最佳的解决方案;而所谓自动化测试,实际上是将大量的重复性的测试工作交给计算机去完成,一个优秀的自动化测试方案,不但可以满足科学测试的基本要求,而且可以节约大量的时间、成本、人员和资源,这样不仅会大大减少软件工作人员的工作强度,而且会极大的提高企业效益。由于自动化测试在我国开展的时间还不是很长,所以容易有人对它产生误解。特别是有些软件企业的领导,有些人认为自动化测试代价太高,很难实施;而有些人却认为自动化测试可以容纳一切,可以很容易的替换手工测试。其实这些看法都是很片面的。
本文通过对软件测试活动的实施过程的各个步骤的展开的顺序来对手工测试和自动化测试做一个简单的比较,以达到澄清测试误区目的,为我们在软件测试项目中对测试方法的选择做一点参考。
软件测试的实施过程
对于软件测试活动本身而言,也是一个工程化的过程,要经历测试项目立项,测试计划的编制,测试的设计,测试的实施,测试的执行,测试的评估几个阶段。这一过程对手工测试也好,自动化测试也好都是一样。软件测试活动实施过程图如下所示:
图片来自pointer_y的博客
手工测试和自动化测试的特点及各自适用场合
手工测试特点:
● 测试人员要负责大量文档、报表的制订和整理工作,会变得力不从心。
● 受软件分发日期、开发成本及人员、资源等诸多方面因素的限制,难以进行全面的测试。
● 如果修正缺陷所需时间稍长,那么想将手工测试应用于回归测试将变得异常困难。这是因为需要测试的测试用例太多。
● 对测试过程中发现的大量缺陷缺乏科学、有效的管理手段,责任变得含混不清,没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率。这样往往会导致最后的汇总报表数据不准确。
● 反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一,测试花费的时间越长,测试的严格性也就越低。
● 难以对不可视对象或对象的不可视属性进行测试。
自动化测试的特点:
● 可以运行更多更频繁的测试用例。
● 可以执行一些手工测试困难或者不可能做的测试。如对不可视对象的测试,利用面向对象的自动化测试脚本就很容易实现。
● 可以更好的利用资源。在夜间执行自动测试用例。
● 测试具有移植性和可重复性。好的测试脚本往往具有较好的平台移植性。
● 可以更快地将软件推向市场。因为自动测试节省了大量的时间。
但是自动化测试要求的先期投入比较大,而且要求人员必须经过严格的培训。所以手工测试和自动化测试各自适用的场合如下:
● 测试很少执行的项目中。当测试用例执行频度太小时(一年一次),我们可以直接使用手工测试就可以了。
● 软件运行仍然不稳定时,适合使用手工测试。
● 测试结果很容易通过人验证的测试项目适合手工测试。
● 测试项目中涉及物理交互比较多的时候适合手工测试。如需要经常查看打印机,绘图仪的输出时。
● 软件维护时使用的回归测试适合自动化测试。
● 执行负载、压力测试时适合自动化测试;例如测试服务器的最大访问上限等。
● 配置和兼容性测试等项目适合自动化测试。
自动化测试其实就是通过自动化工具执行定制好的测试脚本,可以节省人力和时间成本,提高测试效率。但自动化测试不是并不能完全代替人工测试。自动化测试能解决很多问题,同时也带来很多问题。下面是我对自动化与手工测试的一个对比,算是一点心得。
(1)覆盖率
优势:在同等时间内,启动自动化测试能够覆盖更多的功能。
劣势:只适合回归测试,开发中的功能不划算。对于开发中功能,需求或者实现的更改,都会导致自动化脚本的变更,维护脚本的工作量和开发这个功能不相上下,实在是不划算。
(2)测试效率
优势:完成同等数目的测试,启动自动化速度更快。
劣势:脚本开发比用例开发耗时长,包括编写脚本、调试脚本、维护脚本,而手工测试也要对测试哦用例进行撰写、评审、修订。由于用例编写更多为自然语言,时间上肯定会少。这里也引申一个另外的一种观点,直接用自动化脚本替代测试用例,也不乏是很好的做法。
(3)执行可靠性
优势:可靠的按脚本执行,后续定位、复现有明确的配置路径可循。
劣势:程序是死的,人是活的。目前而言,最智慧的还是人。可以说是成也萧何败也萧何,自动化的稳定来源于其死板,而人的智慧体现在思维的跳跃,跳跃的思维也会导致后期不易定位。
(4)资源利用率
优势:设备、仪表资源能够7*24小时利用。
劣势:无。这点上,自动化完胜。
(5)人力上限
优势:可进行压力、负载、并发、重复等人力不易完成的任务。
劣势:无。这点,自动化完胜。
(6)人员培养
优势:提升测试人员能力,提高与开发沟通的效率。
劣势:培养一名自动化测试人员耗费资源更多,不但是功利的说自动化工程师更贵,同时在团队中推广自动化配套的培训、测试管理、产品开发环节都要跟上。增加的环节从某种意义上讲,就是浪费,因为如果不弄自动化,都可以省了。
关于自动化测试的学习路线
一、软件自动化测试的学习步骤
大概步骤如下:
1. 做好手工测试(了解各种测试的知识)-> 2. 学习编程语言-> 3. 学习Web基础(HTML,HTTP,CSS,DOM,Javascript)或者 学习Winform
-> 4. 学习自动化测试工具 ->5. 学习自动化测试框架 -> 6. 实现自动化测试用例 -> 7. 开发自动化测试工具 ->8. 开发自动化测试框架
自动化测试的最高境界是: 开发测试工具,设计自动化测试框架, 让别人用。
二、自动化测试的本质
自动化测试的本质是:用程序测试程序。 也就是说学习“编程语言”是学习自动化测试的基础。
很多人问我学自动化测试,应该去学什么自动化工具。 我的回答是,第一步:应该先学习编程语言,以后再去学自动化测试工具
自动化测试是一定要写代码的, 编程语言水平的高低决定了自动化测试水平的高低, 有了扎实的编程技术,干什么都可以。
学习编程语言时, 要把自己当做开发人员, 系统地学习各种编程知识。
三、自动化测试学习的误区
很多新手一开始,就学习复杂的自动化测试工具, 我觉得这样是本末倒置了。
如果不先理解HTTP协议, 就不会理解Jemeter, LoadRunner, Fiddler, SoapUI这些工具的。
如果不先理解HTML,DOM, 就不会理解Firebug 这种工具的
如果不先理解Win32 API, 就不会理解Windows 窗体自动化测试的原理的。
如果自己没有开发过网站, 就不会理解网站的各个方面,测试起来难免有遗漏。
总之学习自动化测试,需要循序渐进, 把基础打好。
四、自动化测试的职位
自动化测试工程师的职位叫做: (SDET) Software Development Engineer in Test. 专注于自动化测试
手动测试工程师叫: (STE)Software test enginer. 专注于手动测试
在微软有很多SDET的职位,但是没有STE的职位, STE职位一般都是外包给外包公司的, 目前自动化测试还是非常吃香的。
五、自动化测试分类
自动化测试也有非常多的种类,
- 对Web UI 的自动化测试程序
- 对Windows 窗体UI的自动化测试程序
- API测试, 比如(测试WCF service, Web API 等)
- 数据库测试, 比如测试存储过程
- 接口测试 (这种只能用自动化测)
- 单元测试
- 性能测试, 性能测试都需要用到自动化
六、Web自动化测试分类
目前大部分项目都是Web的, 所以我们说的自动化测试,大部分都是针对Web程序的自动化测试, Web自动化测试分两类:
第一类是:模拟用户真实操作,比如,模拟点击鼠标,键盘输入,等,去操作浏览器上的控件。 (代表框架有selenium-webdriver, VS Coded UI)
这类的自动化测试的是通过高级语言(C#, JAVA, Python 等)来调用selenium的一些工具来操作浏览器,帮助我们实行Web UI自动化
第二类是:模拟HTTP请求。
七、自动化测试的知识点
应该像开发人员一样的心态去学习技术, 自动化测试需要掌握以下的知识:
了解Javascript, CSS的知识。
熟练掌握DOM和HTML知识, (用来解析Web界面)
熟练掌握XML技术,(需要用XML保存测试数据,用XML展现测试报告)
熟练使用C# P/inoke技术调用Windows API (可以用来操作Winform 窗口)
熟练掌握窗体"句柄"的概念
熟练使用C# 操作Windows 注册表
熟练使用C# 中的Process 类
熟练掌握数据库的基本操作语句 (测试数据库肯定要用到)
熟练掌握HTTP协议的知识 (请参考我的 HTTP系列博客 [HTTP协议详解])
熟练掌握C# 中的HttpWebRequest 类的用法 (用于模拟HTTP请求)
熟练掌握正则表达式
八、自动化测试的书籍推荐
关于软件自动化测试的书,真心不多, 我查过市面上所有关于自动化测试的书,只找到下面这边书, 电子档可以点击就下方卡片软件测试最新自学教程
九、自动化测试工具
测试套件工具: JUnit, Nunit, MSTest, 这几个工具功能都一样学起来比较简单。
性能测试工具: JMeter, VSTS 负载测试, LoadRunner(收费), QTP(收费)
Web UI 测试框架:WebDriver/Selenium, VSTS Coded UI, Watri
Windows UI 测试框架:VSTS Coded UI
其他工具: firebug, Fiddler
建议观看视频学习
进阶Python接口自动化测试必备教程(2023全网最详细)