【发布时间】:2015-05-01 11:26:29
【问题描述】:
问题: 在运行 A.story 和 B.story 之前,必须先运行并完成 Procondition.story,因为 Precondition.story 将数据插入数据库中,然后由 A.sotry 和 B.story 使用。
我知道设置此依赖项的方法很少,但它们不适用于这种情况。
'Givenstories' 注释没有太大帮助,因为在这种情况下 Precondition.story 将运行两次,第一次是 A.story,第二次是 B.story,这会导致 Precondition.story 第二次说数据失败它试图插入到数据库中的那个已经存在。
Using Maven failsafe plugin 这肯定会将 Precondition.story 放在执行列表的顶部,但所有这些故事都在多线程环境中运行,其中有 8 个线程准备好同时运行这些故事。线程 1 采用 Precondition.story,但该故事尚未完成时 A.story 和 B.story 由线程 2 和 3 启动,导致 A.story 和 B.story 失败。
指定覆盖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