• 1
  • 1
分享

一、前言

      自动化测试是测试领域中一个争议性比较大的区域,虽然它并不是一个新生的事物,但是至今仍没有一套比较完善的理论可以提供行之有效的方法,使之更好的为产品质量服务。各个研究机构和公司的专家提供了许多自动化测试的理论和模型,但是均没有形成通用理论,被大众广泛认可。

      作者通过对安全产品进行自动化测试,从需求定义开始进行跟踪,涉及产品的设计与实现,对产品的接口、实现功能等进行自动化集成测试,采用测试代码和测试角本相结合的开发方式。作者总结了在工程中遇到的问题和实施中的成功之处,提出改进意见,对自动化测试人员具有较强的工程参考意义。

二、自动化测试简介

      所谓自动化测试,就是充分利用测试理论和相关的工具,对产品进行自动化的测试,减轻甚至摆脱某些人工测试的繁重劳动,能够形成统一的测试报告并发布。

      自动化测试涉及面很广,可以涉及单元测试、集成测试、系统测试、压力测试等诸多方面,针对不同的测试有不同的处理方法和工具。

      经过实践,业界对自动化测试形成了一定的统一观点:

      自动化测试不能代替手工测试;

      自动化测试进行的是常规测试和回归测试,测试集覆盖率和BUG发现率均不高(这两组数据没有定论,根据测试系统的不同,数据会有所不同,但均低于50%,甚至低于30%)。

三、测试中的“人”

      人永远是软件开发领域中的重要因素,不同的人掌握着不同的角色。充分调用不同角色的主动性,可以有效的提高自动化测试的效率。

1.领导支持

      自动化测试是个系统工程,测试人员要制定合理完善的测试用例,需要得到需求、设计、开发等相关人员的配合。没有领导的鼎力支持,各方力量配合将会减弱,测试的实现目标将会大打折扣,测试工期也将无法保证。

       因此从需求调研之初,就需要得到领导的大力支持,充分估计自动化测试所能达到的目标,制定良好的开发计划,如有可能,由项目经理直接进行领导,以期达到自动化测试的最优效果。

2.避免测试人员“挪作他用”

      在许多公司,自动化测试均不是专职人员,经常是针对产品从研发、测试等部门抽调而来,因此他们原来都负担过别的工作。在自动化测试工作过程中,尽量不要由于其原工作问题,将自动化测试人员调回,更不能因为自动化测试在前期开发过程中收效甚微,在开发工期有限的情况下,暂时裁减开发人员。由于自动化测试工作量很大,从理解需求、设计用例、用例实现、测试驱动的设计与开发,到用例调试、用例的最终应用要经历比较长的工期,经常性的人员调动会导致工作情绪的波动和工作进度的滞后。

四、文档工作

      在项目管理中,文档是软件工程各阶段的产品和依据,自动化测试当然也不能例外。

1.测试文档要及时

      自动化测试与其说是一种任务,更不如说是一个公司知识库的积累过程,测试代码绝不是自动化测试的最终目的。

      因此在测试开发过程中,要随时书写自动化测试的配套文档,并要根据需求和设计的变化,即时更新。文档包含自动化测试的设计、实现文档,测试集测试用例文档,测试驱动文档。测试文档的积累,也是对公司知识库的积累,减少将来进行同样开发的成本。

2.开发文档要完善

      自动化测试的根本是文档,它依靠需求和设计文档来开发用例,而绝不是根据开发人员实际代码来进行的。因此在自动化测试开始工作之前,要准备好各种文档,包括需求、接口设计、数据库定义等,测试人员只有依据这些文档,才能制定合理的开发计划,开发出适合本系统的测试用例。

      一定要避免由于工期等原因,产品的需求和设计文档跟不上,甚至编码前几天,需求设计才最终确定,在开发过程中也要避免频繁的更改需求和设计,其结果经常导致自动化测试人员开发测试用例“无依据”,常常要跟着开发人员跑,而不是跟着文档跑,期间的沟通要花费了大量的时间与精力。同时已经存在的文档如果经常发生变化,如果通知不及时,也会导致开发成本的加大。

      通过自动化测试,可以达到检查开发文档,促使开发流程规范化的作用。

3.自动化测试报告清晰

      自动化测试之所以在业界一直得以推崇,就是因为测试的自动化、报告的自动化,倘若缺少一份有效的自动化测试报告,即使有再全面的测试用例,别人也会对工作感觉很茫然,缺乏到工作的全面了解。

       测试报告中,除有明确的统计数据(包括测试用例数据、通过率等),还需求提供测试的跟踪信息、测试用例失败的原因分析。特别是由断言失败导致的失败原因分析,应具有很好的原因说明,良好的可读性,对问题有很好的描述与定位,可供自动测试人员、开发人员、设计人员和领导等多方人员阅读,对测试结果有很好的理解和定位。

      自动化测试报告最好要做到妥善保存,利用测试报告可以跟踪项目进度,把握功能点的完成情况,同时也有利于BUG的回归查找。

五、方法的改进

      在实施过程中,需要掌握不同的处理方法,应对处理各种实际问题,包括人员情绪。

1.沟通方式要完善

      确认了自动化测试,就需要把自动化测试工作纳入到项目的统一安排之中,把自动化测试人员也做为需求、设计、开发的相关共利者,当发生改变时,要即时通知,以便修改测试用例,避免编码或设计已发生改变,而自动化测试还不知道,其结果将导致查找原因花费大量时间。

      沟通也发生在人际关系的处理上。为充分理解需求与设计,自动化测试人员不可避免的要找设计人员沟通产品设计,有时还可能是频繁的询问,遇到设计人员工作重或心情不好,就有可能导致沟通上的困难或不充分。因此沟通需要技巧,测试人员需要耐心与细心,与开发人员保持好的关系,同时要尽量把问题一次沟通清楚,避免沟通不清导致测试用例返工,由此导致工作量的浪费。

      对于基于组件的自动化测试,需要开发人员对功能充分的理解,明白自己开发的功能必须依靠什么组件,模块运行必要的支持组件。开发人员理解不充分,就会浪费测试代码的调试时间,直接影响最终的部署。

2.测试用例代码健壮性有待提高

      测试用例的代码应具有很好的健壮性,理想的测试用例代码本身不会引入错误误报,断言错误时,只能是被测模块发生了失败。而在实际实施过程中,测试代码的健壮性很难保证,一方面由于测试用例代码编写人员本身编程水平不能保证,很可能产生代码上的BUG,另一方面由于需求和设计的变化,测试用例本身也要随时发生改变,测试用例更新不及时,就会导致被测模块的失败,因此及时沟通,及时更新用例代码,也是非常有必要。

3.避免测试驱动滞后

      测试驱动是实现测试用例的根本,由于分工和涉足点不同,自动化测试人员只能完成很少一部分测试驱动,其它驱动由开发人员完成,测试人员只是负责定义驱动的输入输出接口。

      但是开发人员有自己的任务,编写测试驱动势必增加其工作量,影响其原有工作的进行。为了自动化测试的正常进行,必须要与开发组领导进行充分的沟通,合理安排开发人员工作量,在不影响原有工作的基础之上完成测试驱动。

      测试驱动实现的滞后,将影响测试用例的调试和最终部署,影响整体流程。

4.多种自动化测试工具的引入

       一种产品可能会包含各种功能组件,比如数据库、界面、通信等各种操作,因此要引入不同的自动化测试工具,完成不同功能点的测试。如界面操作的角本录入WinRunner、压力测试工具LoadRunner等,各种工具的引入,可以使自动化测试的测试用例覆盖率扩大,使自动化测试更加深入和全面。

5.自动化测试工作的必要性

      这一点也是最难处理的。自动化测试由于缺少成型的理论指导,常常导致没有达到理想的效果,使领导和开发人员怀疑其工作的必要性,同时也可能成为软件项目管理中的“鸡肋”。

      如何考虑这个问题呢?是否有必要设置自动化测试这一环节呢?

      要处理这种心理落差,就需要在开始工作之前,领导及相关人员确立切实可行的目标,考虑清楚自动化测试测试用例的覆盖范围、BUG率等,不要过于乐观的考虑自动化测试的工作成果。根据实际情况制定切实可靠的目标,使获得的回报更驱于理性。公司原有自动化测试的知识储备、自动化测试人力资源的部署、整体团队的配合等诸多因素都会影响工作的最终效果。

六、结束语

      自动化测试是一片新鲜的土壤,虽然没有特别完善的理论,但是只要在实施的过程中把握好几条重要的原则,一定可以达到很好的效果。


作者:弱竹   

来源:51testing投稿

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •       上周刚刚做完项目的性能测试。今天整理和总结一下,随便分享给大家。      首页呢,测试前,我们是有明确的性能指标的,而且测试环境和数据都已准备好,业务分析、场景分析大家根据自己的项目系统进行分析设计,我们选用的都是实际用户操作频繁、重要级别高的。还有一个好说明下,今天分享的是Jmeter做APP端的单接口性能测试。下面开始分享吧。      先贴一张我的脚本:      第一步,环境是运维搭建好,那我们只需要准备脚本和脚本数据。从上...
            9 9 3557
            分享
          • 1、引言小屌丝:鱼哥,我看了你这篇《Windows系统性能监控(一) 性能监视器介绍及使用》,让我学到了好多知识。小鱼:嗯,我自己在写这篇文章的时候,也学到了好多。小屌丝:是吗,你不都是知道了,咋还又学到了好多;小鱼:这个很正常啊,你把你会的知识,重新以文字的形式输出出啦, 你就会发现, 你又有了更深的一层理解,甚至,你会发现,你以前理解的是不是不全呢?小屌丝:额… 还有这层功效??小鱼:不仅是功效,还是疗效…小屌丝:好吧,我只能说,知识的匮乏,加大了我与大佬之间的距离…小鱼:大佬,那都是被摧残了无数次以后,依然"站立着",依然坚持着自己最初的梦想,依然持续的奋斗着。小屌丝...
            1 0 3568
            分享
          • MySQL 官方驱动模块在 Python 语言里,有很多连接 MySQL 数据库的模块,且都能执行 SQL 语句,完成数据的增删改查操作。MySQL Connector 是 MySQL 官方的驱动模块,在兼容性上特别的好;不会有数据乱码的情况的发生,对 MySQL 8.0 的支持也很好。有很多的第三方的模块对 MySQL 8.0 这个版本兼容性非常的不好,特别是 MySQL 8.0 引入的新的安全机制。不少第三方模块由于没有更新,所以是没有办法连接到最新版本的 MySQL上面的,所以这里推荐大家使用 “MySQL Connector” 这个 MySQL 官方的驱动模块,毕竟是官方,更新的速度还...
            0 0 5103
            分享
          • 最近有个同事问:一个功能API自动化做了,UI自动化还需要做吗?刚接到这个问题的时候我愣了一下。因为这两个自动化主要覆盖的场景完全不同。为啥是互斥的?一般情况下:这2个都是需要的。打个比方:过滤沙子的时候,不同颗粒度的沙子就需要不同类型的滤网去过滤。首先我们看下UI自动化优点:它主要覆盖场景就是用户使用场景。模拟用户操作来进行自动化。根据用户操作方法来使用脚本替代用户操作。一般是在功能测试后期代码稳定后实现。UI自动化缺点:UI自动化缺点也很明显,依赖开发UI界面的稳定性。所以UI自动化相对来说比较脆弱,维护成本比较高。运行时间长,质量反馈稍微有点慢。而且脚本需要添加等待时间来模拟页面操作后台...
            0 0 805
            分享
          • 引言在软件测试中,一个项目的自动化测试包括UI自动化、API自动化、压力自动化等,把这些不同类型的自动化测试组装在一起变构成了一个项目的自动化测试。通过执行项目的自动化测试变能执行他的所有类型的自动化测试。当然,在生活中也有类似的,比如电脑,由CPU、磁盘、显卡等部分组成,一辆车由轮胎、车体、发动机等部件构成,客户在买车的时候并不知道该车是如何组装的,他只需要会开这辆车就行了。在设计模式中,我们将类似的复杂对象的各个部分按照一定的算法组合在一起,这种对象的创建工作便称为建造者模式。简介定义建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象,将复杂的构建与...
            4 4 1253
            分享
      • 51testing软件测试圈微信