java - 如何处理重复测试的持续时间并计算它们的平均时间
问题描述
根据这个主题:Collectors.mapping 与传统 Stream.map
我决定进行自己的临时测试用例,以找出操作之间的大致性能Collectors.mapping
差异Stream.map
。结合上述内容,我创建了两个辅助方法,它们将为我的假容器提供 stab 数据。
private List<Employee> dataStab() {
List<Employee> employees = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
Employee employee = randomizeEmployeeParam();
employees.add(employee);
}
return employees;
}
private Employee randomizeEmployeeParam() {
return
new
Employee(
"Employee" + rand.nextInt(3000),
rand.nextInt(50),
1000 + (10000 - 1000) * rand.nextDouble());
}
我创建了两个相应地进行的测试Collectors.mapping
和Stream.map
操作。
@RepeatedTest(10)
void collectorsMapping() {
Instant start = Instant.now();
List<String> strings = employeeService.collectorsMapping(dataStab());
Instant finish = Instant.now();
long timeElapsed = Duration.between(start, finish).toMillis();
System.out.println(timeElapsed);
assertEquals(10000000, strings.size());
}
@RepeatedTest(10)
void streamMapAndCollect() {
Instant start = Instant.now();
List<String> mapAndCollect = employeeService.streamMapAndCollect(dataStab());
Instant finish = Instant.now();
long timeElapsed = Duration.between(start, finish).toMillis();
System.out.println(timeElapsed);
assertEquals(10000000, mapAndCollect.size());
}
到目前为止测试工作,但现在我想根据 IntelliJ 运行窗口中的结果手动计算这些测试的平均时间。此外,从长远来看,如果我会增加@RepeatedTest
参数来计算最接近的结果,这将有点乏味。我想知道是否可以处理持续时间参数timeElapsed
并计算 n 次重复测试的平均值。
解决方案
如果我理解正确,您正在尝试对执行相同操作的两种不同方法进行基准测试。
执行基准测试可能很棘手,尤其是在确保测试期间条件保持不变时。
例如,JVM 可能会在一段时间后开始优化某些操作。
进行此类测试的最佳工具可能是 JMH ( https://openjdk.java.net/projects/code-tools/jmh/ )。
推荐阅读
- swagger - Swashbuckle - 将 DisplayName 添加到模型属性
- php - 从多个不同的数组创建多维数组
- javascript - 如何改变地图上某些街道的颜色
- asp.net-core - 为什么我可以在本地 Windows 帐户上访问授权用户,而不是在我登录域时访问?
- javascript - 角度上的八位字节流 - 文件下载不起作用
- php - 用php测试单元
- chisel - 为什么要使用多种 HCL 语言
- excel - 如何根据其他列的值对表的列进行排序?
- excel - 从第 3 列第二个单元格开始
- android - 将图像插入条目或编辑器 [Xamarin.Forms]