做过测试工作的人或许都知道,测试一个产品的工作量是比其开发的工作量要大得多的(在微软,一个团队测试人员的数目与开发人员的理想的比例是1.5 比1)。做过测试工作的人也一定知道,这个“1.5倍”的黄金比例由于开发进度,项目需求的原因常常不容易满足——即使是在微软,这样一个对软件测试有巨大投入的公司。可以想象,一边是紧迫的项目进度,一边又是必须提供给用户最高质量产品的不可侵犯的原则,这事儿对测试团队就是一个地地道道的“杯具”。所幸的是,微软的工程师们总能绞尽脑汁,螺蛳壳里做道场,榨干每一行代码、每一个测试用例的价值,最终把“杯具”变成“洗具”。下面就给大家讲一个我参与的项目中利用策略模式(Strategy Pattern)做更高效测试的例子。

  首先介绍一下产品背景。该产品是典型的数据库 -> WebService -> Web三层架构,其中WebService和Web界面均是提供给用户的开放接口,而他们提供的操作都是针对对象的创建,读取,更新和删除。对我们测试团队而言,WebService和Web两种用户访问界面是必测无疑的。这两种界面的具体操作完全不同,譬如在Web界面上创建对象需要填写并提交表单,而在 WebService界面中则是一个WCF(Windows Communication Foundation)的调用,但是他们对后台而言则是完全相同的。可以用下面这个图来表示。

  这时候工程师们就动起了脑筋:既然Web界面和 WebService界面对于后台而言是相同的,也就是说Web界面的测试 和WebService界面的测试可以共享测试的过程(Scenario)和数据(Data),只是具体实施操作的时候有所不同。这不就是设计模式中的策略模式吗?没错,把逻辑操作(这里是测试步骤)抽象出来,可以在运行时切换具体实现的,就是策略模式。具体而言呢,对WebService的各种操作实现就是一个策略,对Web界面的操作实现也是一个策略。当工程师们实现自动化测试用例的时候,他们并不关心他在通过Web还是通过WebService做操作,他们只关心的是:用什么数据,做什么步骤。至于怎么做,是运行时根据环境决定的。这其中的关系可以用下面的图表示:

  基于在我所在项目组的实践,我们发现利用策略模式的好处有:

  1) 同样的自动化测试用例可以同时测试Web界面和WebService界面,成倍的简化了自动化测试代码的编写工作。

  2) 清晰的分离了“做什么”和“怎么做”。编写测试代码可以更关注测试的步骤和逻辑。

  3) 在项目的初始阶段,WebService界面的操作会比较稳定,而Web界面往往会由于复杂度更高而不稳定。这时候可以使用WebService策略开发并运行自动化测试,等到Web界面稳定了,再把环境变量设为Web策略,就可以完全测试Web界面了。而常规的做法,如果Web界面不稳定,甚至只是某一个模块不稳定,就会减慢或阻碍整个团队的测试开发,进度大大受阻。

  4) 当运行一个Web界面测试的时候,如果测试结果失败,可以动态调整为使用WebService策略重新测试。这样可以“自动”地帮助开发测试人员定位问题发生在Web层还是在WebService层。

  5) 整体测试框架具有较高的扩展性。如果产品需要新增PowerShell作为另一个用户界面,那么只需要实现PowerShellTestStrategy,就可以让大多数测试用例运行在PowerShell上。

  在微软,其实还有很多做高效测试的例子,下次有机会再拿出来晒吧

转载于:https://www.cnblogs.com/eric-peng-888/p/4860308.html

高效率测试之巧用策略模式 (引用)相关推荐

  1. 巧用 Spring 自动注入实现策略模式升级版

    一.前言 1.1 背景 在工作过程中,有时候需要根据不同的枚举(常量)执行不同的逻辑. 比如不同的用户类型,使用不同的优惠政策:不同的配置变化,走不同的处理逻辑等. 下面模拟一个根据不同用户类型,走不 ...

  2. 设计模式之策略模式(Strategy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  3. JavaScript版本的策略模式

    俗话说,条条大路通罗马.在美剧<越狱>中,主角Michael Scofield就设计了两条越狱的道路.这两条道路都可以到达靠近监狱外墙的医务室. 同样,在现实中,很多时候也有多种途径到达同 ...

  4. Java设计模式之策略模式与状态模式

    一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...

  5. 设计模式 -- 策略模式

    2015年12月10日21:54:25 完成一个功能可能会有好几种算法或者方法来实现,通过对算法和方法的抽象,提供统一接口,不通算法,实现方式为实现类,通过注入不同的实现对象来实现算法,实现方式的灵活 ...

  6. iOS开发-策略模式

    策略(Strategy)模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.策略模式是对算法的包装,是把使用算法的责任和算法本身分割开 ...

  7. Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)

    Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...

  8. java - 策略模式、状态模式、卫语句,避免多重if-else(转)

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

  9. 结合JDK源码看设计模式——策略模式

    前言: 现在电商已经成为我们生活中不可或缺的购物渠道,同时各大商家会针对不同的时间做出不同的折扣,这在我们看来就是一种营销手段,也是一种策略,今天我们就来讲讲JDK中的策略模式是怎么样的. 一.定义 ...

最新文章

  1. WSAD5技巧之一:访问Oracle9i数据源
  2. pytorch笔记: 搭建Skip—gram
  3. JZOJ 5445. 【NOIP2017提高A组冲刺11.2】失格
  4. C# 使用Epplus导出数据到Excel
  5. 专家答疑:在ERP系统中确保销售订单准确性
  6. php编写个人所得税单元测试,php趣味编程-php求个人所得税
  7. mekko 教程_Power BI桌面Mekko图表
  8. 什么是计算机嵌套分类汇总,excel嵌套分类汇总 Excel表格中创建嵌套分类汇总和查看嵌套分类汇总明细的方法...
  9. Bootstrap 第一天
  10. 【SVN】解决SVN安装语言包后无法选择中文的问题
  11. 中压变频器行业现状调研及趋势分析报告
  12. 小米 admob广告 ID_3月产品更新如何做好再营销广告归因!
  13. 微积分Z2J5 两个重要极限
  14. 单位球坐标变换为椭球 matlab
  15. 左岸读书-知识分子的典型
  16. python log日志打印两遍_python打印log重复问题
  17. MS-DOC 文件格式概述
  18. IEC60958和IEC61937
  19. 《带你体验程序员专属编辑器Markdown编辑器|CSDN编辑器测评》
  20. 孩子用什么样的灯对眼睛没有伤害呢?2023这样的灯光更护眼

热门文章

  1. openwrt gstreamer实例学习笔记(四. gstreamer Bins)
  2. (转)c++模版:包含模型、显式实例化、分离模型
  3. Go学习笔记(一)windows下的Go 语言环境安装,并运行第一个Hello World程序
  4. JSF实现文件下载功能
  5. Linux学习笔记(三):系统运行级与运行级的切换
  6. Spring自学日志02(对象的创建,依赖注入)
  7. URL中使用IPv4,IPv6和主机名
  8. Bootstrap(一)——简介、布局容器和工具类使用(flex布局)
  9. python数据按照分组进行频率分布_python实现读取类别频数数据画水平条形图
  10. 给正在备战秋招的同学一些小建议