敏捷测试中BDD的应用

玩技站长 测试分享评论131字数 1844阅读模式
摘要全栈敏捷方法,能够促使团队所有角色从需求到最后的测试验证,进行高度的协作和沟通,以交付最有价值的功能。

01什么是BDD

英文名: Behavior Driven Development文章源自玩技e族-https://www.playezu.com/185219.html

中文名: 行为驱动开发文章源自玩技e族-https://www.playezu.com/185219.html

特点:文章源自玩技e族-https://www.playezu.com/185219.html

注重业务领域,描述用户行为,定义业务需求,而不会关心系统的技术实现。文章源自玩技e族-https://www.playezu.com/185219.html

不是工具,强调的是一种合作方式,要求各个角色共同参与系统行为的挖掘和定义,以实现对业务价值的一致理解。文章源自玩技e族-https://www.playezu.com/185219.html

全栈敏捷方法,能够促使团队所有角色从需求到最后的测试验证,进行高度的协作和沟通,以交付最有价值的功能。文章源自玩技e族-https://www.playezu.com/185219.html

02为什么要用BDD文章源自玩技e族-https://www.playezu.com/185219.html

场景一:需求人员觉得自己分析的需求已经写的很清晰了,并且根技术人员进行了足够的沟通,但是当产品验收的时候,发现实际开发的功能与期望的功能是存在差距的,不是业务人员想要的。文章源自玩技e族-https://www.playezu.com/185219.html

出现场景一问题的原因分析:在工作中,我们会发现不同角色的人有着不同的领域知识,不同的思想,大家在沟通的时候,如果都用自己的领域语言,肯定会存在沟通不一致的问题,导致我们理解需求就不一致了。BDD他解决了领域知识不同,语言不通导致的沟通障碍。文章源自玩技e族-https://www.playezu.com/185219.html

场景二:系统重构,会涉及到大量代码改动,也会关联到很多的功能的改动。如果在没有测试代码保证的前提下,系统重构工作很难进行。文章源自玩技e族-https://www.playezu.com/185219.html

出现场景二问题的原因分析:一般写业务代码的人员与系统重构代码的人员不一定是同一个人,而一般的系统又比较复杂,面对各种复杂的业务,如何能让开发人员做到每更新一个功能,就能执行测试代码,确保优化的代码对系统老的代码没有影响。而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。

玩技站长微信
添加好友自动发送入群邀请
weinxin
rainbow-shownow
玩技官方公众号
官方微信公众号
weinxin
PLAYEZU
 
  • 版权提示:本站仅供存储任何法律责任由作者承担▷诈骗举报◁▷新闻不符◁▷我要投稿◁
    风险通知:非原创文章均为网络投稿真实性无法判断,侵权联系2523030730
    免责声明:内容来自用户上传发布或新闻客户端自媒体,切勿!切勿!切勿!添加联系方式以免受骗。
  • 原创转载:https://www.playezu.com/185219.html
    转载说明: 点我前往阅读>>>
匿名

发表评论

匿名网友
确定