敏捷测试中BDD的应用

发表于:2020-7-23 10:48

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

 作者:测小喵    来源:测试架构之道

  01什么是BDD
  英文名: Behavior Driven Development
  中文名: 行为驱动开发
  特点:
  注重业务领域,描述用户行为,定义业务需求,而不会关心系统的技术实现。
  不是工具,强调的是一种合作方式,要求各个角色共同参与系统行为的挖掘和定义,以实现对业务价值的一致理解。
  全栈敏捷方法,能够促使团队所有角色从需求到最后的测试验证,进行高度的协作和沟通,以交付最有价值的功能。
  02为什么要用BDD
  场景一:需求人员觉得自己分析的需求已经写的很清晰了,并且根技术人员进行了足够的沟通,但是当产品验收的时候,发现实际开发的功能与期望的功能是存在差距的,不是业务人员想要的。
  出现场景一问题的原因分析:在工作中,我们会发现不同角色的人有着不同的领域知识,不同的思想,大家在沟通的时候,如果都用自己的领域语言,肯定会存在沟通不一致的问题,导致我们理解需求就不一致了。BDD他解决了领域知识不同,语言不通导致的沟通障碍。
  场景二:系统重构,会涉及到大量代码改动,也会关联到很多的功能的改动。如果在没有测试代码保证的前提下,系统重构工作很难进行。
  出现场景二问题的原因分析:一般写业务代码的人员与系统重构代码的人员不一定是同一个人,而一般的系统又比较复杂,面对各种复杂的业务,如何能让开发人员做到每更新一个功能,就能执行测试代码,确保优化的代码对系统老的代码没有影响。而BDD正好可以解决这个问题。
  03BDD相关框架
  Cucumber、JBehave、Twist、Concordion都是属于BDD的工具。一般用的比较多的是Cucumber和JBehave,Cucumber和JBehave都是正常成熟的框架,JBehave是纯Java框架, Cucumber是基于Ruby,我所在的公司,用的java比较多,所以我给大家用JBehave来举例。
  04BDD怎么做
  1、用户场景的描述格式为 “GIVEN... WHEN... THEN... ”,以一个用户充值为例:
  Scenario: 一个用户充值, 执行充值后,用户在XX系统里可看到充值记录,且金额正确
  Given 有一个用户进行充值,充值-用户id为 $userId,充值金额为 $money
  When 调用充值服务
  Then 充值服务返回成功
  And 这个用户账户可用余额为 $avaliableMoney
  Scenario是场景描述,Given、Then都可以有多个,用And来连接
  Given描述的是场景的前提条件、初始状态
  When是采取某个动作或者是发生某个事件,一定是动词
  Then是来描述期望的结果,注意这个地方,不是断言,只是期望结果
  通过这样的场景描述,我们就可以让业务人员、产品人员和技术人员的需求达成一致,甚至,我们可以让业务人员提供类似的验收case
  2、参数化
  在用户场景中,我们看到这样的“$userId”,其实这是表示参数化,我们可以指定不同用户来进行充值操作,并且可以充值不同的金额,我们在描述场景的用例里可以用这样的变量来代替,把变量对应的值提取出来存为一个表格或者独立的文件,这样将会让我们的用例更好的阅读,使用起来也比较方便。这也是数据驱动的方法来描述实例化的需求。针对充值的场景,我们来看下写法:
   userId | money | avaliableMoney
  1 | 12 | 12
  2 | 28 | 28
  3、场景与具体代码的结合
   @Given("有一个用户进行充值,充值-用户id为 $userId,充值金额为 $money")
  @Aliases(values={"XXX"})
  public void rechargeMethod(Long userId, BigDecimal money) {
  //doSomething;
  }
  在实际操作时,为了让story直接链接到我们的实现代码,可以在IDE开发工具中安装jbehave插件。
  当一个method被多个step使用时,我们可以用@Aliases注解。
  每一个Given、When、Then,都需要具体的方法与之对应,此次我只列举了Given的使用,其他的也是一样。
  4、其他的配置
  pom中配置jbehave相关依赖
  多场景统一运行管理,还可以生成详细的测试报告,大家可以查看jbehave官网;  https://jbehave.org/
  05什么样的项目适合用BDD
  其实从BDD的使用中,我们会发现,其实会有大量的测试代码。所以一般业务复杂,团队成员较多,沟通成本高的项目,很推荐大家使用BDD,一般业务比较少,周期比较短的项目,其实没必要使用BDD。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号