Чем тестировать утечки памяти в Delphi-приложениях?
#1
Отправлено 24 июля 2012 - 07:34
Сначала опишу ситуацию:
Мы используем TestComplete для тестирования Delphi-приложений. В принципе, мы уже периодически сталкивались с тем, что во время длительных тестов память, занимаемая приложением, начинает бесконтрольно расти. Причем вручную этого поймать не удается.
В результате, мы пишем скрипты для автоматизированного тестирования приложений на утечки памяти. Результаты получаются весьма показательные, но разработчики не понимают, в чем дело.
Только что наткнулся на такой вот топик в поддержке.
Цитаты: "TestComplete активирует некоторые штуки в отладочной информации внутри приложения чтобы получить возможность выполнять тесты. Эта информация остается в памяти, так что если TestComplete хочет получить доступ к этому делу заново, всё уже готово", "TestComplete, если честно, не лучший инструмент для тестирования утечек памяти. Используйте для этого AQTime Standard".
Получается, что приложение оказывается не в состоянии корректно освободить свои ресурсы.
Но люди! AQTime - это профилировщик, и он не позволяет выполнять скрипты.
У кого-нибудь есть опыт по тестированию утечек памяти с помощью автоматизированных сценариев? Какие-нибудь инструменты могут дать адекватные результаты, или у всех эта же проблема?
#2
Отправлено 24 июля 2012 - 10:32
(Кладу этот топик не в ветку SmartBear, а в общую, т.к. вопрос по инструментам тестирования вообще)
Сначала опишу ситуацию:
Мы используем TestComplete для тестирования Delphi-приложений. В принципе, мы уже периодически сталкивались с тем, что во время длительных тестов память, занимаемая приложением, начинает бесконтрольно расти. Причем вручную этого поймать не удается.
В результате, мы пишем скрипты для автоматизированного тестирования приложений на утечки памяти. Результаты получаются весьма показательные, но разработчики не понимают, в чем дело.
Только что наткнулся на такой вот топик в поддержке.
Цитаты: "TestComplete активирует некоторые штуки в отладочной информации внутри приложения чтобы получить возможность выполнять тесты. Эта информация остается в памяти, так что если TestComplete хочет получить доступ к этому делу заново, всё уже готово", "TestComplete, если честно, не лучший инструмент для тестирования утечек памяти. Используйте для этого AQTime Standard".
Получается, что приложение оказывается не в состоянии корректно освободить свои ресурсы.
Но люди! AQTime - это профилировщик, и он не позволяет выполнять скрипты.
У кого-нибудь есть опыт по тестированию утечек памяти с помощью автоматизированных сценариев? Какие-нибудь инструменты могут дать адекватные результаты, или у всех эта же проблема?
Скажу вам честно, это по видимому тесткомплит кривая штука.
Он лезет внуть приложения, а потом не освобождает ресурсы.
Попробуйте используйте свое приложения вручную или напишите тесты на другом инструменте
Если при длительном тесте на другом инструменте с памятью ничего не случится, то виноват тесткомплит.
#3
Отправлено 24 июля 2012 - 13:52
Кто-то из разработчиков даже рассказывал, что даже делали специальную убивалку для TC для продолжительных тестов. И потом перезапускали его.
#4
Отправлено 02 августа 2012 - 06:01
TestComplete не может не лезть внутрь памяти тестируемого приложения, так как это фактически единственный способ реализовать настолько полное распознавание объектов внутри приложения. С точки зрения профилирования памяти "на глазок", это действительно может представлять проблему, так как не всегда понятно кто потребляет память: приложение или TestComplete.
Как в данной ситуации может помочь AQtime?
1. Если есть утечка памяти, то, скорее всего, она существует всё время работы программы. Тот факт, что становится она заметной только при длительной работе, говорит о том что утечка небольшая, но постоянная. Для AQtime'а самого факта наличия утечки уже достаточно, чтобы её обнаружить. Ему не требуется, чтобы её размер составлял многие мегабайты. Надо просто руками под AQtime'ом прогнать цикл теста один раз и проанализировать результаты.
2. AQtime достаточно гибкий инструмент и он позволяет настроить профилирование так, чтобы из результатов были исключены вся работа с памятью, производимая модулями TestComplete'а. Или наоборот, чтобы профилировалась только работа модулей тестируемого приложения. Учитывая, что в TestComplete существует тесная интеграция с AQtime'ом, вы можете гонять свои долгие тесты в TestComplete'е, профилируя при этом тестируемое приложение AQtime'ом.
Дмитрий
#5
Отправлено 02 августа 2012 - 07:20
PufiryPlus
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных