并行运行器跳过测试中的循环迭代

Parallel runner skips loop iterations inside test

我有以下测试:

@RunWith(Parameterized.class)
@SpringBootTest
@ContextConfiguration(classes = MyConfiguration.class)
public class OrderPlacementCancelTest {
    public static final int REQUESTS_PER_USER = 100;
    @Parameterized.Parameter(0)
    public String apiKey;
    @Parameterized.Parameter(1)
    public String secretKey;
    @Parameterized.Parameter(2)
    public String passPhrase;
    @Parameterized.Parameter(3)
    public String destination;
    @Parameterized.Parameter(4)
    public int index;
    @Test
    public void placeLimitAndThenCancel() throws InterruptedException, FieldNotFound, SessionNotFound, DoNotSend, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType {
        for (int i = 0; i < REQUESTS_PER_USER; i++) {
            System.out.println("ITERATION_" + i);                
        }
    }

   @Parameterized.Parameters()
   public static Collection<Object[]> data() {
       return Arrays.asList(new Object[][]{
            {"1", "1", "1", "1", 1},
            {"1", "1", "1", "1", 1},
            {"1", "1", "1", "1", 1},
            {"1", "1", "1", "1", 1},
            {"1", "1", "1", "1", 1},
        });
   }
}

我有以下跑步者:

public class ParallelRunner {
    @Test
    public void test() {
        Class[] cls = {OrderPlacementCancelTest.class};
        JUnitCore.runClasses(new ParallelComputer(false, true), cls);
    }
}

我启动我的跑步者,并在测试完成后查看日志。

我无法解释结果:

我明白了

ITERATION_0 - 5 场比赛 ...
ITERATION_5 - 55 场比赛
...
ITERATION_9 - 55 场比赛
...
ITERATION_10 - 5 场比赛
...
ITERATION_50 - 5 场比赛
...
ITERATION_70 - 5 场比赛
...
ITERATION_98 - 5 场比赛
ITERATION_99 - 5 场比赛

每次迭代的预期结果 100 个匹配项。

能否请您解释一下这种行为以及解决方法?

一切正常

你的结果是正确的(我认为)。

由于您有 ParallelComputer 运行 个并行方法,并且您的测试是 parametrised,因此生成的测试方法的数量是元素的数量数组的第一维。在您的例子中,这个数字是 5,这就是您所看到的。

你找到 ITERATION_5 55 次是因为这个词匹配
ITERATION_5, ITERATION_50, ITERATION_51, ... ,ITERATION_5911 匹配 每个 运行 乘以 5 运行s 等于55

您将看到 所有单个数字迭代次数 的这种效果,并且您对 ITERATION_9 的搜索证实了这一点。

尝试文本搜索 ITERATION_ 项找到 500 个匹配项或搜索项 'ITERATION_5 '(白色 space 在 5 之后)应该会给你 5 个匹配项。