Могу ли я ускорить функцию takeSnapshot () MonkeyRunner? - PullRequest
0 голосов
/ 04 февраля 2019

Недавно я обнаружил инструмент monkeyrunner для автоматизации действий Android, тестирования, макросов и прочего.Тем не менее, я очень потрясен тем, насколько медленно работает takeSnapshot ().Я делаю тесты на эмуляторе Android, я сравнил два метода - takeSnapshot () и screencap оболочки Android.

Тестовый скрипт для функции takeSnapshot (d - уже подключен MonkeyDevice):

start = int(d.getProperty("clock.millis"))
for n in range(100):
    p = d.takeSnapshot()
    print n
stop = int(d.getProperty("clock.millis"))
print "%d" % (stop-start,)

Testдля скриншота оболочки (/ sdcard / tmp - файловая система tmpfs, которую я смонтировал, чтобы избавиться от задержки hdd):

start = int(d.getProperty("clock.millis"))
for n in range(100):
    res = d.shell("screencap \"/sdcard/tmp/screen.dump\" && echo \"done\"")
    print n, res
stop = int(d.getProperty("clock.millis"))
print "%d" % (stop-start,)

Первый тест:

99
17945
>>>

Второй тест:

99 done
11118
>>>

Я был немного удивлен, что вызов оболочки Android на самом деле был быстрее, чем использование встроенной функции обезьяны.Я думаю, что если бы я написал весь стендовый скрипт на sh и запустил его в оболочке adb, это было бы еще быстрее ... Если бы кто-нибудь мог предложить какой-то способ улучшить скорость MR здесь, я был бы очень рад.Обычно это нужно для определения цвета пикселя или получения изображения (с MR) для автоматизированных тестов.В настоящее время я пишу это в чистых sh-скриптах с большим количеством ifs, но я бы очень хотел переключиться на MR и python.Мне нравится python.

Итак, главный вопрос: могу ли я как-то сделать так, чтобы MonkeyRunner takeSnapshot () работал быстрее?Или, может быть, есть какой-то другой способ получить цвет пикселя в инструменте, кроме создания полного снимка и использования его метода getRawPixel?

Я понимаю, что разница в скорости не слишком сильна, возможно, она не будет заметнав реальных тестах приложений меня просто раздражает тот факт, что встроенная функция работает намного медленнее, чем запуск нового сеанса оболочки и выполнение внешней программы ...

...