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

QAFcucumber测试Spring靴

汲灿
2023-03-14

我有一个cucumber项目,它使用spring boot和testng。

这里是主要课程

@SpringBootTest
public class CucumberTestDefinitions extends FunctionalTesting {

    @Given("Something")
    public void smthg(){

    }
}
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = FunctionalTestingApp.class, initializers =
        ConfigFileApplicationContextInitializer.class)
public class FunctionalTesting {

    @Autowired
    protected FunctionalTestingConfiguration configuration;
}
@EnableConfigurationProperties(value = {FunctionalTestingConfiguration.class})
public class FunctionalTestingApp  {
}
@EnableAutoConfiguration
@ConfigurationProperties(prefix = "testing")
@Data
public class FunctionalTestingConfiguration {
// the config from yml file
}

我没有测试。xml文件,因为测试是通过spring boot启动的。出于某些原因,我想优先考虑测试,我发现我可以使用QAF(https://qmetry.github.io/qaf/latest/scenario-meta-data.html#pre-为bdd定义的元数据)。我试着用它,但没用。

以下是我所做的:

我在pom中添加了依赖项。xml(我使用cucumber 5)

我添加了这个注释@QAFTestStepProvider到CucumberTest定义类

我在RunnerTest类中添加了这个插件“com.qmetry.qaf.automation.cucumber.qafcumberPlugin”

这里是错误

java。lang.NoSuchMethodError:'java。朗,反思一下。方法com。qmetry。qaf。自动化步客户测试场景。getMethod()'

我试着添加一个testng。配置文件夹中的xml文件,但没有帮助

QAFSpring启动兼容吗?

非常感谢你的帮助

编辑

波姆。xml:

        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>5.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-testng</artifactId>
            <version>5.6.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-spring</artifactId>
            <version>5.4.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.qmetry</groupId>
            <artifactId>qaf-cucumber</artifactId>
            <version>3.0.0</version>
        </dependency>
        
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>

Runner类

        features = {"src/test/resources/toto"})
public class RunnerTest extends AbstractTestNGCucumberTests {

    @Autowired
    private ObjectMapper objectMapper;

    @Override
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

    @PostConstruct
    public void setUp() {
        objectMapper.registerModule(new JavaTimeModule());
    }

}

错误消息

java.lang.NoSuchMethodError: 'java.lang.reflect.Method com.qmetry.qaf.automation.step.client.TestNGScenario.getMethod()'
    at com.qmetry.qaf.automation.step.client.TestNGScenario.init(TestNGScenario.java:92)
    at com.qmetry.qaf.automation.step.client.TestNGScenario.<init>(TestNGScenario.java:70)
    at com.qmetry.qaf.automation.step.client.TestNGScenario.<init>(TestNGScenario.java:64)
    at com.qmetry.qaf.automation.testng.TestRunnerFactory.convert(TestRunnerFactory.java:76)
    at com.qmetry.qaf.automation.testng.TestRunnerFactory.init(TestRunnerFactory.java:67)
    at com.qmetry.qaf.automation.testng.TestRunnerFactory.newTestRunner(TestRunnerFactory.java:63)
    at org.testng.ITestRunnerFactory.newTestRunner(ITestRunnerFactory.java:55)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:676)
    at org.testng.SuiteRunner.init(SuiteRunner.java:178)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:112)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1275)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1251)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1100)
    at org.testng.TestNG.runSuites(TestNG.java:1039)
    at org.testng.TestNG.run(TestNG.java:1007)
    at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
    at com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:110)

共有1个答案

姜天宇
2023-03-14

不幸的是,我无法重现相同的错误,也无法得到其他关于依赖关系的错误。然而,要解决您最初的问题“QAF Cumber testNG with spring boot”和“喜欢优先测试”方面,简短的回答是肯定的。但TESTNG和Cucumber runner可能不会同时进行,尤其是优先考虑测试。这是什么意思?

当您使用cucumber建议的TestNG方法时,它只会在TestNG中创建一个虚拟测试,并将场景作为测试数据提供。它不能考虑每个场景作为独立的TestNG测试!因此,您无法从TestNG中获得所有好处(例如,优先级)。

然而,这并不意味着不能实现或不能一起使用QAF Cuccmber TestNG。当您使用QAF时,它为BDD提供了纯TestNG实现。QAF将每个场景视为TestNG测试,将带有示例的场景(场景大纲)视为数据驱动测试qaf cucuber将允许使用cucumber步骤,包括您选择的依赖注入,Spring在您的情况下。您将受益于所有TestNG功能,包括并行执行、侦听器和QAF的扩展功能,如元数据过滤器、测试数据过滤器、,

因此,当您想使用TestNG时,最好提供TestNG配置来运行用BDD2或小cucumber(BDD2的子集)编写的功能文件。所有您需要做的是创建以下XML文件来运行使用BDD2或小cucumber编写的功能文件。

<suite name="QAF Demo" verbose="0">
<parameter name="step.provider.pkg" value="pkg.from.where.steps.needs.tobe.loaded" />
<parameter name="scenario.file.loc" value="src/test/resources/toto" />
<test name="BDD Test" enabled="true">
    <classes>
        <class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2"></class>
    </classes>
</test>
</suite>

注:

>

按照上面的方法,因为您没有使用cucumber runner,所以不会执行任何cucumber钩子。当您使用TestNG时,它有更好的侦听器支持,您可以利用它,并且可以使用QAF提供的step listener。所以,如果您实现了任何钩子,您可以将其移动到适当的before/after listener方法中,并在配置文件中注册listener。

编辑:我尝试了你分享的测试项目,我也遇到了不同的问题。最后我终于能想出来如下。

POM更新:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>com.vaadin.external.google</groupId>
                    <artifactId>android-json</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.10</version>
            <scope>test</scope>
        </dependency>

你有两个选择。使用BDD2工厂创建TestNGScenario为每个场景或cucumber运行方式。无论哪种情况,它都应该起作用。可以添加报表仪表板以查看执行后的报表。

选项1:纯Testng

创建配置文件,使用BDDTestFactory2作为纯Testng测试运行:

<suite name="QAF Demo" verbose="0">
    <parameter name="step.provider.pkg" value="my.custom.packagename.testing"/>
    <parameter name="scenario.file.loc" value="src/test/resources/my/custom/packagename/testing"/>
    <parameter name="step.provider.sharedinstance" value="true" />
    <test name="BDD Test" enabled="true">
        <classes>
            <class name="com.qmetry.qaf.automation.step.client.text.BDDTestFactory2"></class>
        </classes>
    </test>
</suite>

使用此配置文件而不是运行程序类。在这种情况下,您不需要cucumber测试依赖性。

选项2:用于测试的cucumber转轮

  • 您将需要cucumber测试依赖
  • 要使用cucumber转轮运行,请使用相同的版本进行cucumber和cucumber测试。在您的情况下,cucumber-*版本需要是相同的5.6.05.4.0
  • 更新运行类如下:
@CucumberOptions(plugin = {"com.qmetry.qaf.automation.cucumber.QAFCucumberPlugin", "pretty", "html:target", "timeline:target"},
        /*tags = {"@Ignore"},*/
        features = {"src/test/resources/my/custom/packagename/testing"})
public class RunnerTest extends AbstractTestNGCucumberTests {

    @Autowired
    private ObjectMapper objectMapper;
    
    @Test(groups = "cucumber", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
    public void runScenario(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
        super.runScenario(pickleWrapper,featureWrapper);
    }

    @Override
    @DataProvider(parallel = true, name = "scenarios")
    public Object[][] scenarios() {
        return super.scenarios();
    }

    @PostConstruct
    public void setUp() {
        objectMapper.registerModule(new JavaTimeModule());
    }

}

作为TestNG运行。

 类似资料:
  • 我正在与 Spring框架4.3.3 AspectJ 1.8.9 我有两个,一个用于而另一个用于。每种方法都使用了一个的依赖关系。 我有以下Rest方法 观察我使用的第二个参数 我有以下切入点: 以及以下建议: 通过 当我发送有效数据时: 如: 或者由 通过< code>Gradle报告,我可以确认< code>@Around建议的效果如何。它只是看着AdviceUpdateOne - Class

  • 我有以下简单的控制器来捕捉任何意外的异常: 我正在尝试使用Spring MVC测试框架编写一个集成测试。这是我目前所掌握的:

  • 在CloudFoundry中,我对其进行了配置,以便将客户端证书转发给我的spring boot应用程序。 证书被放在头中,spring boot应用程序读取这个?,并检查CN是否被列入白名单,并发送相应的响应。不幸的是,我无法通过测试复制这种行为。我不断得到(调试输出): “在请求中找不到客户端证书” 我使用的是REST Assured,我的测试如下所示: 这个的基本uri是。客户端证书“

  • 我需要jUnit测试的帮助,我的结果是json文件,我需要测试该文件的长度,问题是在jsonPath函数中没有这样的方法。 这里是我的测试方法,预期长度是7。如有任何帮助,我将不胜感激,谢谢

  • 我试图测试我的Spring Web应用程序,但我有一些问题。 我在maven中添加了一个测试类 但是当我尝试运行这个测试时,我在userService上得到了一个。IntelliJ say“无法自动连线。未找到'UserService'类型的bean。在添加后,我遇到了此异常 我怎样才能解决它?我想我需要在我的tomcat服务器上运行这个测试,但是如何部署IntelliJ进行测试呢?(如命令“mv

  • 以下测验提供与Spring Framework相关的多项选择题(MCQ)。 您必须阅读所有给定的答案并单击正确的答案。 如果您不确定答案,则可以使用“ Show Answer按钮Show Answer 。 您可以使用“ Next Quiz按钮在Next Quiz中检查新的问题集。 问题1 - 数据访问/集成层的哪些模块? A - JDBC, ORM, OXM, JMS, Transactions