Здравствуйте, столкнулся с такой штукой: при запуске набора (testSuite) из интерфейса программы, иногда начали отваливаться тесты. Раньше работающие корректно. Причем из командной строки эти тесты все отработали. И ранее они часто отрабатывали нормально. Каждый в отдельности работает. Но после того как GUI завис, то все assert’ы указывают на null и надо процесс убивать через диспетчер и запускать приложение заново.
Не пробовал менять еще, но думаю в чем еще может быть проблема. Может где-то открыто и не закрыто много коннектов, не удаляются объекты и т.д.? Они вообще как очищаются? Как можно это дело профилировать и грамотно контролировать? Хочу оптимизировать тесты, пока их число не разрослось и потом уже писать более “аккуратно”. Вообще какие “требования” к железу у SoapUI? У меня не самая мощная машинка и Windows 7 32-бит. Стоит ли просить апгрейд на х64 и наращивание памяти для работы с SoapUI? Судя по Диспетчеру Задач SoapUI отжирает чуть более 1 Gb памяти, всего ее не более 3 (в тачке вроде бы 4, но система не адресует более 3х Gb).
Контролировать использование памяти джава-машиной (JVM) можно с помощью jconsole или VisualVM, входящих в состав JDK (насколько помню, в составе JRE их нет).
По использованию памяти в SoapUI не подскажу, лучше читать их рекомендации, но увеличение размеров памяти для JVM и изменение конфигурации “поколений” хранимых в памяти объектов (в т.ч. PermGen) не является чем-то из ряда вон выходящим. Главное знать что делаешь
В частности нехватка PermGen, если я правильно помню, означает, что слишком много объектов необходимо хранить постоянно, то есть GC не чистит их по причине их востребованности. Рассуждая логически, можно предположить, например, такие причины:
либо слишком много тестов запускается параллельно
либо при последовательном запуске SoapUI не корректно освобождает память, выделенную под уже отработавшие тесты. Возможно, он открывает под каждый тест новое окно
либо последующие тесты используют результаты предыдущих
В общем, это предмет для исследования, гадать можно долго.
При запуске из консоли проблема не проявляется вероятно потому, что не расходуется память по GUI
Предназначение PermGen я всё-таки помню неправильно В нём хранятся определения используемых в приложении классов. Соответственно, он забивается тем больше, чем больше различных библиотек используется, чем больше разных классов используется и т.д.
В любом случае, если есть необходимость в оптимизации, надо со всем этим начинать разбираться
Тесты по идее не связаны. Каждый берет свои данные и хранит внутри себя (есть только общие параметры для всего проекта: имена очередей, параметры подключения к БД и т.п.). Тесты относительно простые: формирование XML (данные из БД), отправка в MQ очередь, получение ответа из другой очереди, парсинг ответа и сравнение с ожидаемыми данными (в assert’ах для различных полей) + запросы в базу (тоже в Assertions’e).
Все коннекты к Бд закрываю: sql.close();
Думаю, что просто при запуске TestSuite SoapUI по какой-то причине хранит все в памяти и не очищает временные значения при запуске следующего TestCase.
Есть идеи как освобождать ресурсы вручную? Или как убедиться, что они при запуске из GUI всего набора не освобождаются и какие именно остаются в памяти после отработки TestCase’а?
Нет, я Allure не использую. Слышал про него. Но прикручивать к SoapUI не пробовал. Есть в этом какой-то плюс? Что дает использование Allure? Я пока просто в log.info вывожу информацию, а потом он складывается в Jazz через адаптер. Для отчета достаточно Passed для пройденных тестов. Для разбора проблем - текстового лога. Есть идея, что из-за излишнего логгирования тоже может быть проблема. По первости много всего пихал туда и еще не почистил те тесты от мусора.
В ссылке приведенной мной выше, есть описание во 2-м пункте и очень похоже на то, что это как-то связано с моей проблемой.
Необходимо поставить в .vmoptions файле SoapUI использовать больше памяти.
Я с таким сталкивался, когда было слишком много тестов (>1000) в одном SoapUI проекте.
Почитайте здесь: