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

Maven Surefire parallel='both'的工作方式与'methods'相同

南宫建白
2023-03-14
public class FirstTest {

  @Test
  public void test() throws InterruptedException {
    System.out.println(this.getClass() + " " + new Date());
    Thread.sleep(10_000);
  }

  @Test
  public void test2() throws InterruptedException {
    System.out.println(this.getClass() + " " + new Date());
    Thread.sleep(10_000);
  }

  @Test
  public void test3() throws InterruptedException {
    System.out.println(this.getClass() + " " + new Date());
    Thread.sleep(10_000);
  }

  @Test
  public void test4() throws InterruptedException {
    System.out.println(this.getClass() + " " + new Date());
    Thread.sleep(15_000);
  }

}

SecondTest类是相同的(10s+10s+10s+15s=45s),而ThirdTest包含10s+10s+10s测试方法。

我使用的Maven Surefire插件配置如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
      <excludes>
        <exclude>${excludeTestPath}</exclude>
      </excludes>
      <parallel>both</parallel>
      <threadCount>20</threadCount>
    </configuration>
</plugin>

我在理解并行属性是如何工作的方面有问题。我尝试设置“both”、“methods”和“classes”值,但得到了一些令人困惑的输出。请看一看,给我解释一下:

Concurrency config is parallel='classes', perCoreThreadCount=true, 
threadCount=20, useUnlimitedThreads=false
Running experiment.ThirdTest
class experiment.ThirdTest Mon Jun 10 12:00:38 CEST 2013
class experiment.ThirdTest Mon Jun 10 12:00:48 CEST 2013
class experiment.ThirdTest Mon Jun 10 12:00:58 CEST 2013
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 30.024 sec
Running experiment.SecondTest
class experiment.SecondTest Mon Jun 10 12:00:38 CEST 2013
class experiment.SecondTest Mon Jun 10 12:00:48 CEST 2013
class experiment.SecondTest Mon Jun 10 12:00:58 CEST 2013
class experiment.SecondTest Mon Jun 10 12:01:08 CEST 2013
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.054 sec
Running experiment.FirstTest
class experiment.FirstTest Mon Jun 10 12:00:38 CEST 2013
class experiment.FirstTest Mon Jun 10 12:00:48 CEST 2013
class experiment.FirstTest Mon Jun 10 12:00:58 CEST 2013
class experiment.FirstTest Mon Jun 10 12:01:08 CEST 2013
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.074 sec

Results :
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0

[INFO] Total time: 52.319s
[INFO] Finished at: Mon Jun 10 12:01:48 CEST 2013
[INFO] Final Memory: 22M/354M
Concurrency config is parallel='methods', perCoreThreadCount=true,
threadCount=20, useUnlimitedThreads=false
Running experiment.FirstTest
class experiment.FirstTest Mon Jun 10 12:10:23 CEST 2013
class experiment.FirstTest Mon Jun 10 12:10:23 CEST 2013
class experiment.FirstTest Mon Jun 10 12:10:23 CEST 2013
class experiment.FirstTest Mon Jun 10 12:10:23 CEST 2013
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.142 sec
Running experiment.SecondTest
class experiment.SecondTest Mon Jun 10 12:10:38 CEST 2013
class experiment.SecondTest Mon Jun 10 12:10:38 CEST 2013
class experiment.SecondTest Mon Jun 10 12:10:38 CEST 2013
class experiment.SecondTest Mon Jun 10 12:10:38 CEST 2013
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.037 sec
Running experiment.ThirdTest
class experiment.ThirdTest Mon Jun 10 12:10:53 CEST 2013
class experiment.ThirdTest Mon Jun 10 12:10:53 CEST 2013
class experiment.ThirdTest Mon Jun 10 12:10:53 CEST 2013
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 30.009 sec

Results :
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0

[INFO] Total time: 47.405s
[INFO] Finished at: Mon Jun 10 12:11:04 CEST 2013
[INFO] Final Memory: 22M/354M
Concurrency config is parallel='both', perCoreThreadCount=true, 
threadCount=20, useUnlimitedThreads=false
Running experiment.FirstTest
class experiment.FirstTest Mon Jun 10 12:18:40 CEST 2013
class experiment.FirstTest Mon Jun 10 12:18:40 CEST 2013
class experiment.FirstTest Mon Jun 10 12:18:40 CEST 2013
class experiment.FirstTest Mon Jun 10 12:18:40 CEST 2013
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.18 sec
Running experiment.SecondTest
class experiment.SecondTest Mon Jun 10 12:18:55 CEST 2013
class experiment.SecondTest Mon Jun 10 12:18:55 CEST 2013
class experiment.SecondTest Mon Jun 10 12:18:55 CEST 2013
class experiment.SecondTest Mon Jun 10 12:18:55 CEST 2013
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 45.031 sec
Running experiment.ThirdTest
class experiment.ThirdTest Mon Jun 10 12:19:10 CEST 2013
class experiment.ThirdTest Mon Jun 10 12:19:10 CEST 2013
class experiment.ThirdTest Mon Jun 10 12:19:10 CEST 2013
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 30.025 sec

Results :
Tests run: 11, Failures: 0, Errors: 0, Skipped: 0

[INFO] Total time: 47.521s
[INFO] Finished at: Mon Jun 10 12:19:20 CEST 2013
[INFO] Final Memory: 22M/354M

共有1个答案

祝叶五
2023-03-14

参见SUREFIRE-814(2012年1月)的这条评论:

“两者”在很长一段时间内基本上没有经过测试,我没有理由不相信你看到了这个问题。

可以肯定的是,在此期间,两者都没有受到太多的关注。我证实了这个问题影响到Surefire 2.15,我计划就此发表评论并对该票进行投票(一旦我得到我的注册确认)。我建议更多的人投票。

 类似资料:
  • 问题内容: 在C#中,您可以使用属性使数据字段可公开访问(允许用户直接访问它),但仍保留对那些直接访问的字段执行数据验证的功能。Java是否有类似的东西?对于实例,假设存在一个具有以下实现的C#类(请参见下文): 在该类中的此定义允许用户在从数据字段“ x”中检索值并为其分配值时“自然”使用数据字段“ x”。以下是它在main中的用法。 问题是… java也可以做到这一点吗?如果是这样,它叫什么?

  • 问题:编写一个获取两列的查询。第一栏必须包含高于8万美元的年薪。第二列重命名为“emps_with_same_salary”,必须显示与该薪酬签约的员工人数。最后,按第一列对输出进行排序。需要SSMS中的输出。 索尔: 请注意,下面的解决方案在MySql Workbench中给出了输出,但在SSMS中没有给出。 '80007'、'11' '80056'、'5'

  • SVN是基于客户/服务器模式: 复制-修改-合并方案(Subversion默认的模式): 在这种模型里,每一个客户读取项目配置库建立一个私有工作副本——版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。 锁定-修改-解锁方案 在这样的模型里,在一个时间段里配置库的一个文件只允许被

  • 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢? 对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request(请

  • 问题内容: 我不明白prepareEditor的工作方式,我无法通过prepareEditor中的Action为prepareRenderer设置可见性规则,因为我在所附的Image中捕获了该信息 1.st行的规则符合我的预期,如果未选择JCheckBox(其他JTable选择也同样突出),则其他TableCell将不可见,但是如果我在1.st TableColumn中选择了JCheckBox,则

  • 我们有一个保存多条记录(下面是DDL和DML)的通用表: 以下是记录: Oracle Database 11g Enterprise Edition版本11.2.0.4.0-生产 PL/SQL版本11.2.0.4.0-生产“Core 11.2.0.4.0生产” 12C: