【问题标题】:Java and Cucumber how to reuse scenario multithreadJava和Cucumber如何复用场景多线程
【发布时间】:2016-08-05 06:13:43
【问题描述】:

我使用 java 和 cucumber,并且有一个步骤在我的所有场景中反复使用。 我知道我可以重用一个场景,但如果我这样做,我仍然会遇到问题。

假设我要重用的场景是:

假设用户存在

步骤定义为

@ContextConfiguration(classes = AppConfiguration.class) 
public class UserStepDef {

     User user;

     @ Given("^A user exists$")
     public void a_user_exists() {

         user = createUser();
     }
}

步骤定义创建用户对象的一个​​实例并将其分配给字段“user”,该字段将在后面的步骤中使用。 我可以访问该字段的唯一方法是拥有一个运行该步骤的类的实例 --> userStepDef.user。 我想在不同的功能文件中重用该步骤定义,但因为包含“用户”的类是一个单例,我无法并行运行测试。

有没有更好的方法?我错过了什么吗?

【问题讨论】:

    标签: java multithreading cucumber


    【解决方案1】:

    没错,您将无法在同一个 JVM 上并行运行两个测试,因为访问 User 对象时会出现竞争条件。

    阅读this tutorial on current cucumber tests and maven,了解如何并行运行黄瓜测试。

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,您想要的不是并行运行场景,而是在不同的步骤文件之间共享一些数据。是这样吗?

      如果答案是肯定的,请查看 Cucumber 的依赖注入方法。这将允许您在不同的 java 文件之间共享类实例。

      【讨论】:

      • 嗨 Eugene,我已经在使用依赖注入了,我想要的是能够并行运行测试,允许不同的场景使用相同的步骤定义,但不共享不同场景之间的数据。例如,我有场景 1 和场景 2,它们都有“给定现有用户”步骤,并且我不想重复代码,我只想在我的 UserStepDefinition.java 类中定义一次步骤。我在那里创建的数据:用户实例不应该在场景 1 和场景 2 之间共享,每个场景都有自己的用户。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2021-03-11
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      相关资源
      最近更新 更多