【问题标题】:Is there a way to reuse cucumber steps from multiple projects, in another project?有没有办法在另一个项目中重用多个项目中的黄瓜步骤?
【发布时间】:2020-08-18 10:03:49
【问题描述】:

我有 2 个微服务 A 和 B,它们在自己的项目中为它们定义了黄瓜测试。

服务A

@ContextConfiguration(classes = [AppConfiguration::class])
class ServiceAStepDefs @Autowired constructor(private var serviceAProfile: ServiceAProfile) : En {
    //stepdefs live here
}

class AppConfiguration {

    @Bean
    fun serviceAProfileMaker(): ServiceAEnvironmentProfile {
        val oktaConfig = DefaultOAuth2Config.getToken()
        return ProfileManager.getEnvProfile(token)
    }

}

服务 B

@ContextConfiguration(classes = [AppConfiguration::class])
class ServiceBStepDefs {
    //stepdefs live here
}    
@ComponentScan("com.hello.*")
class AppConfiguration {

    @Bean
    fun serviceBProfileMaker(): ServiceBEnvironmentProfile {
        val token = DefaultOAuth2Config.getToken()
        return ProfileManager.getEnvProfile(token)
    }
}

在另一个项目 C 中,我想一起测试这两个服务。为此,我创建了一个 jar 文件,其中包含每个服务的步骤定义,并将它们作为依赖项拉入项目 C。

当我尝试使用服务 A 和服务 B 中的步骤从项目 C 运行黄瓜测试时,我看到两个项目中都使用 Spring 上下文的问题,我猜这是正确的。

10:17:59.936 [DEBUG] [TestEventLogger]     io.cucumber.core.backend.CucumberBackendException: Glue class class com.hello.serviceA.stepdefs.ServiceASteps and class com.hello.stepdefs.ServiceBSteps both attempt to configure the spring context. Please ensure only one glue class configures the spring context

我有没有办法连接这两个服务,以便我可以为这两个服务配置 Bean 并重用这些步骤?

【问题讨论】:

    标签: spring kotlin cucumber cucumber-jvm


    【解决方案1】:

    当使用cucumber-spring Cucumber 使用Spring 的TestContextManager 框架。该框架使用单个类启动测试上下文。检查此类是否有任何配置应用程序上下文的注释,例如@ContextConfiguration

    由于两个步骤定义都有此注释,Cucumber 无法决定使用哪个,您将收到抱怨此错误的错误。要解决此问题,您应确保只有一个粘合类具有 @ContextConfiguration 注释。

    Cucumber v5.6.0 添加了@CucumberContextConfiguration,这使得这更容易做到。

    因此,您可能希望像这样构建您的项目:

    a
    |- config
    | | AConfiguration with `@CucumberContextConfiguration` and `@ContextConfiguration(...)`
    | | RunCucumberTest with `@CucumberOptions(extraGlue="a.steps")`
    |- steps
    | | ASteps
    
    b
    |- config
    | | BConfiguration with `@CucumberContextConfiguration` and `@ContextConfiguration(...)`
    | | RunCucumberTest with `@CucumberOptions(extraGlue="b.steps")`
    |- steps
    | | BSteps
    
    c
    |- config
    | | CConfiguration with `@CucumberContextConfiguration` and `@ContextConfiguration(...)`
    | | RunCucumberTest with `@CucumberOptions(extraGlue={"a.steps", "b.steps"})`
    

    见:https://github.com/cucumber/cucumber-jvm/tree/main/spring

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      相关资源
      最近更新 更多