Я хочу запускать UI-тесты и юнит-тесты для проекта в CI (Jenkins Pipeline).Тесты пользовательского интерфейса требуют, чтобы изображения и видео находились на тестовом устройстве / эмуляторе.В тестах пользовательского интерфейса я запрашиваю разрешение на доступ к чтению / записи в хранилище, чтобы я мог сбросить несколько ресурсов в папку загрузок, а затем в конце набора тестов удалить их.
Когда я запускаю свои тесты на Jenkins(mac) разрешения не предоставлены, передача мультимедиа не завершена, и все мои тесты не пройдены.
Проект содержит модуль приложения и два внутренних модуля библиотеки.
Шаги конвейера
Сборка
sh "./gradlew clean assembleRelease"
Модульный тест
sh "./gradlew testReleaseUnitTest"
UI Test
sh "$ANDROID_HOME/emulator/emulator @my_sweet_emulator_name -no-boot-anim & $ANDROID_HOME/platform-tools/adb wait-for-device"
sh './gradlew connectedAndroidTest'
Проблемы
1) Сборка CI зависает на неявной задаче assembleDebugAndroidTest
2) Если я запускаю эту задачу в командной строке на моем компьютере, тесты будут установлены, однакоразрешение на чтение / запись в хранилище не предоставляется, поэтому все тесты не пройдены из-за отсутствия ожидаемого содержимого на устройстве.
Вещи, которые я пробовал
- Я пытался только протестироватьТем не менее, сборка релиза показывает ту же проблему 2.
testBuildType "release"
- У меня нет других разрешенийМне нужно работать с
Как я предоставляю разрешения
@RunWith(AndroidJUnit4::class)
class MyMediaClassTest {
@Rule
@JvmField
val activityRule = ActivityTestRule(MainActivity::class.java)
@Rule
@JvmField
val grantPermissionRule: GrantPermissionRule = GrantPermissionRule
.grant(android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
// tests and stuff
}
Я нашел краткосрочное решение для ручного копирования всех моих медиаресурсов в эмулятор.Но это не кажется правильным, это должно быть в состоянии быть автоматизированным.