`
CharlesCui
  • 浏览: 417369 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[测试]那些所谓的自动化啊

阅读更多
测试是软件制造过程中很重要的一个环节,
很多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产品正常的时候只会有一个用户在使用),但自动化测试要求更快更高效率的时候,会希望自动化测试用例能够并发进行,也就是同时需要多台自动化测试的客户端,这些客户端是需要调度和管理的,这就还需要一个管理平台,同时负责测试环境的维护,开发代码的及时更新与部署,以及自动化测试数据的自动生成,这些也都要成本的.

而自动化测试带来的收益是否会大于这个成本是需要好好考虑的,甚至是需要找一两个项目去实践的.
就我个人来看,一个中小公司,人肉测试的成本要小于自动化测试的成本.尤其是在这个小行业还没有被重视和深入挖掘的现在.


我了解过一些很大的公司的一些自动化测试框架,
这些东西听起来真得很吓人,但如果你自己问下去,他们说不出个所以然,
其中绝大多数都是用了这个东东那个东东,然后整体包装一下,
底层实现的细节他们都不了解,并没有掌握核心技术,
只掌握工具的使用是肤浅的,正应了那句话"无他,唯手熟耳"
分享到:
评论
12 楼 CharlesCui 2010-06-24  
gigix 写道
楼主自己想想用AutoIT或者Watir做做测试,哪怕经验不够吧,起码路子是对的
这装12+1的和打广告的一上来,就直往歪路上带了


3ks gigix,

要么我写的东西自己没理解明白就写了,要么就是回帖的几个同学不是很善意,
不管是autoit还是watir还是selenium还是什么的,我都玩过,虽然我的确不是做这方面工作的,但我都还是有点了解的,技术这方面不谈了,不很精,但什么东西都会点,也做过一些开源项目,没那些愤愤想的那么没有底蕴。

那些回帖的同学上来就劈头盖脸的把我批的一无是处,这个我觉得是他们的可悲,让人认为是职业愤愤。

总之,我泡论坛纯粹为了学习,我不会发我哪天哪天去哪国了,这个月花了多少多少钱买什么东西了,给车子换了几个17寸的大脚和平衡杆又花了多少钞票,我的博客里面几乎全都是技术文章,而且最近一年的东西几乎都是原创了,这说明我是认真学习的。大家可以批斗,但要把你自己的真材实料拿出来。

一些愤愤把论坛的氛围弄的很差,非常的扫兴。
11 楼 gigix 2010-06-24  
sigmaIsland 写道
自动化框架封装:
       Scripts
         ↓
        API
         ↓
   Control library
...
测试人员只需要下达操作动作,而具体这个动作使用了那些测试工具来实现,是API内部的事情,不需要测试人员分心。
...
测试人员不需要去担心在那个页面,如何输入等具体的细节。

呃~~
听起来很美
没有自己动手做过几年自动化测试的人突发奇想要做个自动化测试工具的时候,通常都会想到这条路上来
然后用这些听起来很美的词把某个同样从来没做过自动化测试工作的领导打晕
然后害死一票真正去用它的人
(参见拙作如何做一个能害死人的自动化测试工具

楼主自己想想用AutoIT或者Watir做做测试,哪怕经验不够吧,起码路子是对的
这装12+1的和打广告的一上来,就直往歪路上带了
10 楼 CharlesCui 2010-06-24  
谢谢大家的关注,这么一个坟贴能被大家挖出来,多少都脱离不了一些娱乐精神.

那些能力不错的同学并且在帖子中给出自己观点的朋友的建议,我积极的学习,
但那些拿别人的东西过来装X,并说三道四的家伙就闪开吧.

我喜欢大家来批评,这能让那些潜水的大牛们把自己的的真知灼见抛出来,
但悲剧的是,一些小丑也经常借机炫耀.

为啥我N久前发帖的时候你们不出来说说,而等到高人过来指点我一下的时候,你们也跳出来装X,这不是我的遗憾,而是你们的笑柄.

顺道说一句,我不是正规的开发,也不是正规的测试,哥是在IT公司打酱油的,别跟哥装专业,哥不是专业人士,但我爱学习.

PS:那些鄙视我的同学如果真有自己的真本事,请你们继续鄙视,但要把自己的本事说清楚讲出来,否则大家都认为你们装X.JE的风气会被你们毁了的.
9 楼 kaverjody 2010-06-22  
楼主的观点很有意思,不知道您有没有仔细思索过测试自动化是干什么用的,以及目前测试自动化领域的技术知识到底是怎么个分布。

比如说,我觉得楼主您估计是不知道测试自动化框架是什么东西,如下这个链接您可以去看看:
- http://safsdev.sourceforge.net/FRAMESDataDrivenTestAutomationFrameworks.htm
8 楼 抛出异常的爱 2010-06-17  
1.楼主不了解什么叫自动化测试.
2.对自动化测试使用环境不是很了解
3.大约在工作中楼主也用不上这东西

http://www.iteye.com/topic/692657
7 楼 CharlesCui 2010-06-15  
sigmaIsland 写道
自动化框架封装:
       Scripts
         ↓
        API
         ↓
   Control library



写的不错,学习了
6 楼 CharlesCui 2010-06-14  
sigmaIsland 写道
自动化框架封装:
       Scripts
         ↓
        API
         ↓
   Control library

自动化框架中设计的好的API有两个原则要把握:
1)隐藏测试设备的复杂性,针对测试逻辑提供统一的接口。 熟悉软件测试的工程师都
知道,测试当中,是需要使用很多辅助测试设备的,这些设备,有可能是PC上的运行的
测试软件,有可能是专用的测试设备。而很多时候,不同的测试设备往往都是做同样的
测试活动。如简单的Web页面自动化就可以使用QTP,Winrunner,Selenium等。封装的好的API,应该能够隐藏底层使用的测试工具。而对测试人员提供统一的编程接口。测试人员只需要下达操作动作,而具体这个动作使用了那些测试工具来实现,是API内部的事情,不需要测试人员分心。
2)关键字驱动:关键字驱动的意思是API的封装的程度要和测试用例描述的程度相同。如测试用例中描述:“注册是一个新用户,并验证生效”,那么相应的API的设计的关键字就需要有“Register $user_name”这个关键字,并能够根据返回值来验证动作是否成功。测试人员不需要去担心在那个页面,如何输入等具体的细节。

更多了解可以到下面的地址查看
http://www.testingorg.net/testingtech/359.html
http://www.testingorg.net/testingtech/360.html
我想说的是有一些公司实现了自动化的,lz你的看法太片面了
成都杰华科技(http://www.sigma-rt.com.cn)就是其中之一。



我片面的看法针对的是片面的问题,你别往自己身上引,这样容易产生愤青.
5 楼 sigmaIsland 2010-06-14  
自动化框架封装:
       Scripts
         ↓
        API
         ↓
   Control library

自动化框架中设计的好的API有两个原则要把握:
1)隐藏测试设备的复杂性,针对测试逻辑提供统一的接口。 熟悉软件测试的工程师都
知道,测试当中,是需要使用很多辅助测试设备的,这些设备,有可能是PC上的运行的
测试软件,有可能是专用的测试设备。而很多时候,不同的测试设备往往都是做同样的
测试活动。如简单的Web页面自动化就可以使用QTP,Winrunner,Selenium等。封装的好的API,应该能够隐藏底层使用的测试工具。而对测试人员提供统一的编程接口。测试人员只需要下达操作动作,而具体这个动作使用了那些测试工具来实现,是API内部的事情,不需要测试人员分心。
2)关键字驱动:关键字驱动的意思是API的封装的程度要和测试用例描述的程度相同。如测试用例中描述:“注册是一个新用户,并验证生效”,那么相应的API的设计的关键字就需要有“Register $user_name”这个关键字,并能够根据返回值来验证动作是否成功。测试人员不需要去担心在那个页面,如何输入等具体的细节。

更多了解可以到下面的地址查看
http://www.testingorg.net/testingtech/359.html
http://www.testingorg.net/testingtech/360.html
我想说的是有一些公司实现了自动化的,lz你的看法太片面了
成都杰华科技(http://www.sigma-rt.com.cn)就是其中之一。
4 楼 littlebig 2010-02-10  
“觉悟”是最不靠谱的东西了,非常同意!
3 楼 trace 2010-01-31  
国内中小型企业没有采用自动化测试的原因,主要是因为客户没有提测试的要求;客户没有提测试要求的原因就是:“那个绿色的条条跟我没关系”。

其实为什么要测试的原因很简单:软件验收的标准是什么?难道应该是开发人员当面跟你演示一遍,没有问题,那就通过了吗?这就好比你买一辆没有任何检验单据的汽车,销售人员当面开了一圈,然后说没有问题,有谁敢买吗?

但杯具的是,国内大部分的软件客户都敢买这个单,不是有气魄,而是不了解测试这么回事,国内的软件客户还处于高度信息不对称的地位,也就是被忽悠的地位,只是项目尾款不轻易给你罢了。

假如客户要求了,要测试覆盖率100%才验收,那么就会有企业重视测试,就会多招几个人肉测试机。等到人肉测试机们累垮了,跳槽了,就知道该用自动化测试了。

没有客户的要求,那只有靠“觉悟”。大家知道,“觉悟”是最不靠谱的东西了,所以,重视测试的公司,就少之又少了。
2 楼 nishijia 2010-01-31  
同意楼上的滥伐 毕竟是工具 不能想得和人一样智能吧

成本高 维护多是自动化测试的瓶颈 在外企自动化测试 比较能推广 国内中小企业可能因为成本的原因束手束脚。
1 楼 littlebig 2010-01-23  
可能我也是不太擅长自动化测试吧,我比较同意楼主的看法。不过真正做好UI的自动化测试也是不容易,没有像楼主说的那样只是怎么样怎么样。。。。。。。,我感觉更多的UI自动化测试只是想确认基本的功能没有问题,而UI自动化测试感觉维护成本很高,要比人测试来的高,往往运行中途莫名其妙的不能成功了,让人觉得很是郁闷。性能测试这种只能用工具来做,人是没有办法做的。

相关推荐

    浅谈自动化软件测试

    所谓自动化测试,就是使用自动化测试工具来对软件进行测试,自动化测试工具可以自己开发,也可选用现成的工具。常用的自动化测试工具有:QTP,WinRunner,RationalRobot,AdventNetQengine,SilkTest,QARun,...

    自动化测试 python测试 pytest 单元测试

    The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. pytest requires: Python 3.7+ or PyPy3. ...

    你应该知道的自动化测试陷阱

    你感到很惊讶,项目经理是从什么地方了解到自动化测试的,为什么突然对自动化测试这么着迷,你突然想起几周前某个工具厂商的销售人员曾经到公司拜访…… 你忧心重重,难道项目经理已经掉入了所谓的自动化测试陷阱中...

    Web自动化测试面试题

    Web自动化测试 Selenium中hidden或者是display = none的元素是否可以定位到? 不能,可以写JavaScript将标签中的hidden先改为0,再定位元素 Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定...

    以自动化测试撬动遗留系统

    面对遗留系统,选择合适的测试策略,能让自动化测试的投入在一定时期内看到效果,并且建立可持续进行的机制。...而所谓遗留系统,即没有自动化测试保护的系统。客户很希望通过引入“自动化测试”来提升系统

    软件自动化测试技术选择:驶入测试“快车道”

    所谓自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。  软件测试,特别是测试自动化技术属于当前国际软件...

    【Python自动化测试】金三银四跳槽涨薪面试题

    测试行业也是如此,测试员都寻求更好的职业机会,软件测试岗同时也在做筛选,所谓优胜劣汰。 那么面临跳槽季,想在测试行业大展身手的你,真的懂软件测试嘛? 1、 基础知识掌握 2、测试流程掌握 3、面试过程中的提问...

    常用软件测试自动化框架

    所谓自动化测试框架,是由一些假设,概念和为自动化测试提供支持的实践组成的集合。

    基于SeleniumWebDriver的Web应用自动化测试

    所谓自动化测试,就是执行自动测试工具或者用某种程序设计语言编写程序,控制被测软件中的各种模块,模拟手动测试步骤,完成测试。测试自动化有很多优点,比如:频繁的回归测试、快速反馈给开发人员、几乎无限的重复...

    JAVA自定义注解在自动化测试中的使用

    在UI自动化测试中,相信很多人都喜欢用所谓的PO模式,其中的P,也是page的意思,于是乎,在脚本里,或者在其它的page里,会要new很多的page对象,这样很麻烦,前面我们也讲到了注解的使用,很方便,那么我们可不可以...

    Appium Python自动化测试之环境搭建的步骤

    Appium是一个自动化测试开源工具,支持IOS和Android平台上的移动原生应用、移动Web应用和混合应用。所谓的“移动原生应用”是指那些用IOS或者Android SDK写的应用;所谓的“移动Web应用”是指使用移动浏览器方位的...

    CTS测试执行指导手册详细版

    CTS测试是一个基于uiautomator安卓原生自动化框架运行的自动化测试。通过CTS测试,保证系统的安全性和稳定性。 2. GTS介绍 GMS:Google MobileService,即谷歌移动服务。GMS是Google开发并推动Android的动力,也是...

    软件测试规范

    软件测试规范 目 录 一.概述 ............................................................................................................................................................ 1 二 软件...

    测试培训教材

    需要“Launching Quick Test Professional”来进一步地编辑和修改自动化测试脚本。 什么是BPT? 业务组件测试 用户参与、尽早测试: 基于角色和工作流的BPT模型 角色定义应该灵活、根据能力、时间资源等...

Global site tag (gtag.js) - Google Analytics