Невозможно настроить выполнение некоторых сценариев последовательно, а некоторых параллельно с тегами и количеством потоков в KarateDSL. - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть 2 файла функций, каждый с 2 ​​сценариями.Я хочу выполнить сценарии из: * [Первая функция], [Вторая функция] - последовательно;* [Третья особенность] - параллельно;

Я использую теги и 2 Test Runners (с threadCount = 1, threadCount = 5), но все сценарии выполняются параллельно (из-за timeline.html).

Сценарии:

@sequential
Feature: First feature
  Background:
    # some code

  @smoke
  Scenario: f1, s1
    # some code

  @regression
  Scenario: f1, s2
    # some code
@sequential @smoke
Feature: Second feature
  Background:
    # some code

  @smoke
  Scenario: f2, s1
    # some code

  @regression
  Scenario: f2, s2
    # some code
Feature: Third feature
  Background:
    # some code

  @smoke
  Scenario: f3, s1
    # some code

  @regression
  Scenario: f3, s2
    # some code

Тестовые прогоны для сценариев, которые должны выполняться последовательно:

@KarateOptions(tags = {"@regression,@smoke", "@sequential,~@ignore"})
public class TestsRunner extends TestSetBase {

    @Test
    public void AllSequentialTests() {
        Results results = Runner.parallel(getClass(), 1, PropertyValues.getReportDir());
        generateReport(PropertyValues.getReportDir());
        assertTrue(results.getFailCount() == 0, results.getErrorMessages());
    }
}

Тестовые прогоны для параллельного выполнения:

@KarateOptions(tags = {"@regression,@smoke", "~@sequential,~@ignore"})
public class TestsRunner2 extends TestSetBase {

    @Test
    public void AllSequentialTests() {
        Results results = Runner.parallel(getClass(), 5, PropertyValues.getReportDir());
        generateReport(PropertyValues.getReportDir());
        assertTrue(results.getFailCount() == 0, results.getErrorMessages());
    }
}

Я работаюtests от maven:

...
 <configuration>
      <includes>
          <include>api/TestsRunner.java</include>
          <include>api/TestsRunner2.java</include>
      </includes>
 </configuration>
...

В настоящее время, когда я выполняю тесты, timeline.html показывает:


| ForkJoinPool-2-Worker1 | ---- [f1, s1]

| ForkJoinPool-2-Worker2 | ---- [f1, s2]

| ForkJoinPool-2-Worker3 | ---- [f2, s1] --- [f3,s2]

| ForkJoinPool-2-Worker4 | ---- [f2, s2]

| ForkJoinPool-2-Worker5 | ---- [f2, s1]


Я попытался добавить @rallel = false, в таком случае s1, s2 будут выполняться последовательно, но f1, f2 все равно будут выполняться параллельно.Я использую KarateDSL v.0.9.3.

У вас есть идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Утро мудрее вечера.Я нашел ошибку.

Я предполагаю, что:

  • SequentialTestRunner {"@ regression, @ smoke", "@ sequential, ~ @ ignore"} - запустит всепоследовательные тесты;

  • ParallelTestRunner {"@ regression, @ smoke", "~ @ sequential, ~ @ ignore"} - будут запускать все другие (не помеченные как последовательные) тесты параллельно;

... но ParallelTestRunner выполняет все тесты.Поэтому, когда я вызываю обоих исполнителей из maven, результаты должны выглядеть следующим образом: все последовательные тесты + все тесты (последовательные тесты будут выполняться во второй раз).... но, как я вижу, исполнитель довольно умен и не выполняет последовательные тесты во второй раз.В результате будут показаны только результаты ParallelTestRunner.

Классическая ситуация, когда 2 или более неправильных предположения переплетаются и скрывают реальную проблему.Почему на самом деле я не нашел эту проблему раньше.

Поэтому это не проблема, это просто мои ошибочные предположения.

0 голосов
/ 27 сентября 2019

Я прочитал ваш вопрос несколько раз, но сдался.Также я должен сказать, что вы можете быть первым человеком, с которым я столкнулся, который считает проблемой то, что сценарии выполняются параллельно.

Если вы хотите, чтобы 2 сценария выполнялись вплотную - по моему мнениюэто классический случай неправильной разработки теста, когда у вас есть тест в зависимости от другого.Правильнее всего объединить оба в один Scenario.Вы также можете попробовать опцию (не рекомендуется) создания нового Scenario и последовательного вызова этих 2 Scenario.Пожалуйста, отошлите это: https://github.com/intuit/karate#call-tag-selector

Если вы все еще чувствуете, что что-то не работает так, как вы ожидаете, пожалуйста, следуйте этому процессу, нам будет гораздо легче понять, чем читать ваш пример: https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

...