在我们测试工作中,常常遇到这样的问题:开发与测试团队分属不同的不同(部门隔离、沟通不畅),质量职责划分不清(出现bug往往都是测试人员背锅),需求的不确定和易变性(需求不断变化导致代码不停更新、产品重构等),项目时间紧(互联网项目的需求对上线时间有更严格的要求)...测试团队必须纠结这样一个问题:如果在质量保证与上线时间之间找平衡,我们一方面需要尽可能的希望找出产品的“所有”bug,一方面又要保证需求能如期上线,对于一个测试团队来说,直观上只有两种方法来解决这个问题:扩充我们的测试队伍(人多力量大嘛),然而,一味的扩大队伍就意味着项目成本的增加,所有我们只能追求通过各种自动化测试方法来提高测试效率。
  自动化测试,大家的第一反应是这样:写好一个脚本,然后每次运行脚本就把人工测试要做的所有事情全做了...这只是我们的一个理想,理想是美好的,现实却很骨感。自动化测试不是万能的,这里面还存在很多问题,其中最重要的一个问题就是:对于大多数团队的测试人员来说,往往只有黑盒测试环节在咱们的全面掌控下,在这样的前提下,大多数自动化测试工程师们都在对UI层面的测试做自动化,而UI是易变的,我们想通过在这里做自动化实现“全面”的覆盖是不可能的,看下下面这篇博文,也许能为你的自动化测试平台设计提供一些灵感:

TestPyramid

马丁福勒

2012年5月1日

 

测试金字塔是一种思考不同类型自动化测试的方式,应该用来创建一个平衡的投资组合。它的基本点是你应该有更多的低级UnitTests比通过GUI运行的高级 BroadStackTests

 

对于我职业生涯的大部分时间来说,测试自动化意味着通过用户界面驱动应用程序的测试。这些工具通常会提供记录与应用程序交互的功能,然后允许您回放该交互,检查应用程序是否返回相同的结果。这种方法最初效果很好。记录测试很容易,测试可以由不懂编程的人记录。

但这种方法很快就会遇到麻烦,成为一个 冰淇淋锥。像这样通过用户界面进行测试很慢,增加了构建时间。通常它需要为测试自动化软件安装许可证,这意味着它只能在特定的机器上完成。通常情况下,这些操作不容易在“无头”模式下运行,由脚本监控以放入适当的部署管道。

最重要的是这种测试非常脆弱。对系统的改进很容易导致大量这样的测试结束,然后必须重新记录。您可以通过放弃记录回放工具来减少这个问题,但这会使测试更难写。 [1]即使在编写它们的良好实践中,端到端测试也更容易出现非确定性问题,这可能会削弱对它们的信任。简而言之,通过用户界面进行端到端测试的操作是:易碎,写入成本高,运行耗时。所以金字塔认为你应该通过单元测试进行更多的自动化测试,而不是通过传统的基于GUI的测试。[2]

金字塔还提出了一个中间测试层,它通过应用程序的服务层来执行,我称之为 SubcutaneousTests。这些可以提供端到端测试的许多优点,但避免了处理UI框架的复杂性。在Web应用程序中,这将对应于通过API层进行测试,而金字塔的顶部UI部分将对应于使用像Selenium或Sahi 这样的测试。

测试金字塔在敏捷测试圈中出现了很多,尽管其核心信息是健全的,但关于构建一个平衡良好的测试组合还有很多话要说。一个常见的问题是团队混淆了端到端测试,UI测试和面向客户的测试的概念。这些都是正交特性。例如,一个丰富的JavaScript UI应该使用像Jasmine这样的JavaScript单元测试来测试其大部分UI行为。一套复杂的业务规则可能会以面向客户的形式捕获测试,但是可以像单元测试一样在相关模块上运行。

我一直认为高级测试是第二道防线测试。如果您在高级测试中失败,不仅仅是您的功能代码中存在错误,还会丢失或错误的单元测试。因此,我建议在修复由高级测试暴露的错误之前,您应该使用单元测试复制该错误。然后单元测试可以确保错误不会消失。

笔记

1: 记录回放工具对于任何类型的自动化来说几乎总是一个坏主意,因为它们抵制可变性并阻碍有用的抽象。它们只有作为一种工具才能生成脚本片段,然后您可以使用Twist 或Emacs的方式将其编辑为适当的编程语言。

2: 金字塔是基于这样的假设:与更集中的测试(如单元测试)相比,宽泛测试的代价昂贵,缓慢且脆弱。虽然这通常是正确的,但也有例外。如果我的高水平测试是快速,可靠和便宜的修改 - 那么不需要低级测试。

我们可以根据这个测试金字塔,把自动化测试也分层来做,这样就能更好的保证我们的测试质量和效率啦。

Martin Fowler 分层测试概念博文分享的更多相关文章

  1. python selenium自动化测试之路(1)--分层测试概念、selenium工具介绍

    1.分层自动化测试概念 传统的自动化市场更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段都需要自动化测试 大多公司与研发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,所 ...

  2. 转:google测试分享-分层测试

    原文: http://blog.sina.com.cn/s/blog_6cf812be0102vctg.html 上一次分享了google测试分享-SET和TE,有一些自动化测试的细节没有说清楚,那这 ...

  3. 微服务(Microservices)—Martin Fowler【翻译】

    本文转载自:http://www.cnblogs.com/liuning8023/p/4493156.html -------------------------------------------- ...

  4. (转载)持续集成(第二版)[来自:Martin Fowler]

    转载自:iTech的博客 持续集成(第二版) 作者:Martin Fowler 译者:雷镇 持续集成 是一种软件开发实践.在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以 ...

  5. MARTIN FOWLER谈敏捷开发

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/agile-development.html#tab-id-9 每个人都在谈论敏捷开发( ...

  6. robotframwork接口测试(五)—接口分层测试粗解

    个人小结,仅供参考. 接口测试很简单,但是很重要. 可以写代码,也可以用工具进行测试.工具说说就很多了,简单介绍一下我目前用过的几个能够测试接口的工具, Burpsuite:这类偏请求攻击类软件 Fi ...

  7. Martin Fowler关于IOC和DI的文章(中文版)

    IoC容器和Dependency Injection模式 Martin Fowler 编者语:最近研究IoC,在网上搜索到很多网页推荐阅读Martin Fowler的一片名叫Inversion of  ...

  8. 什么是微服务 Martin Fowler的microservices

    https://martinfowler.com/articles/microservices.html https://martinfowler.com/microservices/ 微服务,最早由 ...

  9. 敏捷史话(八):敏捷的破局之道——Martin Fowler

    在 Martin Fowler 的世界里,任何事情都有最优解. 1963年,Martin 出生于英格兰的沃尔索尔(Walsall),也在同样位于沃尔索尔的玛丽女王文法学校中接受中等教育.在这里的乡村中 ...

随机推荐

  1. TP QQ 微信 微博登录

    use Org\Util\QQconnect; use Org\Util\Wechatauth; use Org\Util\SaeTOAuthV2; use Org\Util\SaeTClientV2 ...

  2. Shortest Unsorted Continuous Subarray LT581

    Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...

  3. 搭建java环境和java学习

    https://blog.csdn.net/fishe_r/article/details/18863447 其中的 java配置文件用: { "shell_cmd": " ...

  4. php与html代码的若干转换

    以前懵懵懂懂的看过,没怎么在意,现在总结一下 一般来说,像留言板之类的content,用这样的就够了: $content=addslashes(htmlspecialchars($_POST['con ...

  5. spring学习 三 框架的搭建

    1 导入jar包 spring启来最少要5个包,四个核心包和一个依赖的日志包 2 创建配置文件 在dynamic web project下的src目录下,创建一个spring的xml配置文件,名称可以 ...

  6. c#中的as,is和强转

    as和强转之间的区别: as转换类型失败时不会抛出异常:强转类型失败时会抛出异常 引入is先对变量进行检验: if (foo is int) { i = (int)foo; } logger log ...

  7. kbmmw 中JSON 中使用SQL 查询

    前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值.也就是说 ...

  8. C语言程序设计50例(三)(经典收藏)

    [程序31]题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续 判断第二个字母.1.程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...

  9. zk可视化工具

    也是无意中接触到zk,搞得有点头大,之前都是通过crt连通服务后,在服务上通过命令去查看节点下的数据的,十分的不方便,后来发现了可视化工具这玩意儿还真的是好用,看节啊点下的数据啥的一目了然,我用过的有 ...

  10. MIT molecular Biology 笔记8 RNA剪接

    视频  https://www.bilibili.com/video/av7973580/ 教材 Molecular biology of the gene 7th edition  J.D. Wat ...