Куда поместить тестовые данные Android Instumentation

Я хочу использовать большие файлы (> 2 ГБ zip-архивы, а также видеофайлы) в своих инструментальных тестах, чтобы проверить загрузку файлов с SD-карты / внутреннего хранилища.

Как я могу написать эти инструментальные тесты и снабдить их нужными файлами? Для других тестов мне нужны были очень маленькие файлы, поэтому я поместил их в необработанные ресурсы приложения.

InputStream rStream = context.getResources().openRawResource(R.raw.smalltestvideo);

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

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

person PhilLab    schedule 09.03.2018    source источник
comment
Вы хотите прочитать каждый файл? Для проверки есть ли какие-либо требования, чтобы этот заархивированный файл хранился на SD-карте.   -  person Jitesh Mohite    schedule 28.03.2018
comment
Просто чтобы лучше понять ситуацию, вы хотите иметь файлы большого размера во внутренней памяти устройства, ваше приложение имеет разрешение READ_STORAGE, и вы хотите проверить способность приложения загружать эти большие файлы. Это точно правильно?   -  person ahasbini    schedule 28.03.2018
comment
Мои тестовые устройства пусты — считайте их стертыми перед каждым запуском теста, чтобы иметь определенное состояние. Так как у меня их несколько, я не хочу готовить их вручную, это должно быть автоматизировано. Но да, фактическое использование приложения подразумевает чтение больших файлов из внутреннего или внешнего хранилища, и поэтому приложение имеет разрешение READ_STORAGE.   -  person PhilLab    schedule 28.03.2018
comment
Помимо того, что открытие больших необработанных ресурсов вызовет какое-то сумасшедшее исключение, очень неудобно помещать такой большой файл в репозиторий git. Вы хотите, чтобы это работало на сервере ci?   -  person M. Reza Nasirloo    schedule 29.03.2018


Ответы (2)


Для начала вот скрипт, который можно добавить в файл build.gradle и выполнять работу по копированию файлов из определенной папки и размещению их на устройстве.

Я хочу отметить, что у @m-reza-nasirloo есть мнение о хранении этих файлов в репозитории, и поэтому это необходимо учитывать при разработке надлежащего теста, имея репозиторий небольшого размера, который можно поддерживать, а сервер CI или товарищ по команде мог легко загрузить клон. С помощью приведенного ниже сценария тестовые файлы могут быть размещены вне корневого каталога проекта и достигнуты эти точки.

Также еще один момент заключается в том, что этот скрипт предполагает, что каталог тестовых файлов (здесь это testFiles) содержит только файлы, а не подкаталоги. Для обработки подкаталогов потребуются дополнительные настройки.

Кроме того, скрипт будет распространяться на все подключенные устройства. Поэтому, если вы запускаете тесты из Android Studio, устройства, которые вы не выбрали для запуска, также получат файлы.

Наконец, этот скрипт будет выполняться при сборке тестов для Android, особенно когда gradle выполняет assembleDebugAndroidTest или аналогичные задачи. Чтобы изменить это, просто измените условие if по своему усмотрению.

import com.android.ddmlib.AndroidDebugBridge

task pushFilesToDevices {
    def location = "${project.rootDir}/../testFiles/"
    def files = new File(location).listFiles()
    AndroidDebugBridge.initIfNeeded(false)
    def bridge = AndroidDebugBridge.createBridge(android.adbExecutable.path, false)
    doLast {
        bridge.devices.each { device ->
            println "pushing files to ${device.name}"
            files.each { file ->
                device.pushFile(file.absolutePath, "/sdcard/${file.name}")
            }
            println "finished pushing"
        }
    }
}

tasks.whenTaskAdded { taskItem ->
    if (taskItem.name.contains("assemble") && taskItem.name.endsWith("AndroidTest")) {
        taskItem.dependsOn pushFilesToDevices
    }
}
person ahasbini    schedule 29.03.2018
comment
@phillab, этот ответ помог вам? - person ahasbini; 01.04.2018

Вы можете включить эти большие файлы в качестве тестовых ресурсов — просто создайте каталог Assets в своей тестовой структуре инструментовки. Когда ваше приложение будет скомпилировано, они будут исключены (кроме тестов).

Просто создайте правильную структуру: src/androidTest/assets

Вам может также потребоваться зарегистрировать его в своем модуле:

androidTest {
    assets.srcDirs = ['src/main/assets', 'src/androidTest/assets/']
    java.srcDirs = ['src/main/java', 'src/androidTest/java'] //you probably already have this
}
person Nick Cardoso    schedule 03.04.2018