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”,其实这是表示参数化,我们可以指定不同用户来进行充值操作,并且可以充值不同的金额,我们在描述场景的用例里可以用这样的变量来代替,把变量对应的值提取出来存为一个表格或者独立的文件,这样将会让我们的用例更好的阅读,使用起来也比较方便。这也是数据驱动的方法来描述实例化的需求。针对充值的场景,我们来看下写法:
3、场景与具体代码的结合
在实际操作时,为了让story直接链接到我们的实现代码,可以在IDE开发工具中安装jbehave插件。
当一个method被多个step使用时,我们可以用@Aliases注解。
每一个Given、When、Then,都需要具体的方法与之对应,此次我只列举了Given的使用,其他的也是一样。
4、其他的配置
pom中配置jbehave相关依赖
多场景统一运行管理,还可以生成详细的测试报告,大家可以查看jbehave官网; https://jbehave.org/
05什么样的项目适合用BDD
其实从BDD的使用中,我们会发现,其实会有大量的测试代码。所以一般业务复杂,团队成员较多,沟通成本高的项目,很推荐大家使用BDD,一般业务比较少,周期比较短的项目,其实没必要使用BDD。
评论