【问题标题】:Jbehave maintain global data across stories - for dependency/execution orderJbehave 跨故事维护全局数据 - 用于依赖/执行顺序
【发布时间】:2015-05-01 11:26:29
【问题描述】:

问题: 在运行 A.story 和 B.story 之前,必须先运行并完成 Procondition.story,因为 Precondition.story 将数据插入数据库中,然后由 A.sotry 和 B.story 使用。

我知道设置此依赖项的方法很少,但它们不适用于这种情况。

  1. 'Givenstories' 注释没有太大帮助,因为在这种情况下 Precondition.story 将运行两次,第一次是 A.story,第二次是 B.story,这会导致 Precondition.story 第二次说数据失败它试图插入到数据库中的那个已经存在。

  2. Using Maven failsafe plugin 这肯定会将 Precondition.story 放在执行列表的顶部,但所有这些故事都在多线程环境中运行,其中有 8 个线程准备好同时运行这些故事。线程 1 采用 Precondition.story,但该故事尚未完成时 A.story 和 B.story 由线程 2 和 3 启动,导致 A.story 和 B.story 失败。

  3. 指定覆盖storyPath()的故事顺序:由于上面#2中提到的相同问题而不起作用。

可能的解决方案:如何在布尔变量 preconditionCompleted 中维护 Precondition.story 的状态。当 Precondition.story 完成时 preconditionCompleted 设置为 true。然后在开头的 A.story 和 B.story 中添加一个步骤,每秒钟对 preconditionCompleted 进行轮询,直到它变为真,然后执行故事的其余部分。

为此,我需要知道在哪里可以声明此类全局变量以跨故事使用?

【问题讨论】:

  • 静态变量somewhere怎么样?
  • @Kristof 是的,这是选项之一,我目前正在使用静态变量进行测试。我有点担心保护状态,即使它是同步的。
  • 同意。我以前需要类似的东西。为了在步骤/场景之间传递几个参数,我实现了一个单例类,其中包含同步映射(scenarioParams、storyParams),以便我可以通过它们传递变量。我清除了@AfterScenario 中的scenarioParams 和@AfterStory 中的storyParams,这样它们就不会对其他场景/故事产生影响。你可以用 globalParams 做类似的事情,当然你根本不需要清除它们。好想同步地图会为你做同步。

标签: automation automated-tests bdd jbehave user-stories


【解决方案1】:

你可以使用 Singleton 类,它会包含一些对象。这个对象可以在 Precondition.story 的@BeforeStory 方法中锁定,在@afterStory 中释放。然后在@BeforeStory方法中的A和B故事中,可以等到这个对象被释放后再执行。

我能想到的另一种方法是制作自定义订单注释,但是您需要创建逻辑来处理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多