测试是软件制造过程中很重要的一个环节,
很多NB的厂家为了宣传自己的质量或者效率或者技术,都喜欢鼓吹自动化测试.
啥是自动化?
啥能自动化?
为啥要自动化?
啥时候不要自动化?
很多家伙没考虑清楚这几个问题就走向了大规模分布式云自动化测试的不归路.
目前IT业产品无非分为:
1.c/s产品,以windows平台为主,unix系列和手机平台占少数
2.b/s产品,以ie和firefox为主,chrome和safari占少数
我就说说这两种产品类型的自动化测试.
1.啥是自动化?
这篇文章针对的自动化是指模拟手工测试人员的动作和指令,
对测试行为的记录和回放.
这个测试要和单元测试,接口测试甚至性能测试区分开来.
这是功能测试的自动化,不是代码和接口级别的,这两种很容易自动去跑测试任务,
更不是性能测试,性能测试不太需要自动化,那个需要有人认真的冷静的观察,自动化了反而不好.
2.啥能自动化?
a.c/s产品:
用过qtp么?用过autoit么?用过ahk么?
知道窗体,知道控件,知道消息么?
如果都有了解,那就大概能知道什么东西可以自动化测试了.
上面说过,自动化测试主要是模拟功能测试人员的行为,
从程序上实现这种行为就是:
识别控件,发送消息,监听事件,判断结果.
其中最难的是识别控件,不是说技术上难,所有的技术都是简单的!
是有的控件就是不能识别,你又有什么办法?
MS很人性化,他的sdk很多很多控件几乎都可以识别,
而如果你们自己公司的一款c/s产品的控件无法识别,那你就要思考你们公司和MS的差距了,
为啥自己写的控件无法识别?
因为你们的规范太差,或者不够人性,或者就根本不考虑可测试性,
在程序上来说就是没有实现: IAccessible接口!
这个接口是干嘛的?如果不知道,你需要去了解一下MSAA(Microsoft Active Accessibility)
如果没有实现这个标准的接口,当然就很难用QTP或者AutoIT这种常规的测试工具去测试了(开发时留了钩子的除外),
也就是说这个产品从设计的时候就没有考虑到自动化测试的可测性,那还做个屁的自动化?
如果决定要对一个产品做自动化测试,那请在设计的时候就考虑周全,
不要为了节省开发人员的工时而不实现IAccessible接口,
却要求测试人员能够做自动化的测试.
我经常听到不专业的家伙说,我们要对这个或那个产品做自动化测试,但哥哥,你能不能先考虑一下这玩意到底能不能做自动化测试啊?
b.b/s产品,
知道watir或者watix么?知道selenium吗?甚至知道LoadRunner也行啊,道理都是相通.
再不行,知道如何attach一个浏览器进程,然后获得它的JavaScript引擎的console么?
如果知道这些,那也就了解一个b/s产品做自动化测试的大概原理了.
b/s做自动化测试比c/s更通用点,因为浏览器上的按钮都比较好识别,
工具以watir为例,
Watir的IE对象是通过WIN32OLE获得InternetExplorer.Application这个Windows系统对象,通过起内置的各种方法比如打开一个页面,访问一个url,就可以控制浏览器的行为.而InternetExplorer.Application是怎么对一个页面操作的,这个我不清楚,只知道它提供这些接口,而Watir又包了一层接口给使用者.
再看一下FireWatir的FireFox对象,它和IE对象不同, FireFox对象不是通过WIN32OLE方法得到系统浏览器对象的,而是通过在FireFox浏览器上安装jssh的插件,获得浏览器的JavaScript引擎的访问权,从而通过当前运行页面的JavaScript来控制页面动作的.
从FireFox发散出去,我猜InternetExplorer.Application对外开放的接口也可能就是通过InternetExplorer.Application封装了它的JavaScript引擎来实现的.
我们知道了b/s产品自动化执行的原理后,我们就可以知道,只要JavaScript能处理的动作,我们都可以通过自动化来模拟.
但PM或者要求测试进行自动化的人,他一定要知道哪些是JavaScript做不来的,
比如Flash,比如SilverLight,这些产品目前还没有直接开放对象的接口给JavaScript,这就不能做自动化测试.
3.为啥要自动化测试?
这个问题很简单,因为要提高效率,降低出错率,减少重复劳动,降低成本.
提高效率:代码执行测试比人工执行更快.
降低出错率:计算机的行为比人类的行为更单一,多次执行很少会出现不同的结果.
减少重复劳动:自动化测试主要是回归测试,就是将以往主要的测试脚本或者叫回归测试脚本跑一边,员工对重复劳动是没有兴趣的,而计算机不会有抵触情绪.
降低成本:自动化测试的时间可以在员工下班之后,而如果要求员工在下班后还工作那是不人性不和谐的.
4.啥时候不要自动化?
有的东西可测试有的东西不可测试,把不可测试变成可测试是需要成本的,
自动化测试的代码更多的依赖于界面的UI和文案,而UI和文案是多变的,所以维护自动化测试的代码也是需要成本的,
如果我们把一个手工测试人员当作一个进程(因为一台电脑上的b/s或者c/s产品正常的时候只会有一个用户在使用),但自动化测试要求更快更高效率的时候,会希望自动化测试用例能够并发进行,也就是同时需要多台自动化测试的客户端,这些客户端是需要调度和管理的,这就还需要一个管理平台,同时负责测试环境的维护,开发代码的及时更新与部署,以及自动化测试数据的自动生成,这些也都要成本的.
而自动化测试带来的收益是否会大于这个成本是需要好好考虑的,甚至是需要找一两个项目去实践的.
就我个人来看,一个中小公司,人肉测试的成本要小于自动化测试的成本.尤其是在这个小行业还没有被重视和深入挖掘的现在.
我了解过一些很大的公司的一些自动化测试框架,
这些东西听起来真得很吓人,但如果你自己问下去,他们说不出个所以然,
其中绝大多数都是用了这个东东那个东东,然后整体包装一下,
底层实现的细节他们都不了解,并没有掌握核心技术,
只掌握工具的使用是肤浅的,正应了那句话"无他,唯手熟耳"
分享到:
相关推荐
【自动化测试】 自动化测试是软件开发过程中的一种关键实践,旨在减少手动测试的工作量,提高测试效率和准确性。它允许开发者编写脚本或使用特定工具来执行一系列预定义的测试用例,确保软件功能的正确性和稳定性。...
金融行业交互式应用安全自动化测试解决方案主要关注的是在金融科技快速发展和业务互联网化的背景下,如何有效地保障应用安全。Gartner的报告指出,超过80%的外部风险源于应用漏洞,因此,应用安全已经成为金融机构...
本发明涉及软件测试领域,尤其是针对软件项目开发中自动化回归测试流程的改进。所谓回归测试,是指在软件开发过程中对新编写的代码或者修改后的代码进行测试,以确保新增代码或修改没有影响到原有代码的正常功能。...
自动化测试工具Selenium是Web应用程序测试的首选工具之一,它允许开发者模拟用户行为,并对网页进行交互,从而实现自动化测试。Selenium的核心组件是WebDriver,它支持多种浏览器,包括Chrome、Firefox、Safari等,...
整机级HIRF仿真验证测试方案及测试自动化是一项专门针对高强度辐射场环境下的飞机设计和机载设备装机进行安全性验证的方案。高强度辐射场(HIRF)环境对于飞机的电子系统而言,是一个潜在的危险因素。随着航空技术的...
所谓自动化测试,就是使用自动化测试工具来对软件进行测试,自动化测试工具可以自己开发,也可选用现成的工具。常用的自动化测试工具有:QTP,WinRunner,RationalRobot,AdventNetQengine,SilkTest,QARun,...
Web自动化测试是软件测试领域的重要组成部分,特别是在大型Web应用程序的开发和维护中。Selenium作为一款流行的Web自动化测试工具,其在面试中常常被提及。本文将深入探讨Selenium的相关知识点,包括元素定位、测试...
多通道遥控自动化测试技术是一门涉及远程遥控设备的测试与验证的高级技术。它主要应用于载人飞船等航天设备的遥控系统中,确保遥控指令的有效传递和数据的准确注入。该技术的发展,是为了应对遥控设备高复杂度和高...
你感到很惊讶,项目经理是从什么地方了解到自动化测试的,为什么突然对自动化测试这么着迷,你突然想起几周前某个工具厂商的销售人员曾经到公司拜访…… 你忧心重重,难道项目经理已经掉入了所谓的自动化测试陷阱中...
所谓自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。 软件测试,特别是测试自动化技术属于当前国际软件...
### Jenkins与Python自动化测试持续集成教程 随着软件开发周期的不断加速,持续集成(CI)已成为提高软件质量、加快发布速度的重要手段之一。本教程旨在详细介绍如何利用Jenkins结合Python实现自动化测试的持续集成...
测试行业也是如此,测试员都寻求更好的职业机会,软件测试岗同时也在做筛选,所谓优胜劣汰。 那么面临跳槽季,想在测试行业大展身手的你,真的懂软件测试嘛? 1、 基础知识掌握 2、测试流程掌握 3、面试过程中的提问...
5. 试产与验收:自动化项目的试产与验收是指对自动化设备进行试运行和测试,以确保设备的运行稳定、安全和高效。在试产与验收阶段,应对设备的性能、安全性和可靠性进行评估和调整。 6. 使用与维护:自动化项目的...
所谓自动化测试框架,是由一些假设,概念和为自动化测试提供支持的实践组成的集合。
1. **自动驾驶等级**:自动驾驶通常被分为L0到L5级,其中L0表示无自动化,L5表示完全自动化。附件B可能详细描述了如何根据SAE(国际自动机工程师学会)或中国本土的标准来验证不同级别的自动驾驶功能。 2. **测试...