Как я могу симулировать различные типы нагрузки на устройстве Android?

Я пытаюсь проверить поведение моего приложения в различных ситуациях, например, допустим, что используется много ОЗУ и ЦП, или сеть расходуется некоторыми другими приложениями, или батарея разряжается другим.

Итак, я хочу сказать, что я хочу, чтобы (100-X)% оперативной памяти было израсходовано (рендеринг недоступен), а моему приложению нужно использовать только X%, как я могу смоделировать это и запустить свое приложение в таком состоянии?

Точно так же, допустим, у меня только Y% доступной сети из-за различных приложений, работающих в системе, теперь я хочу визуализировать (100-Y)% доступности сети для моделирования и запустить мое приложение в таком состоянии.

Процессор занят (100-Z)% и доступен только Z% времени для моего приложения, которое я хочу протестировать.

Это ситуации, которые я хочу смоделировать. Может кто-нибудь показать мне инструмент или объяснить, как это сделать?

4 ответа

Решение

Ваше требование заключается в том, что вы хотите протестировать приложение в условиях стресса или выпуска, которые вы можете контролировать. так что здесь решение, которое я вижу, это

  • Вы можете разработать еще одно приложение (в основном, фоновую службу), которое будет отвечать за увеличение или уменьшение циклов ЦП, занимаю или освобождаю память и будет загружать сеть из-за сетевой операции (сделайте простой интерфейс для ввода данных)

    1. Циклы ЦП: создание нескольких потоков, которые будут выполнять операции с плавающей запятой и потреблять много циклов ЦП и могут оставаться в спящем режиме, когда это не требуется.

    2. Память: необходимо написать код C (malloc для выделения памяти указателям) и получить доступ к нему через JNI и функцию для его освобождения. использовать функцию памяти из Java для мониторинга текущего использования

    3. Сеть: Задайте задачу загрузки огромного количества файлов с Dropbox или другого сервера, когда это необходимо, и следите за состоянием по мере необходимости.

после этой конфигурации запустите службу, запустите нужное приложение и выполните тестирование в соответствии с этим условием.

Для проверки производительности вашего приложения вы можете использовать средства трассировки отладки. И проверить это Как проверить производительность приложения Android?

А также эта ссылка предоставляет некоторые инструменты для тестирования производительности приложений.

Вы можете использовать некоторые приложения, подобные этим, или вы можете написать какое-нибудь приложение для проведения стресс-тестирования с использованием процессора и оперативной памяти.

Как я могу программно нагружать процессор моего телефона?

Исходя из моего понимания вашего вопроса, вы должны имитировать влияние других приложений на устройство и посмотреть, как оно влияет на ваше приложение.

ОЗУ - каждый процесс будет иметь свою собственную память, так как в Android память на процесс. Этот предел кучи dalvik - это гарантированный объем памяти, который виртуальная машина предоставляет приложению. На это ограничение не распространяются никакие другие приложения. Однако есть и собственная куча, которая является общей для всех приложений и процессов.

Сеть. Недостаток доступности сети можно смоделировать, запустив приложение на устройстве, которое подключается к веб-серверу и обменивается сообщениями фиксированного размера с фиксированными интервалами.

ЦП - Циклы ЦП, которые присуждаются вашему приложению, безусловно, зависят от нагрузки, которую другие приложения оказывают на ЦП, но полностью зависит от операционной системы, чтобы решить, как планируются циклы ЦП. Чтобы убедиться, что ваше приложение получает только Z% времени процессора, было бы в лучшем случае приблизительным.

Если вы хотите провести тест производительности вашего приложения (с воздействием других приложений на устройство), вы можете попробовать http://www.littleeye.co/. Он предоставляет данные о производительности (Memory-Dalvik+Native, Network-2G+3G+Wifi, циклы процессора и энергопотребление) вашего конкретного приложения из других приложений на устройстве. Он может собирать данные для релизов сборки, что означает, что вы можете протестировать производительность конечного продукта.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я связан с Little Eye Labs

Я тоже столкнулся с этой проблемой. Там были некоторые posix-совместимые инструменты генерации нагрузки. Я обнаружил, что стресс является привлекательным инструментом, поскольку он позволяет вам контролировать нагрузку на процессор или ввод-вывод. Чтобы максимально использовать это, я пишу обертку вокруг него, чтобы установить количество создаваемой нагрузки.

Вот бинарный файл для Android.

Вот оригинальный сайт, страница стресс-проекта

Благодаря @Dinesh Prajapati это мне очень помогает, я написал класс потока для вычисления числа с плавающей запятой, и процент простоя процессора снизился, как я и ожидал. Я хотел бы разместить здесь свое решение для справки:

@Override
    public void run() {
        Random rd = new Random();
        float a, b;
        int x, y;
        @SuppressWarnings("unused") double r;
        while (run) {
            x = rd.nextInt(20) + 20;
            y = rd.nextInt(20) + 20;
            a = rd.nextFloat();
            b = rd.nextFloat();
            //noinspection UnusedAssignment
            r = Math.pow(a + x, b + y) / Math.tan((double) (a + x) / (b + y));
        }
    }

Большое спасибо.

Другие вопросы по тегам