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

使用并行计算机运行Junit测试时的控制台输出

穆商震
2023-03-14

我想并行运行Junit测试。我遇到了以下问题

这些测试是由其他团队开发的,大约有2500个测试套件。测试和测试框架到处都有静态变量。它们的编写使得它们在一次运行一个套件时可以正常工作。当我构建一组这些测试套件并运行它们时,它们甚至没有完成运行。

为了解决这个问题,我有自己的测试运行程序,它通过不同的类加载器(一次一组测试)加载测试套件。我在多个线程中这样做,并从每个线程调用JunitCore的run方法。这个很好用。这种方法的问题在于控制台输出是混合的。

我正在寻找这个问题的解决方案,这样我就可以分离测试套件的控制台输出,并将它们重定向到一个文件中。

以下是我正在考虑的一个潜在解决方案。我可以用不同的类加载器加载这些类,并将这些类的“类”对象数组传递到带有ParallelComputer实例的JunitCore运行类中。

有人尝试过使用ParallelComputer运行测试套件吗?控制台输出是如何处理的?

共有1个答案

许高峻
2023-03-14

我看到,当你尝试使用并行计算机运行JUnit测试时,std输出完全混淆了。我本以为会这样,但我尝试了一个小程序。

我的程序在下面

import org.junit.runner.*;
import org.junit.*;
import org.junit.experimental.*;

public class ParallelComputerTest {  

public static void main(String[] args) {      
Class[] cls={ParallelTest1.class,ParallelTest2.class };  

//Parallel among classes  
JUnitCore.runClasses(ParallelComputer.classes(), cls);      
}  

public static class ParallelTest1{  
@Test public void a1(){
    int count = 0;
    while(count < 5) {
    System.out.println("a1");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }

}  
@Test public void b1(){
    int count = 0;
    while(count < 5) {
    System.out.println("b1");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }
}  
}  
public static class ParallelTest2{  
@Test public void a(){
    int count = 0;
    while(count < 5) {
    System.out.println("a2");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }
}  
@Test public void b(){
    int count = 0;
    while(count < 5) {
    System.out.println("b2");
    count++;
    try {
        Thread.sleep(2000);
    } catch(Exception e) {
    }
    }
}  
}  
} 

输出是这样的

a2
a1
a2
a1
a2
a1
a1
a2
a1
a2
b1
b2
b1
b2
b1
b2
b1
b2
b1
b2

我正在寻找一种方法来解复用stdout。

 类似资料:
  • 问题内容: 我只有一种方法。如何检查System.out.println()并将Scanner替换为使用JUnit自动输入值? PS,请提供一些解决方案… 问题答案: 理想情况下,提取尴尬的依赖关系,以便您可以在没有依赖关系的情况下进行测试。更改为简单: (考虑使用a 代替for 。) 然后,您实际上不需要进行单元测试-但您可以使用基于的进行测试,并基于的输出进行测试,从而提供所需的任何输入并检查

  • 我有一个名为< code > smoke-tests-fat-1 . 0 . 0-snapshot . JAR 的fat JAR,包含JUnit 5测试。测试在方法级别用< code > org . JUnit . Jupiter . API . test 进行注释。 现在我想用JUnit5控制台启动器执行这些测试。然而,我似乎没能把它弄对。 我试过: <code>java-jar junit平台

  • 我们用Rest Assured和JUnit 5编写了API测试,并试图并行运行测试,因为测试之间没有依赖关系。我们已经尝试了JUnit 5的实验性并行执行,方法是设置: …但我们已经看到,通常当测试失败时,测试报告中不包含它们的输出。 这是已知问题吗?有什么变通方法吗?

  • 使用Browserstack教程(https://www.browserstack.com/app-automate/appium-junit)和样本项目(https://github.com/browserstack/junit-appium-app-browserstack)我正在努力设置并行测试。 具体来说,我需要运行suirte与Cucumber.class()我的测试从场景中读取,而Br

  • 我试图用maven和tesng运行一个API测试,在执行过程中,一些错误出现在consol上,我使用intellij,java 8,testng和maven任何想法如何解决这个问题 错误: 测试:这是我使用testng执行的一个示例测试 POM:这是我的POM xml文件和所有使用的依赖项的示例

  • 我正在为java应用程序编写junit测试用例这里是junit测试代码 在eclipse中运行这段代码后,我会收到以下错误 下面是我的主要java代码 有人能帮忙解决这个错误吗?在这里,我不能单独运行两个测试函数,它们运行得很好,如何一起运行它们