也谈自动化测试——只有问题,没有答案

发表于:2009-5-05 14:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:thinkinnight    来源:JavaEye

  自己做过比较长一段时间的自动化测试了,尽管现在已经不做,不过也算积累了一些相关的东西。感觉自动化测试现在也是处于一个变化的阶段,有很多东西只有问题,但是没有答案。

  1. 对页面UI元素的识别

  在web页面相关自动化测试中,这些问题可能遇到的比较小,但是如果是测试应用程序的话,元素识别就是一个很大的问题,这依赖于你选择的工具,以及开发团队的配合,如果连UI元素都不能识别的话,那自动化测试就是扯淡。

  2. 业务逻辑

  在现在的应用中,复杂的业务逻辑会带来大量的代码量,同时如果业务逻辑进行改变,自动化测试的代码修改也会成为项目的泥潭。对应的业务逻辑最好可以尽量分离出来,同时自动化测试的用例,最好是和手工测试的用例有所不同,自动化测试由于加入了编程的成分,那其测试用例最好成为可重用的。

  3. 如何保证自动化测试的脚本代码是正确的?

  这算是一个悖论?用来检查的代码,你如何保证其是正确的。当检查出一个fail出来,首先不去怀疑是程序本身的问题,而是去怀疑这是自动化测试脚本的问题。而如果你使用的自动化测试平台是第三方的自动化测试工具的话,甚至还会怀疑到工具本身的问题。这样在本身工作之外,却又多了其他的check任务。这算是自动化引入的最大问题。当然,这还是由于自动化测试需要引入的测试代码的复杂性引起的,一般现在也自动进行的unit test,也会有这样的问题,但是由于其问题规模较小,代码逻辑比较简单,所以将这个问题覆盖过去了。同时unit test由开发人员本身进行编写,也使得这个问题不容易出现。

  4. 自动化测试的结果分析

  从测试数据的准备,业务逻辑的整合,测试脚本的编写,到最后生成结果文件。但是如何分析这个结果文件,也是很麻烦的事情,这个也是和测试用例的编写人员有关,测试用例编写得越详细,在脚本实现的时候就可以根据测试用例的描述来生成对应的结果描述,这样对于单个的测试用例,至少这个结果是可以让结果分析人员满意的。

  5. 如何重现某种错误

  这个在手工测试中会发生,但是在自动化测试中产生的概率比手工测试要高得多。当你把测试脚本写完,想着,OK,之后就是每天晚上让它自己run,然后check一下结果就可以了。错!你的麻烦才刚刚开始。当你第二天过来,看到半夜的时候,产生了一个错误,我们现在只有这个错误的截图,以及测试结果文件中告诉你我测试工具一共做了哪些工作造成这些错误。然后你又针对这个用例单独跑一遍,结果为pass。那恭喜你中奖了。一个很难复现的bug。从现象判断不出是怎么产生的,偶然但不是必然会发生。这个很头疼。首先你要确定它是个bug,一般都会让你先check是不是脚本或其他问题。

  6. 保证自动化测试不被滥用

  有很多场合是不合适使用自动化测试的,在这些场合去使用自动化测试,就是给自己找麻烦。

  7. 最重要的,流程

  相信大家应该承认一点,不管自动化测试这玩艺是好还是不好,只有大型的、长期的项目才会去采用自动化测试,既然是这样的项目,那就会参与人员众多,自动化测试的脚本开发人员是否参与自动化测试本身的测试工作(由于3的原因,部分4的原因--测试人员看不懂自动化测试的某些结果,一般还是会参与到部分测试中),如何与测试人员,开发人员沟通交流,其工作内容定义,都还是问题。

  大概就这么多,一会要去开会了,暂时就先发了,当抛砖引玉吧。

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • huoxingyinzi
    2009-5-06 13:38:25

    楼上的说的很中肯
    自动化测试需要结合白盒测试和黑盒测试的综合技术,要用好自动化测试一定需要对源代码的来龙去脉很了解。

    做自动化测试不仅仅是了解一个自动化工具的基本操作,代码编写能力以及对系统架构的了解,都决定了自动化测试的实施

    我觉得这样的局限性,也让那些曾经逃避编程而进入测试行业的人们,要开始回归本性,学习编程语言,测试离不开开发,开发也离不开测试

  • cjq_999
    2009-5-06 12:53:58

    很同意fishy的观点.
    特别是第三点:自动化测试人员保证自动化测试的脚本代码是正确的, 就跟程序员保证他们的程序正确一样, 没有任何区别.

  • lantianwei
    2009-5-05 21:26:11

    我也简单的说下我的看法:
    1. 确实这是个比较大的问题,解决该问题需要比较强的编程能力,而且并非对任何非标准对象都有效,特别是一些受保护对象,很难进行处理。
    2. 被测软件的业务逻辑的脚本设计很重要。
    3. 通过流程来保证,比如代码走读,脚本评审等。
    4. 以WEB的方式展现会比较好,让相应级别的人看他所想看的内容。
    5. 问题确实存在,曾经我遇到过测试工具跑每次都出问题,但手工却怎么也无法重现,后来发现是测试工具和产品导致的。
    6. 该问题和1有点关联,如果很好的解决了1,那么该问题就会相应减少。
    7. 同感,流程能更好的保证自动化测试的成功。

  • fishy
    2009-5-05 14:20:13

    以我的个人经验简单对你的描述做个回应:

    1. 当然。gui测试首先就要标识用户操作观点,做gui测试不识别gui组件是“天理不容”的,否则怎么才叫做“gui测试”呢?只有那些只能做功能测试、接口测试的才回避gui组件识别问题。

    2. 你说到了一个产品经理跟小程序员的关键的区别。当需求改变时,产品经理会创造原来接口的新的实现,而接口并不改变。而小程序员,他写程序没有架构,也就提不到扩展架构。因此,自动化测试是一种导致你面向接口编程的设计手段,系统设计最终就落实为测试设计,编程的目的就是使测试可以通过。小程序员认为,设计之后就用编程来实现,然后测试是为了验证编程是否正确。而真正做好自动化测试的产品经理认为,编程是为了让测试可以通过,测试在编程之前实现,而不是在之后实现。鉴于此(测试是需求描述手段而不是简单地重复代码逻辑),当需求表面上看似改变时,原来的测试并不改变,测试作为一种灵活的将现实与编程隔离的工具而是描述新的重载类型、或者新的配置参数,这些新的类型或者配置参数来决定新的业务逻辑。当需求改变时,我们提交新的测试用例,而原来的测试并不需要改变。业务逻辑改变,并不会像你所说的就重构设计。要注意真正的代码重构是进行代码优化,而不是改变业务逻辑。

    3. 你的这个问题的描述充满一种懦弱的情绪,让我觉得很为你遗憾。如果测试工具确实有问题,我们去责问工具的问题就好了。没有什么好争论的。干实事的人会亲自动手来确认是不是工具问题,而只有被动的人才千方百计找别人的问题。

    4. 自动化测试永远不可能让产品经理觉得满意。如果单纯从测试角度看,自动化测试只是为了确保进行快速回归测试,自动化测试不是为了发现什么新奇的bug,而是为了让已经发现过的bug不再重复出现。自动化测试不可能取代精通手工测试的人的经验。因此,请不要把手工测试中常见的对结果分析的观念放到自动化测试中。自动化测试就好像是瓦工用砖砌墙时要拉一根水平准绳线,如果没有发现bug那么产品经理就不去找程序员的麻烦。自动化测试中所谓结果就是一个或者多个程序断言,我们应该以平常心去轻松地看它们。一旦发现bug,少不了进入调试工具里去手工分析。所以,我认为自动化测试者应该是编程高手才能胜任,而那些不精通编程并且对被测试软件的架构没有深入理解的人,那些随便找来的做行政的 MM,是不需要让它们接触自动化测试的,她们只要笨拙地手工测试就可以了。你不要跟本不胜任做自动化测试的人去夸张关于结果分析的难度问题。

    5. 实际上你错了。自动化测试更多地时候是每天随时被启动,例如我想去喝杯咖啡的时候就启动自动化测试。你说的每天晚上才开始自动化测试,太笨拙了。虽然这样做也可以,但绝对不是主流。我请问,你写过超过100个自动化测试吗?如果写过,你就能知道可以随时用引擎程序来调用它们运行,并且每一次运行也许只要1 分钟。如果你只是看书,可能你看得的十几年前的外行(一些教授道听图说而)拼凑的自动化教材,把自动化测试复杂化、繁琐化。实际上任何一个编程高手都可以轻易经过3天培训就精通自动化测试编程。与4.类似地,自动化测试是编程高手所喜欢的,而不懂被测试代码的来龙去脉仅想做点黑盒测试的人其实做不了自动化测试。自动化测试需要结合白盒测试和黑盒测试的综合技术,要用好自动化测试一定需要对源代码的来龙去脉很了解。

    6. 要注意别单纯轻信没有做过大规模自动化测试的人的观点。重视“过来人”的观点,可以避免成事不足败事有余。

    7. 显然你没有注意到最近十年早已经流行过TDD啦。你落后很多了,TDD是一种个人编程习惯,跟项目大小没有关系。编写自动化测试是编程之前的要做的事,当编写代码之后,人之常情是:很少有人还愿意费很多精力来从各方面亲自变代码测试这段代码。测试是编程实现程序功能之前要写好的,先写测试然后才实现要实现的功能,而不是先写程序代码然后才写测试代码。如果你看十几年前的关于自动化测试的书,你会看到“V模型”。哈哈,那个理论我很清楚是个垃圾,只是可以用来对毫无现代自动化测试观念的人作为启蒙使用。

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号