当前位置: 首页 > 知识库问答 >
问题:

要在Cucumber功能文件中针对多个场景仅执行一次后台

司寇望
2023-03-14

对于多个场景,我想在每个cucumber功能文件中只执行一次后台。如何在step文件中执行此操作?

功能:用户可以验证。。。。。。。。。。。

背景:给定输入特定逻辑的测试数据

场景:验证。。。。。。。。。1当A1和B1然后C1时

场景:验证.........2当A2和B2然后C2

场景:验证。。。。。。。。。2当A3和B3然后C3时

共有3个答案

陆耀
2023-03-14

如果希望后台只运行一次。可以使用实例变量ex,i==0添加条件,然后在方法末尾执行逻辑和增量i。

对于下一个场景,i值是1,它不等于0,它不会执行逻辑。

袁宜
2023-03-14

后台设计为在每个场景之前每次运行。它不好和标准以及黑客的背景。

吴靖
2023-03-14

试验应隔离。这就是Cucumber的设计方式,这有很好的理由。我强烈反对,除非你必须这样做。

如果您有需要在整个测试套件之前执行的内容,请考虑@BeforeAll挂钩。

也就是说,我以前遇到过这个。我们进行了一些测试,这些测试将启动一个需要很长时间的过程(例如配置虚拟机,一次需要10分钟...),但如果已经完成,则可以在其他测试中跳过。

因此,您可能希望按照..设计步骤。。

“鉴于..X已完成”

在步骤中,检测X是否完成,如果没有,则执行X。如果已完成,则跳过它。例如,假设创建用户是一个非常耗时的过程。那我们就可以。。

鉴于用户“Joe Bloggs”已创建

步骤定义将首先尝试确定Joe是否存在,如果不存在,则创建用户。您有一个初始启动问题,但其他测试将能够安全地假设Joe存在。

为什么你不应该这样做

如果你这样做,你的测试很有可能会相互冲突。

假设您有很多使用Joe Bloggs用户的测试。也许有些人会将他从系统中删除。有些人可能会暂时停用用户、添加角色、更改他们的名字...各种各样的事情。所有测试都假设他们正在测试的系统的某些事情,并且您故意损害您对环境的测试假设。

如果您运行的是并行测试,则情况尤其糟糕。也许您的系统有一个限制,一次只能有一个人作为Joe登录。或者每个测试都在改变关于Joe的负载,没有任何测试可以假设Joe用户的状态。然后你会陷入一片混乱。

最好的解决方案通常是为您运行的每个测试创建全新的数据。打开这些API并为每次测试运行创建一次性数据。这里有一篇关于它的好博客文章:https://opencredo.com/test-automation-concepts-data-aliases/

 类似资料:
  • 我正在使用Maven SureFire,TestNG(扩展AbstractTestNGCucumber测试)和Cucumber,并且有几个功能文件,每个文件都有几个场景。我希望能够在一个功能文件中并行运行每个场景,但一次只能运行一个功能文件。这有可能吗? 举个例子: 我希望场景1a、1b和1c在功能文件1中并行运行。一旦这些完成,运行场景2a和功能2等的2b。 这是当前一次从所有功能文件运行所有方

  • 我尝试在cucumber中执行特性后执行一个脚本来清理数据库。我使用前后挂钩的方式如下: 对于before,我可以避免使用静态变量在每个场景之前调用脚本。但不知道如何为后钩子做: 有没有办法捕获最后一个方案是否已经执行,并且仅在满足该条件时才触发 clearData()?有没有更优雅的方法?

  • 尝试在企业项目中进行PIT突变测试。让它做现有的JUNit测试,但我们也有很多Cucumber测试需要作为度量的一部分。在maven项目中添加了pit cucumber插件,但未找到任何场景。不确定插件的配置中是否有我看不到的秘密。 我得到以下输出: 信息:向minion发送0个测试类

  • 使用Cucumber,我们创建了由不同场景组成的不同功能文件。我们记住的一件事是,每个场景都独立于所有其他场景。 问:我们可以对所有的特征文件或场景进行并行执行吗?

  • 问题内容: 我的具体问题是,我需要执行(可能)大量的Javascript函数来准备类似批处理文件的内容(每个函数调用都会向同一批处理文件中添加一些信息),然后在所有这些调用完成之后,执行发送批处理文件的最终功能(例如,将其作为HTML响应发送)。我正在为此寻找一种通用的Javascript编程模式。 概括问题:给定Javascript函数funcA(),funcB()和funcC(),我将找出排序