使用 Firebase 测试实验室对 Android 库执行仪器化测试?
Execute Instrumented Test for an Android Library with Firebase Test Lab?
我正在研究 CircleCI,我正在尝试使用 Firebase 测试实验室为 Android 库执行仪器化测试(因为 CircleCI 不支持 Android 虚拟设备)。
我的 Instrumented Test 在 Android Studio 下工作得很好,但在 Firebase Test Lab 下执行时,它很挣扎!
事实上,主要问题是当我编译我的库时,输出中没有 APK 文件,而是一个 AAR 文件!
$ ./gradlew assembleDebug
$ ./gradlew assembleDebugAndroidTest
那么,对于使用 Firebase 测试实验室 Android 库的 运行 仪器测试,您有什么建议吗?
这里我的命令不起作用(由 fastlane 生成):
$ gcloud firebase test android run \
--type instrumentation \
--app lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk \
--test lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk \
--device model=walleye,version=28,locale=en_US,orientation=portrait \
--timeout 30m
$ gcloud firebase test android run \
--type instrumentation \
--test lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk \
--device model=walleye,version=28,locale=en_US,orientation=portrait \
--timeout 30m
感谢@DougStevenson,我只是在我的库项目中添加了一个子项目文件夹 testlab/,带有一个非常简单的 Android 应用程序,它实现了我的库.下面的 build.gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.0"
defaultConfig {
applicationId "com.soclip.library.analytics"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
}
dependencies {
// Include the Android library (aar file)
implementation fileTree(dir: '../../lib/build/outputs/aar/', include: ['*.aar'])
}
然后在我的 fastlane/Fastfile 文件中,我在 运行 我的仪器测试之前编译 "test APK":
default_platform(:android)
platform :android do
desc "Assemble Library"
lane :assemble_library do
gradle(task: "assembleDebug")
end
desc "Assemble App (for Firebase Test Lab)"
lane :assemble_application do
gradle(task: "assembleDebug", project_dir: "testlab/")
end
desc "Assemble Android Test"
lane :assemble_test_application do
gradle(task: "assembleDebugAndroidTest")
end
desc "Assemble Build and Test Application"
lane :assemble do
assemble_library
assemble_application
assemble_test_application
end
desc "Run instrumentation tests in Firebase Test Lab"
lane :instrumentation_tests_testlab do
assemble
run_tests_firebase_testlab(
project_id: "my-firebase-project-id",
app_apk: "testlab/app/build/outputs/apk/debug/app-debug.apk",
android_test_apk: "lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk",
devices: [
{
model: "walleye",
version: "28"
}
],
delete_firebase_files: true)
end
end
我正在研究 CircleCI,我正在尝试使用 Firebase 测试实验室为 Android 库执行仪器化测试(因为 CircleCI 不支持 Android 虚拟设备)。
我的 Instrumented Test 在 Android Studio 下工作得很好,但在 Firebase Test Lab 下执行时,它很挣扎!
事实上,主要问题是当我编译我的库时,输出中没有 APK 文件,而是一个 AAR 文件!
$ ./gradlew assembleDebug
$ ./gradlew assembleDebugAndroidTest
那么,对于使用 Firebase 测试实验室 Android 库的 运行 仪器测试,您有什么建议吗?
这里我的命令不起作用(由 fastlane 生成):
$ gcloud firebase test android run \
--type instrumentation \
--app lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk \
--test lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk \
--device model=walleye,version=28,locale=en_US,orientation=portrait \
--timeout 30m
$ gcloud firebase test android run \
--type instrumentation \
--test lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk \
--device model=walleye,version=28,locale=en_US,orientation=portrait \
--timeout 30m
感谢@DougStevenson,我只是在我的库项目中添加了一个子项目文件夹 testlab/,带有一个非常简单的 Android 应用程序,它实现了我的库.下面的 build.gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.0"
defaultConfig {
applicationId "com.soclip.library.analytics"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
}
dependencies {
// Include the Android library (aar file)
implementation fileTree(dir: '../../lib/build/outputs/aar/', include: ['*.aar'])
}
然后在我的 fastlane/Fastfile 文件中,我在 运行 我的仪器测试之前编译 "test APK":
default_platform(:android)
platform :android do
desc "Assemble Library"
lane :assemble_library do
gradle(task: "assembleDebug")
end
desc "Assemble App (for Firebase Test Lab)"
lane :assemble_application do
gradle(task: "assembleDebug", project_dir: "testlab/")
end
desc "Assemble Android Test"
lane :assemble_test_application do
gradle(task: "assembleDebugAndroidTest")
end
desc "Assemble Build and Test Application"
lane :assemble do
assemble_library
assemble_application
assemble_test_application
end
desc "Run instrumentation tests in Firebase Test Lab"
lane :instrumentation_tests_testlab do
assemble
run_tests_firebase_testlab(
project_id: "my-firebase-project-id",
app_apk: "testlab/app/build/outputs/apk/debug/app-debug.apk",
android_test_apk: "lib/build/outputs/apk/androidTest/debug/lib-debug-androidTest.apk",
devices: [
{
model: "walleye",
version: "28"
}
],
delete_firebase_files: true)
end
end