Как рассчитать продолжительность повторных тестов и рассчитать их среднее время - PullRequest
0 голосов
/ 16 октября 2019

Согласно этой теме: Collectors.mapping по сравнению с обычным Stream.map

Я решил провести собственные предварительные тестовые случаи, чтобы выяснить приблизительную разницу в производительности между Collectors.mapping и Stream.map операций. В связи с вышеизложенным, я создал два вспомогательных метода, которые будут передавать данные с уколом в мой поддельный контейнер.

  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 повторных тестов.

1 Ответ

0 голосов
/ 16 октября 2019

Если я правильно понимаю, вы пытаетесь сравнить два разных метода, которые делают одно и то же.
Сравнительный анализ может быть сложным, особенно когда речь идет о том, чтобы убедиться, что условия остаются неизменными во время тестирования.
Например, JVM может начать оптимизировать некоторые операции через некоторое время.
Лучшим инструментом для такого теста, вероятно, является JMH (https://openjdk.java.net/projects/code-tools/jmh/).

...