Переход с info.cukes на io.cucumber с помощью testNG Maven. Бросая ошибка во время выполнения - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть тестовый фреймворк с селеном, использующий maven. Я надеялся получить описания шагов, когда я запускаю тесты на огурец с помощью testng. Это был старый проект, поэтому я изменил свои зависимости с info.cukes до последней версии io.cucumber. Однако при запуске файла теста бегуна он, похоже, выдает ошибки.

java.lang.NoSuchMethodError: cucumber.runtime.RuntimeOptions.getPluginFormatterNames()Ljava/util/List;

    at cucumber.runtime.formatter.Plugins.createPlugins(Plugins.java:64)
    at cucumber.runtime.formatter.Plugins.<init>(Plugins.java:37)
    at cucumber.api.testng.TestNGCucumberRunner.<init>(TestNGCucumberRunner.java:56)
    at cucumber.api.testng.AbstractTestNGCucumberTests.setUpClass(AbstractTestNGCucumberTests.java:16)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:458)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:168)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:105)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)

У меня есть следующие зависимости maven, но я понятия не имею, является ли эта зависимость отсутствующей для запуска теста? Любая помощь будет принята с благодарностью. Как и в случае с поиском этой проблемы, кажется, что она в основном решается с помощью одинаковых версий версий всех файлов io.cucumber, которые я делаю.

 <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-junit -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

 <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-java -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>4.2.0</version>
</dependency>

 <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-testng -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>4.2.0</version>

</dependency>

        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>2.21.0</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/tag-expressions -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>tag-expressions</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-expressions -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-expressions</artifactId>
            <version>6.2.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/io.cucumber/messages -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>messages</artifactId>
            <version>2.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java8 -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java8</artifactId>
            <version>4.2.0</version>
        </dependency>



        <!-- https://mvnrepository.com/artifact/com.github.mkolisnyk/cucumber-report-generator -->
<dependency>
    <groupId>com.github.mkolisnyk</groupId>
    <artifactId>cucumber-report-generator</artifactId>
    <version>1.3</version>
</dependency>



    <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
            <scope>test</scope>
        </dependency>  

        <!-- https://mvnrepository.com/artifact/io.cucumber/gherkin -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>gherkin</artifactId>
    <version>6.0.14</version>
</dependency>

        <!-- https://mvnrepository.com/artifact/info.cukes/gherkin -->
<!--<dependency>
    <groupId>info.cukes</groupId>
    <artifactId>gherkin</artifactId>
    <version>2.12.2</version>
    <scope>provided</scope>
</dependency>-->
        <!-- https://mvnrepository.com/artifact/info.cukes/cucumber-core -->
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-core</artifactId>
    <version>4.2.0</version>
</dependency>



     <!-- https://mvnrepository.com/artifact/ru.sbtqa.tag/cucumber-runner -->
<dependency>
    <groupId>ru.sbtqa.tag</groupId>
    <artifactId>cucumber-runner</artifactId>
    <version>1.0.7</version>
</dependency>

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Найдите ниже некоторые фрагменты, чтобы решить проблему

  1. проверить, существует ли транзитивная зависимость для groupid info.cukes

    $ mvn dependency:tree | grep 'info.cuke'
    [INFO] |  +- info.cukes:cucumber-junit:jar:1.2.5:compile
    [INFO] |  |  \- info.cukes:cucumber-core:jar:1.2.5:compile
    [INFO] |  |     +- info.cukes:cucumber-html:jar:0.2.3:compile
    [INFO] |  |     \- info.cukes:cucumber-jvm-deps:jar:1.0.5:compile
    [INFO] |  +- info.cukes:cucumber-testng:jar:1.2.5:compile
    [INFO]    |  +- info.cukes:cucumber-java:jar:1.2.5:compile
    [INFO]    |  +- info.cukes:gherkin:jar:2.12.2:compile
    

    при проверке полного вывода показывает, какая ваша зависимость зависит от нее

    ...
    [INFO] +- com.github.mkolisnyk:cucumber-report-generator:jar:1.3:compile
    ...
    [INFO] |  +- info.cukes:cucumber-junit:jar:1.2.5:compile
    ...
    [INFO] |  +- info.cukes:cucumber-testng:jar:1.2.5:compile
    ...
    [INFO] \- ru.sbtqa.tag:cucumber-runner:jar:1.0.7:compile
    [INFO] \- ru.sbtqa.tag:cucumber-runner:jar:1.0.7:compile
    [INFO]    +- ru.yandex.qatools.allure:allure-cucumber-jvm-adaptor:jar:1.6.4:compile
    ...
    [INFO]    |  +- info.cukes:cucumber-core:jar:1.2.5:compile
    ...
    [INFO]    |  +- info.cukes:cucumber-java:jar:1.2.5:compile
    [INFO]    |  +- info.cukes:gherkin:jar:2.12.2:compile
    ...
    [INFO]    +- info.cukes:cucumber-junit:jar:1.2.5:compile
    
  2. , поскольку может иметь место наложение классов с одинаковым квалифицированным именем, исключите эти временные зависимости в pom.xml

        <dependency>
            <groupId>com.github.mkolisnyk</groupId>
            <artifactId>cucumber-report-generator</artifactId>
            <version>1.3</version>
            <exclusions>
                <exclusion>
                    <groupId>info.cukes</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
  3. при повторном запуске теста выдается исключение

    java.lang.NoClassDefFoundError: gherkin/IGherkinDialectProvider
    
  4. , поскольку мы явно определяем зависимость io.cucumber:gherkin, она может быть связана с указанным <version>, закомментируйте ее, чтобы узнать, будет ли выбрана другая версия

    <!--<dependency>-->
        <!--<groupId>io.cucumber</groupId>-->
        <!--<artifactId>gherkin</artifactId>-->
        <!--<version>6.0.14</version>-->
    <!--</dependency>-->
    

    это показывает, что io.cucumber:cucumber-core:jar:4.2.0 зависит от версии 5.1.0 из io.cucumber:gherkin

    $ mvn dependency:tree
    ...
    [INFO] +- io.cucumber:cucumber-core:jar:4.2.0:compile
    [INFO] |  +- io.cucumber:cucumber-html:jar:0.2.7:compile
    [INFO] |  +- io.cucumber:gherkin:jar:5.1.0:compile
    

С этими изменениями, по крайней мере, выполняется TestNG модульное тестирование.

Как зависимости com.github.mkolisnyk:cucumber-report-generator и ru.sbtqa.tag:cucumber-runner в зависимости от info.cuke, они могут работать некорректно. Чтобы решить эту проблему, вы можете:

  • проверить наличие более новой версии, которая может не зависеть от идентификатора группы info.cuke
  • использовать более раннюю версию io.cucumber зависимостей
  • использовать более детальное исключение зависимостей info.cuke вместо исключения всех идентификаторов артефактов
  • комбинация вышеуказанных пунктов
  • что-то еще, в зависимости от вашего варианта использования и требований

Может быть, эти шаги помогут вам найти решение, работающее на вас.

0 голосов
/ 07 ноября 2018

Проверьте maven pom.xml огуречная сердцевина огуречная ява огуречная юнит

Эти файлы должны иметь одинаковую версию. В вашем примере идентификатор артефакта cucumber-java отличается от версии остальных.

Попробуйте изменить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...