大家对自动化的理解,首先是想到WebUI自动化,这就为什么我一说自动化,公司一般就会有很多人反对,因为自动化的成本实在太高了。其实自动化是分为三个层面的(UI层自动化、接口自动化、单元测试),不是每个层面的自动化都是遥不可及的,以下标示一下这三个层面的难易程度(也叫这个为自动化金字塔):

三个层面的自动化测试

基本上可以肯定的是,单元测试是成本最低的,也是最容易推广,见效最大的,但是很多公司不会投入这块,原因是因为现在大部分公司都是人才短缺,特别是成熟的研发人员。你说投入到项目实际开发工作的人员都嫌不够,怎么可能抽出相关人力去做单元测试。而以目前大部分公司的测试团队人员构成来说,能做单元测试的基本没有(有也被抽去做开发了),这也是大家一致认为单元测试属于开发职责的原因(除了他们自己没人能做了)。

  单元测试如果做不了,那么接口(API或Service)自动化测试能做不?这个只要有一定的技术基础还是能做的,至少有一部分测试人员是能够做接口测试的(话说性能测试就属于一种接口自动化),如果能自主开发或直接引进一套像样的接口自动化工具或框架(工具上来说,市面上也不少),那么就可以开展这部分的工作,我相信大部分公司能做好的自动化测试,应该也是基于这一层的(所以我们建议有条件的话,自动化测试可以先在这一层面展开,当然前提是真有那么多接口或服务需要测试)。接口自动化测试框架应该具有以下功能,根据复杂度和各自需求而定:

  1、校验

  这个很好了解,如果没有校验,单纯的执行接口的话,那就谈不上测试了。所以支持对返回值校验是一个必须的功能。

  2、数据隔离

  数据隔离就是指具体的请求接口、参数、校验等数据做到与代码相隔离,便于维护,一旦需要调整接口用例、新增接口用例时可很快速的找到位置,隔离的另一个好处就是可复用,框架可以推广给其他团队,使用者可以使用相同的代码,只需要根据要求填写各自用例即可测试起来。

  3、数据传递

  做到数据隔离可维护后,数据传递是另外一个更重要的需求。

  数据传递是指接口用例之间可以做到向下传参,例如我们通过创建订单接口创建一个订单,该接口会返回一个订单号,接下来我们要进行调用查询订单的接口,从返回的数据中与创建订单用例中的数据进行校验,此时第二个接口的请求数据是需要从第一个接口用例中的返回中提取的。这样的例子比比皆是,所以支持数据传递是又一个必不可少的功能。

  4、动态函数

  实际用例场景中我们可能会有随机生成一个手机号、字符串加密等需求,在数据与代码隔离之后,此时我们就需要代码可以支持做到识别对应关键字时可以执行对应的函数进行填充。例如在数据中填写nowTime()时,具体执行时会被替换成当前时间,填写random(5)时,会被替换成一个五位的随机数等等。

  5、可配置

  有时,我们的需求是用例不单单只能在一个环境上执行,可能需要同一份接口用例可以在QA、预发、线上等多个环境都可以执行。所以框架需要做到可配置,便于切换,调用不同的配置文件可以在不同的环境执行。

  6、日志

  日志包含执行的具体执行接口、请求方式、请求参数、返回值、校验接口、请求时间、耗时等关键信息,日志的好处一来是可以便于在新增用例有问题时快速定位出哪里填写有问题,二来是发现bug时方便向开发反馈提供数据,开发可以从触发时间以及参数等信息快速定位到问题所在。

  7、可视化报告

  用例执行后,就是到了向团队展示结果的时候了,一个可视化的报告可以便于团队成员了解到每次自动化接口用例执行的成功数、失败数等数据。

  8、用例驱动

(1)用例的驱动模式,涉及到怎么存放测试数据,怎么描述用例,又如何复用;

  (2)考虑到效率的话还要支持并发;

  (3)当然测试报告不能光记录成功和失败,还有用例执行耗时、接口调用耗时、场景的通过率等各项数值的统计。

  说完单元测试、接口测试的自动化,我们现在来说说UI层自动化测试,这也是一直很火并且也是自动化概念先入为主的一块,毕竟市面上有不少成熟的自动化工具,如QTP、Selenium等。这块自动化一定是会有测试团队参与的,就算自动化框架是由开发来完成,那么具体测试工作也是由Tester全程参与的。UI层自动化测试真的不容易推行,无论有多么完善的自动化框架,在这一块维护的成本也是非常高的,特别是懂开发的人不懂测试,懂测试的人不懂开发,这一矛盾现象所带来的内部消耗就不少,再加上项目需求和UI层都在频繁变动,而且Web UI技术越来越复杂和多元化(UI层自动化需要基于对象识别技术),这些都导致很多公司不愿意投入这一块。即使这样,做为一个有上进心的测试人员,我们也是需要多想想这一块,毕竟这是离我们测试最近的一块“技术沃土”了(之一)。

  现在我们来重点来谈下Web UI自动化测试(目前的系统大都通过Web UI来展示),一般成熟一点的自动化工具方案大体是这样:

1.开发语言:Python或Java;

2.开源测试框架:Selenium WebDriver;

3.Web元素定位:Xpath + cssSelector + findElement或findElements方法;

  具体实施细节来讲重点是针对Web UI自动化测试的特点,将各层包装,分而治之的思想,各自相互独立,职责定义清楚,下面简要说明下:

  1、测试用例业务流操作实现及测试数据分离管理;

  2、页面元素定位及页面元素的操作分离;

  3、可视化的日志查询系统;

  4、跨浏览器支持如:IE,Firefox,Chrome;

  5、可视化的的测试报告,可以具体查询到日志/截图等;

  6、实现了通过Excel的数据驱动管理;

  7、邮件发送管理,可以自定义具体时间及接受者等;

  以上是一般Web UI自动化测试的一些实践要求,当然也是相对简易的,复杂的就是实现平台化管理,每天测试工程师,只需要选择具体项目、所测的测试用例集,然后执行,输出测试报告,邮件自动发送到相关开发/测试,框架的开发维护上也能够持续集成。

优先开展自动化测试的思考

  说完了这三个层面的自动化测试,那么我们再来分析一下,到底应该优先开展哪个层面的自动化测试,到底是哪个投入产出比最高。

  众所周知,软件测试的边际成本会随着缺陷探测率的提高而提高,这就是软件测试的基本公理之一"测试的不可穷尽性"的经济学体现。这一规律也适用于自动化测试,也就是说随着自动化覆盖率的提升,自动化的成本也呈现指数式上升。按照这个思路进行拓展,可以分析下单元测试,集成测试和UI测试的自动化成本曲线如图2所示。与通常理解的一致,为了达到相同的自动化率(x0),UI的成本最高、其次是API,Unit则最低。

  经济学中有另外一个著名的理论叫做边际效益递减。当做一项投资,随着投资量的增加,单位投资增量所带来的单位收益是越来越少的,甚至在某个临界点之后,这个收益有可能是负数。而这个零界点,就是投资收益最大的点。在这个点之前的所有投资,都可以扩大总收益,而在超过之后继续进行投资,就不那么明智了。

图2  自动化成本/收益曲线

  按照这个思路,在图2上,针对三种不同类型的自动化测试,可以获得三个零界点。而总收益最大的点在接口测试上,随后是单元测试,UI测试则最低。

  如果从测试效果上看,接口测试和UI/单元测试相比,有很多优势。 对于单元测试来说,通常单元测试是针对代码进行的测试,而接口测试是在测试一个活的,经过部署的系统。 另外,单个接口测试与单个单元测试用例相比,也可以覆盖更多的代码。更重要的是,接口测试也可以是面向业务的测试,通过接口进行业务层面的测试。

  而相比UI自动化用例,接口测试更加的简单直接,执行效率更高。 除了部分如企业级应用软件,可能很多业务在前端进行之外,很多情况下,绝大部分通过UI完成的业务操作完全可以通过API端完成。某些情况下,API(接口)的测试条件覆盖率甚至可以多过UI。

总结

  综合上述的分析,笔者认为在自动化测试的初级阶段,适合奔小康的测试团队的自动化模式应该是中间层的接口最大,两端的UI和Unit测试适度实施。从图形上看,就是一个橄榄型(中间的接口测试效益比最高)。如果再加上一部分的手工测试,那就是一个不倒翁了。(接口测试可以由开发团队来做,也可交由测试团队去开展)

  按照这个模式,将大部分自动化投资用于接口测试,可以获得最高的投资回报。再结合持续测试与持续集成等最佳实践,在团队之间彼此共享测试用例、测试框架或者平台,通过接口测试这一承上启下的测试类型,可以自下而上地逐步翻越过纸杯蛋糕模式中的那堵墙。(备注:纸杯蛋糕模式,是一种反金字塔的自动化模式,开发和测试各自为政,线性的开展测试,无法并行协同测试,相当于有道部门墙,开发的自测环节和测试开展的测试环节,没有建立关联和资源共享---重复测试、度量目标不一致、过度自动化)

关于自动化测试的定位及一些实践思考相关推荐

  1. 自动化测试的定位以及一些思考是什么样的,你知道吗?

    关于自动化测试的定位及一些思考 大家对自动化的理解,首先是想到Web UI自动化,这就为什么我一说自动化,公司一般就会有很多人反对,因为自动化的成本实在太高了,其实自动化是分为三个层面的 (UI层自动 ...

  2. 【测试开发】自动化测试在美团外卖的实践与落地

    文章目录 自动化测试在美团外卖的实践与落地 1.项目背景 2.项目目标 3.方案选型 4.实践和探索 4.1 问题和挑战 4.2 前置条件准备 4.3 用例录制与回放的数据一致性 4.4 用例录制与回 ...

  3. 新零售介绍与实践思考

    新零售是马总提出的五新(新零售.新金融.新技术.新制造.新能源)之一,这里对新零售学习和解决方案进行一个总结和部分实践思考. 什么是新零售 新零售的定义 "未来的十年.二十年,没有电子商务这 ...

  4. 智能安防系统中的人工智能应用实践思考

    [toc] <64. 智能安防系统中的人工智能应用实践思考> 引言 智能安防系统是人工智能在安防领域的应用之一.随着人工智能技术的不断发展,智能安防系统逐渐成为人们生活中不可或缺的一部分. ...

  5. CPU消耗,跟踪定位理论与实践

    CPU消耗,跟踪定位理论与实践 一.性能指标之资源指标定位方案 1.打tprof报告方法 抓取perfpmr文件 60秒. perfpmr.sh 60 从结果文件中取出tprof.sum 或直接抓取t ...

  6. 接口自动化测试平台-用例设计的思考

    前言 自动化任务有用例执行失败了,打开分析一看,怎么登录状态token过期了,怎么查询的帐号不存在,这是往往自动化用例设计者自己坑了自己. 在设计Go接口自动化测试平台时,自己在思考:如何可以提高接口 ...

  7. 自动化无法定位的原因_Appium Android 自动化测试 -- 元素定位

    自动化测试元素定位是难点之一,编写脚本时会经常卡在元素定位这里,有时一个元素能捣鼓一天,到最后还是定位不到. Appium 定位方式和 selenium 一脉相承,selenium 中的定位方式App ...

  8. python语法元素测试_基于python全局设置id 自动化测试元素定位过程解析

    背景: 在自动化化测试过程中,不方便准确获取页面的元素,或者在重构过程中方法修改造成元素层级改变,因此通过设置id准备定位. 一.python准备工作: 功能:用自动化的方式进行批量处理. 比如,你想 ...

  9. 云原生|容器和应用安全运营实践思考

    文| 腾讯"洋葱"入侵对抗团队 bghost 前言 随着云计算的蓬勃发展,云原生概念被提出并快速发展,公司内部也在推进使用云原生技术进行架构优化,研发模式和基础设施都发生了很大的变 ...

最新文章

  1. spring单元测试
  2. 爬虫利器 puppeteer
  3. 预测2019:数据中心将有哪些变化
  4. 温故知新 .Net重定向深度分析
  5. linux mysql数据库备份并删除前一分钟的数据
  6. cassandra 环境搭建
  7. 托管式服务网格:多种类型计算服务统一管理的基础设施
  8. 轻而易举地激发变革:开放的方法
  9. Java 失宠于 Oracle?
  10. 什么鬼?我能通过依赖混淆攻击在 Halo 游戏服务器中执行命令,微软不 care?!...
  11. 用Aliyun E-MapReduce集群的sqoop工具和数据库同步数据如何配置网络
  12. mysql版本问题,最近多次遇到的坑
  13. java string 转 class_java-String类的转换功能
  14. python 视频和音乐的剪辑与拼接
  15. 网购心脏起搏器存在多达8000个程序漏洞
  16. UTM坐标系与GPS坐标系转换笔记
  17. 2022年计算机视觉3大趋势
  18. 基于单片机的超市储物柜设计_基于单片机的新型智能储物柜设计
  19. 让linux脚本输出声音,即使在linux中没有麦克风,声音输出也会出现在声音输入中...
  20. 华为云数据库VS自建数据库,上“云”不是智商税

热门文章

  1. 解决NVIDIA显卡驱动 图形驱动程序安装失败 问题
  2. Egencia smartmix航班排名模型背后的运营研究
  3. 送什么礼物给小学生比较有纪念意义?适合送小学生的小礼物
  4. boss直聘上看信息 但是不会显示已读
  5. 基于Java毕业设计爱心公益网站设计与制作源码+系统+mysql+lw文档+部署软件
  6. 购买内存需要注意看哪些
  7. python pip 安装包失败问题,下载缓慢问题
  8. 抖音高贵气质的签名_这些抖音直播注意事项,不注意很可能被封号!
  9. SEO人员,三思而后行,要规避为哪些行业做SEO?
  10. 计算机在课堂教学中的应用,计算机技术在课堂教学中的应用