代码之家  ›  专栏  ›  技术社区  ›  Rusty Shackleford

Maven/Junit并行执行-jvmv4.0.0

  •  1
  • Rusty Shackleford  · 技术社区  · 7 年前

    按规定 here ,如果您配置 <parallel> <threadCount>

    但是,当我运行Maven时,它仍然一次只执行一个特性。

    我已经把我完整的POM放在下面了-有人能帮忙吗?

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.softwareautomation</groupId>
    <artifactId>selenium</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    
    <name>selenium</name>
    <url>http://maven.apache.org</url>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                    <parallel>both</parallel>
                    <threadCount>4</threadCount>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
    <dependencies>
    
        <!-- AssertJ -->
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.11.1</version>
            <scope>test</scope>
        </dependency>
    
        <!-- Cucumber -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>4.0.0</version>
            <scope>test</scope>
        </dependency>
    
        <!-- JUnit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    
        <!-- Selenium WebDriver -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.11.0</version>
        </dependency>
    
    </dependencies>
    

    package com.evasoftwareautomation.runners;
    
    import org.junit.runner.RunWith;
    
    import cucumber.api.CucumberOptions;
    import cucumber.api.junit.Cucumber;
    
    @RunWith(Cucumber.class)
    @CucumberOptions(
            plugin = {"pretty", "html:target/cucumber", "junit:target/cucumber.xml"},
            features = "src/test/resources/com/softwareautomation/features",
            glue = {"com.softwareautomation.stepdefs", "com.softwareautomation.world"},
            junit ={ "--step-notifications"},
            monochrome = true)
    public class CucumberTest {
    }
    

    从Maven运行时,请参见下面的失败堆栈跟踪:

    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Concurrency config is parallel='methods', perCoreThreadCount=true, threadCount=4, useUnlimitedThreads=false
    org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: null
    java.lang.reflect.InvocationTargetException
            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.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
            at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
            at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
            at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
            at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
    Caused by: java.lang.NullPointerException
            at org.junit.runner.Description.createSuiteDescription(Description.java:124)
            at org.apache.maven.surefire.common.junit48.FilterFactory$GroupMatcherCategoryFilter.shouldRun(FilterFactory.java:207)
            at org.junit.runners.ParentRunner.shouldRun(ParentRunner.java:434)
            at org.junit.runners.ParentRunner.filter(ParentRunner.java:382)
            at org.junit.runner.manipulation.Filter.apply(Filter.java:97)
            at org.junit.runners.ParentRunner.filter(ParentRunner.java:384)
            at org.junit.runner.manipulation.Filter.apply(Filter.java:97)
            at org.junit.runners.ParentRunner.filter(ParentRunner.java:384)
            at org.junit.runner.manipulation.Filter.apply(Filter.java:97)
            at org.junit.runners.ParentRunner.filter(ParentRunner.java:384)
            at org.junit.runner.manipulation.Filter.apply(Filter.java:97)
            at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:37)
            at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
            at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:62)
            at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:139)
            ... 9 more
    
    Results :
    
    Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 6.709 s
    [INFO] Finished at: 2018-10-25T23:36:01+01:00
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project selenium: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ? -> [Help 1]
    [ERROR]
    [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
    [ERROR] Re-run Maven using the -X switch to enable full debug logging.
    [ERROR]
    [ERROR] For more information about the errors and possible solutions, please read the following articles:
    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
    
    1 回复  |  直到 7 年前
        1
  •  6
  •   M.P. Korstanje    7 年前
    at org.apache.maven.surefire.common.junit48.FilterFactory$GroupMatcherCategoryFilter.shouldRun(FilterFactory.java:207)
    

    您正在使用JUnit4.12。不过,正如上面提到的,堆栈跟踪告诉我们,surefire正在尝试为junit4.8使用集成。您的surefire版本于2012年发布,2014年发布了JUnit 4.12。您是否考虑过更新maven surefire插件?

        2
  •  0
  •   whitebrow    6 年前

    我通过显式地添加测试框架的依赖关系,成功地使其工作:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.22.2</version>
      <dependencies>
        <dependency>
          <groupId>org.apache.maven.surefire</groupId>
          <artifactId>surefire-junit47</artifactId>
          <version>2.22.2</version>
        </dependency>
      </dependencies>
      <configuration>
        <parallel>all</parallel>
        <threadCount>4</threadCount>
      </configuration>
    </plugin>
    
        3
  •  0
  •   Archit Rai Gupta    6 年前

    对我来说

    • maven没有接受JUnit5测试
    • 黄瓜测试没有并行进行

    让它工作了

    • 添加maven surefire插件2.22.2并显式添加

              <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.2</version>
              <dependencies>
                  <dependency>
                      <groupId>org.apache.maven.surefire</groupId>
                      <artifactId>surefire-junit47</artifactId>
                      <version>2.22.2</version>
                  </dependency>
              </dependencies>
              <configuration>
                  <parallel>both</parallel>
                  <threadCount>4</threadCount>
              </configuration>
          </plugin>
      
        4
  •  0
  •   daniel    6 年前

    在我的例子中,我使用了surefire2.12.4,并将其更新为2.22.2

    推荐文章