我喜欢BDD开发方法,但我遇到了一个问题,那就是要走多远。来自ThoughtWorks最新雷达的这条评论让我停顿了一下:
“像Cucumber这样的行为驱动设计(BDD)测试框架的出现,加上像Selenium这样的浏览器自动化工具,鼓励了在浏览器级别广泛使用验收测试。不幸的是,这鼓励了在运行测试的成本最大的地方进行大部分测试。相反,我们应该在适当的级别进行测试,尽可能接近代码,这样测试才能以最大的效率运行。浏览器级别的测试应该是锦上添花,由验收和在适当的层执行的单元测试支持。”
所以我的场景是这样的(双关语):
我有一个基本的CRUD应用程序,它有一个业务需求,可以根据允许最终用户选择的标准过滤显示的数据。为了便于讨论,让我们假设这是一个电力公司的应用程序,我将显示每个客户每月的电力使用情况。该应用程序的用户可以通过选择单个客户、多个客户、无客户或“所有客户”来缩小数据范围。显示的数据将根据他们选择的内容而改变。
对于一个产品涉众来说,这些实际上代表了4种不同的场景。然而,从开发人员的角度来看,它们实际上是相同的,唯一的区别是传递给DB的参数。所以问题就变成了:对每个置换进行拼写的好处是否超过了运行和维护它们的成本?
我认为BDD原则可能会说“是”,因为预期行为的通信更加明确,但我不确定。对我来说,这确实有一种矫枉过正的感觉。这些场景可能是大量的复制-粘贴,只需稍作改动。
我倾向于用一个捕获核心业务价值的场景来覆盖这个功能(“当我选择一个客户时,我会看到电源使用数据”),然后用一组非基于UI的集成测试来覆盖其他排列,这些测试验证返回正确数据的服务/查询。这样的思路是不是错了?在不放弃BDD的好处的情况下,确保覆盖这些场景的最佳答案是什么?
我对BDD的规则是,开发人员应该能够很容易地从描述的任何行为中导出场景,如果他们不能,就用场景来说明行为。
BDD在描述棘手的事情时是最有用的;或者在将专家知识传递给开发人员时,或者在发现不确定性之前缩小行为范围。在一个带有基本过滤器的CRUD应用程序中,行为确实很容易理解。
你所描述的可能是Dan North的“姜饼”模式的最佳描述:选择其他方法,但行为的一个方面与另一个不同(或者在这种情况下,行为的一个额外的、易于理解的方面)。他也使用复制粘贴的一点,我特别怀疑这种行为。
所以,你的倾向是完全正确的。如果要自动化,我可能只自动化一个例子,让单元和集成测试覆盖其余的。
我也想知道为什么这个项目被追求。一定有什么有趣的东西,否则就不会发生。找到它,它可能是一个很好的地方开始讨论场景。
null 因此,正如您所看到的,这是一个极其异步的场景。如果我使用Cucumber来触发它,我可能可以创建一个步骤定义,在晚上10点之前将100美元的余额插入到帐户中,但使用Cucumber来触发在晚上11点运行批处理是不现实的,因为批处理作业通常是由操作员使用他们自己的调度工具(如Control-M)执行的。然后让cucumber等几个小时,听几个小时,然后验证应计利息,我不确定我是否会遇到超时
我正在探索AWS Kinesis的数据处理要求,该要求用基于流的方法取代旧的批处理ETL处理。 该项目的关键要求之一是在以下情况下重新处理数据的能力: 发现并修复错误,然后重新部署应用程序。数据需要从一开始就重新处理 这里很好地记录了Kafka-https://cwiki.apache.org/confluence/display/KAFKA/Kafka流数据(重新)处理场景的场景。 我在Kine
我们使用和作为Spring 5.1.9的一部分,使用方法发出请求。此方法的文档强调了以下内容: ...使用exchange()时,应用程序有责任使用任何响应内容,而不管场景如何(成功、错误、意外数据等)。不这样做会导致内存泄漏。 如果我理解实现,那么如果请求被成功调度,将始终给我们一个响应,而不管响应代码是什么(例如4xx、5xx)。在这个场景中,我们只需要调用来使用响应。我关心的是错误场景(例如
之前/之后的场景不工作在j在平静的BDDserenity.version1.2.3-rc.5serenity.jbehave.version1.21.0 例如 当我尝试运行此代码时,输出是
我有一个Rest Web客户机来执行API调用,并按照下面给出的方式处理异常。 我希望以全局方式处理404、401和400错误,而不是在单个客户端级别处理。我们如何才能实现同样的目标。
我使用qaf提供的bdd实现进行测试自动化,并使用qaf-bdd-editors eclipse插件进行开发。我能够使用xml配置文件运行我的方案,但要运行特定的单个方案,每次都需要修改确认文件。有没有更简单的方法在编辑器中运行选定的场景而不修改配置文件?