Я запускаю сотни тестов для крупной издательской системы и хотел бы распараллелить тесты с помощью TestNG. Однако я не могу найти простой способ сделать это. Каждый тестовый пример создает экземпляр этого публикатора, отправляет несколько сообщений, ждет публикации этих сообщений, затем выгружает содержимое очередей публикации и сравнивает с ожидаемым результатом. Выполнение этого с таким количеством тестов (даже если я парализую использование потоков, все равно занимает очень много времени (1 день или более)).
Мы обнаружили, что при тестировании системы такого типа лучше всего запустить систему один раз, запустить все тесты для отправки сообщений, дождаться, пока публикация сделает свое дело, выгрузить все выходные данные и сопоставить выходные данные с тестами и проверить. Например, вместо следующего:
@Test
public void testRule1() {
Publisher pub = new Publisher();
pub.sendRule(new Rule("test1-a"));
sleep(10); // wait 10 seconds
pub.dumpRules();
verifyRule("test1-a");
}
Мы хотели сделать что-то вроде следующего:
@Test
public void testRule1(bool sendMode) {
if(sendMode) {
this.pub.sendRule(new Rule("test1-a"));
}
else {
verifyRule("test1-a");
}
}
Где у вас есть поставщик данных, который выполняет все тесты с помощью sendMode = true
, а затем выполняет dumpAllRules()
, после чего снова выполняет все тесты с помощью sendMode = false
. Проблема в том, что TestNG вызывает один и тот же метод дважды, один раз с sendMode = true
, а затем с sendMode = false
. Есть ли способ сделать это в TestNG?
Спасибо!