Как очистить данные дампа (AndroidViewClient/Culebra) из памяти?
Я запускаю сценарий автоматического тестирования с использованием AndroidViewClient. Я делаю несколько дампов в скрипте. Скрипт используется для теста скорости / времени отклика на устройстве Android, и тест выполняется для n>300. Я получаю следующую ошибку при запуске #150.
повысить ValueError("полученный не содержит действительный XML: " + receiveXml) ValueError: полученный не содержит действительный XML: убит
После некоторого копания и мониторинга памяти с помощью "memory_profiler", данные дампа, похоже, складываются в памяти и замедляют тест и влияют на результаты теста.
1- Почему я получаю ошибку? 2- Где именно хранятся данные дампа? 2- Как очистить память каждый раз, когда я сбрасываю?
1 ответ
То, что вы описываете, похоже на проблему с uiautomator dump
(вероятно, ваша реализация устройства), который AndroidViewClient использует в качестве бэкенда по умолчанию для API >= 19.
Однако, чтобы быть абсолютно уверенным, вы должны удалить AndroidViewClient с картинки и выполнить ту же команду, что и в качестве бэкэнда.
AndroidViewClient 12.0.2 поддерживает некоторые параметры отладки, указанные в командной строке, одна из которых очень полезна для определения запускаемой команды.
$ dump --debug UI_AUTOMATOR:True > /dev/null
эта команда напечатает что-то вроде
executing 'uiautomator dump --compressed /dev/tty >/dev/null'
затем эту команду вы можете запустить несколько раз, чтобы определить, есть ли проблема в вашем устройстве.
Например, копирование команды, напечатанной до того, как вы сможете использовать bash
бежать
for n in {0..299}; do echo $n; adb shell uiautomator dump --compressed /dev/tty \>/dev/null >/dev/null; done
и проверьте, есть ли утечка памяти или что-то выходит из строя на устройстве.
Что касается вашего вопроса и, как вы можете видеть из команды, данные дампа нигде не хранятся, а только копируются в сокет. Существуют версии, которые требуют локального хранения данных на устройстве, но в этом случае используемый файл перезаписывается каждый раз.