并行运行器跳过测试中的循环迭代
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_59
如 11 匹配 每个 运行 乘以 5 运行s 等于55。
您将看到 所有单个数字迭代次数 的这种效果,并且您对 ITERATION_9
的搜索证实了这一点。
尝试文本搜索 ITERATION_
项找到 500 个匹配项或搜索项 'ITERATION_5 '
(白色 space 在 5 之后)应该会给你 5 个匹配项。
我有以下测试:
@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_59
如 11 匹配 每个 运行 乘以 5 运行s 等于55。
您将看到 所有单个数字迭代次数 的这种效果,并且您对 ITERATION_9
的搜索证实了这一点。
尝试文本搜索 ITERATION_
项找到 500 个匹配项或搜索项 'ITERATION_5 '
(白色 space 在 5 之后)应该会给你 5 个匹配项。