Установите время задержки для каждого <test> в TestNG
Сначала в качестве информации : я помещаю каждый @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
Есть ли какая-либо конфигурация для уменьшения времени задержки, указанного выше?
Ответы
Во-первых, набор - это не план тестирования (может быть, кстати, хороший запрос функции), а всего лишь способ выбора тестов. Это означает, что вы не можете определить зависимость между тестами. Вот почему наличие одного и того же тестового класса не работает (он должен давать сбой или создавать разные экземпляры).
Насколько я понимаю ваши потребности, лучший способ - разделить собственную логику и ее интеграцию с тестовой платформой:
- спроектируйте свои классы помощника / приспособления, как хотите:
_
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()));
}
}
- определить классы для интеграции с тестовой платформой
_
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, мог ошибаться, но у вас есть идея)
Название или способ создания светильников зависит от ваших собственных соглашений.
Вы можете установить приоритет или зависимость от другого метода, используя аннотации, как описано здесь:
https://testng.org/doc/documentation-main.html#annotations
проверьте @ Test.priority или @ Test.dependsOnMethods
Это позволит вам последовательно запускать тесты один за другим.
Я не знаю, почему вам нужно запускать один и тот же тестовый класс в отдельных тестах, но при запуске теста он может загрузить весь соответствующий контекст, который может занять время, и, возможно, после завершения теста может потребоваться закрыть некоторые ресурсы, и то, и другое может занять время / несколько секунды
Вы можете использовать подробный отчет, чтобы узнать больше о причине задержки (и добавить больше журналов для просмотра времени)
<suite name="Suite" verbose="10">
Уровень детализации от 0 до 10, где 10 является наиболее подробным. Как только вы установите его на 10, вы увидите, что вывод консоли будет содержать информацию о тестах, методах, слушателях и т. Д.
Чтобы ускорить процесс, вы также можете использовать параллельную функцию TestNG.
Атрибут threadPoolSize позволяет указать, сколько потоков следует выделить для этого выполнения.