首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在场景中处理数据重用的设计模式(BDD)

在场景中处理数据重用的设计模式(BDD)
EN

Stack Overflow用户
提问于 2016-01-27 04:22:06
回答 3查看 95关注 0票数 1

我希望您对我的场景有以下建议:

我正在使用Cucumber和Selenium WebDriver工具使用bdd技术实现自动化测试,目前正在发生的情况是:许多场景依赖于彼此的数据,所以现在我将这些数据存储在我定义步骤的类中,以便我可以在其他场景中使用。

但是,随着应用程序的增长,我得到的场景越多,我的应用程序就变得越混乱。

在这种情况下,您有什么设计模式或解决方案可以使用吗?

EN

回答 3

Stack Overflow用户

发布于 2016-01-27 08:30:21

总体而言,您需要查看Separation of concernsSingle Responsibility Principle

在Cucumber级别,有两层责任,测试脚本(功能文件+步骤实现)和被测系统的模型。步骤实现直接映射到模型上。它的唯一目的是将功能步骤绑定到方法。Model实现是对被测系统的状态进行建模,其中包括状态持久性。模型应该以声明式的方式公开它的接口,而不是命令式方法,这样我们就可以看到优先于page.click('login');fooPage.login();

在使用Page Objects Model的Selenium WebDriver方面,正是这些可重用对象理解了表示页面的语义,并将成为第三层。

Layers -测试脚本(功能文件+ Java步骤)- SUT模型(保存状态)-页面对象模型-> WebDriver/Browser

票数 0
EN

Stack Overflow用户

发布于 2016-01-27 15:03:11

正如您所说,依赖于其他场景中的数据的场景会变得复杂和混乱。执行的顺序很重要。

如果您以随机顺序执行场景,会发生什么?这会对你有什么影响?

我的方法是努力使每个场景相互独立。如果您有一个流程,如下订单,准备创建发票所需的发货等,那么我将确保在每个场景之前应用程序的状态设置正确。也就是说,执行创建所需状态的代码。

这是一种复杂的方式,为了创建发票,我必须首先设置应用程序状态,以便它已准备好装运。以及其他可能的事情。

在执行任何场景之前,我会努力将应用程序设置为已知的状态。如果这意味着清理数据库,那么我会这么做。我们的目标是能够独立地执行每个场景。

您的系统中的功能可能会相互构建。这并不意味着你用来检查你的应用程序是否仍然工作的场景应该在它们的执行过程中相互构建。

不确定这是否符合模式,但它可能是一个努力的方向。

票数 0
EN

Stack Overflow用户

发布于 2018-03-14 17:54:53

正如已经指出的,尝试将测试场景与数据相互隔离。

以下是几种方法:

  1. 在执行每个测试场景之前清除数据库或恢复原始数据都会成功;但是,这会显著减慢测试速度。如果清理操作需要大约10秒,那么100个测试需要大约15分钟的额外时间,而1000 tests.
  2. Alternatively,的每个测试需要大约3个小时才能生成并使用自己的数据。这里的问题是,许多测试实际上可能使用相同的数据,在这种情况下,反复创建这些数据几乎没有意义,更不用说这也是需要时间的事情了。
  3. 还有另一个选择是区分只读测试和读写测试。前者可以使用默认数据,因为它们不受数据依赖关系的影响。后者应该处理特定的数据,以避免与其他测试方案发生冲突。

尽管如此,测试场景中的步骤定义很可能依赖于作为该测试场景的一部分执行的先前步骤定义的状态。因此,仍然需要以某种方式进行状态管理。在你的模型中你可能需要一些辅助对象。

请记住,每个测试场景的Steps类以及从它们创建的对象都是实例化的。因此,私有实例属性将不起作用,除非测试场景使用的所有步骤都在相同的steps类中实现。否则,可以考虑静态变量,或者尝试使用依赖注入框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35023213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档