您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件测试技术 > 其他相关 > 正文

敏捷测试中BDD的应用

发表于:2020-08-01 作者:测小喵 来源:测试架构之道

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。