Установите время задержки для каждого <test> в TestNG

Dec 14 2020

Сначала в качестве информации : я помещаю каждый @Testв другой класс (поэтому, конечно, каждый класс имеет только одну @Testаннотацию).

На самом деле моя цель - перезапустить тот же класс с другим параметром, но я хочу сначала запустить другой класс.

Я пытался найти много ссылок на то, что TestNG не позволяет повторять @Testаннотацию класса или метода в одном <test>. Предоставленный повтор - это invocationCountфункция, о которой я догадываюсь invocationCount, но я не могу достичь своей цели, invocationCountпотому что эта функция повторяет @Testв одно и то же время, а затем я могу запустить другую @Test.

public class SimpleTest1 {
    @Test
    @Parameters({"acc"})
    public void historyTransfer(String acc) {
        System.out.println(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(Calendar.getInstance().getTime()));
    }
}
public class SimpleTest2 {
    @Test
    @Parameters({"senderAcc", "beneficiaryAcc", "amount"})
    public void tranfer(String senderAcc, String beneficiaryAcc, String amount) {
        System.out.println(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(Calendar.getInstance().getTime()));
    }
}

Я представляю, как работать, как показано ниже:

<suite name="Suite">
    <test name="My Test" >
        <classes>
            <class name="com.SimpleTest1">
                <parameter name="acc" value="11111"></parameter>
            </class>
            <class name="com.SimpleTest2">
                <parameter name="senderAcc" value="11111"></parameter>
                <parameter name="beneficiaryAcc" value="22222"></parameter>
                <parameter name="amount" value="100"></parameter>
            </class>
            <class name="com.SimpleTest1">
                <parameter name="acc" value="22222"></parameter>
            </class>
        </classes>
    </test>
</suite>

Но приведенная выше конфигурация пошла не так, как планировалось, потому что вторая SimpleTest1не была выполнена.

Затем я попытался запустить его отдельно, <test>как показано ниже и успешно, но у меня возникла новая проблема с временем задержки для каждого <test>.

Выполните несколько <test>серий последовательно (не параллельно) следующим образом:

<suite name="Suite">
    <test name="My Test1" >
        <classes>
            <class name="com.SimpleTest1">
                <parameter name="acc" value="11111"></parameter>
            </class>
        </classes>
    </test>
    <test name="My Test2" >
        <classes>
            <class name="com.SimpleTest2">
                <parameter name="senderAcc" value="11111"></parameter>
                <parameter name="beneficiaryAcc" value="22222"></parameter>
                <parameter name="amount" value="100"></parameter>
            </class>
        </classes>
    </test>
    <test name="My Test3" >
        <classes>
            <class name="com.SimpleTest1">
                <parameter name="acc" value="22222"></parameter>
            </class>
        </classes>
    </test>
</suite>

Зависимость TestNG Maven:

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.0.0</version>
    <scope>compile</scope>
</dependency>

Верный огонь:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
        <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
        </suiteXmlFiles>
      </configuration>
</plugin>

IDE: Eclipse (Версия: 2018-09 (4.9.0))

ОС: macOS Mojave (версия 10.14.6)

Выход :

[RemoteTestNG] detected TestNG version 7.0.0
22-12-2020 21:59:32
22-12-2020 21:59:47
22-12-2020 21:59:57

===============================================
Suite
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================

Но после того, как первый <test>завершен, есть задержка примерно на 10 секунд перед следующими <test>запусками, а также следующим тестом.

Примечание . Я думал, что это проблема IDE (я использую Eclipse), но это не так. Я пробовал запустить его двумя способами, через IDE и командную строку, и дал мне тот же результат по этой проблеме с задержкой.

Через командную строку с помощью этой команды:

mvn clean test -Dsurefire.suiteXmlFiles=testng.xml

Есть ли какая-либо конфигурация для уменьшения времени задержки, указанного выше?

Ответы

2 juherr Dec 23 2020 at 19:36

Во-первых, набор - это не план тестирования (может быть, кстати, хороший запрос функции), а всего лишь способ выбора тестов. Это означает, что вы не можете определить зависимость между тестами. Вот почему наличие одного и того же тестового класса не работает (он должен давать сбой или создавать разные экземпляры).

Насколько я понимаю ваши потребности, лучший способ - разделить собственную логику и ее интеграцию с тестовой платформой:

  1. спроектируйте свои классы помощника / приспособления, как хотите:

_

public class SimpleClass1 {
  public void historyTransfer(String acc) {
    System.out.println(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(Calendar.getInstance().getTime()));
  }
}

public class SimpleClass2 {
  public void tranfer(String senderAcc, String beneficiaryAcc, String amount) {
    System.out.println(new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(Calendar.getInstance().getTime()));
  }
}
  1. определить классы для интеграции с тестовой платформой

_

public class SimpleTest {
  @Test
  @Parameters({"acc"})
  public void step1(String acc) {
    (new SimpleClass1()).historyTransfer(acc);
  }

  @Test(dependsOnMethods = {"step1"})
  @Parameters({"senderAcc", "beneficiaryAcc", "amount"})
  public void step2(String senderAcc, String beneficiaryAcc, String amount) {
    (new SimpleClass2()).transfer(acc);
  }

  @Test(dependsOnMethods = {"step2"})
  @Parameters({"acc"})
  public void step3(String acc) {
    (new SimpleClass1()).historyTransfer(acc);
  }
}

И набор с ожидаемыми параметрами:

<suite name="Suite">
  <test name="My Test" >
    <classes>
        <class name="com.SimpleTest">
            <methods>
              <include name="step1">
              <parameter name="acc" value="11111"></parameter>
            </methods>
            <methods>
              <include name="step2">
              <parameter name="senderAcc" value="11111"></parameter>
              <parameter name="beneficiaryAcc" value="22222"></parameter>
              <parameter name="amount" value="100"></parameter>
            </methods>
            <methods>
              <include name="step3">
              <parameter name="acc" value="22222"></parameter>
            </methods>
        </class>
    </classes>
  </test>
</suite>

(отказ от ответственности: я не проверял XML на соответствие dtd, мог ошибаться, но у вас есть идея)

Название или способ создания светильников зависит от ваших собственных соглашений.

1 vbn Dec 16 2020 at 15:36

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

https://testng.org/doc/documentation-main.html#annotations

проверьте @ Test.priority или @ Test.dependsOnMethods

Это позволит вам последовательно запускать тесты один за другим.

1 user7294900 Dec 22 2020 at 16:22

Я не знаю, почему вам нужно запускать один и тот же тестовый класс в отдельных тестах, но при запуске теста он может загрузить весь соответствующий контекст, который может занять время, и, возможно, после завершения теста может потребоваться закрыть некоторые ресурсы, и то, и другое может занять время / несколько секунды

Вы можете использовать подробный отчет, чтобы узнать больше о причине задержки (и добавить больше журналов для просмотра времени)

<suite name="Suite" verbose="10">

Уровень детализации от 0 до 10, где 10 является наиболее подробным. Как только вы установите его на 10, вы увидите, что вывод консоли будет содержать информацию о тестах, методах, слушателях и т. Д.

Чтобы ускорить процесс, вы также можете использовать параллельную функцию TestNG.

Атрибут threadPoolSize позволяет указать, сколько потоков следует выделить для этого выполнения.