Android 仪器测试数据放在哪里
Where to put Android Instumentation test data
我想在我的仪器测试中使用大文件(> 2 GB 的 zip 存档和视频文件)来测试从 SD 卡/内部存储加载文件。
如何编写这些仪器测试并为它们配备所需的文件?对于其他测试,我只需要非常小的文件,所以我将它们放在应用程序的原始资源中
InputStream rStream = context.getResources().openRawResource(R.raw.smalltestvideo);
但现在我需要专门测试大文件,这不再是一个选项。我是 运行
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
这里有一个脚本,可以添加到 build.gradle
文件并执行从特定文件夹复制文件并将它们放入设备中的工作。
我确实想指出 @m-reza-nasirloo 关于将这些文件存储在回购协议中有一点,因此在设计适当的测试时必须考虑到这一点,同时拥有一个可维护的小型回购协议CI 服务器或队友可以轻松下载克隆。通过下面的脚本,可以将测试文件放在项目根目录之外,实现这几点。
还有一点是这个脚本假定测试文件的目录
(这里是 testFiles
)只包含文件而不是 sub-directories。要处理 sub-directories 需要更多调整。
此外,脚本将推送到所有连接的设备。因此,如果您 运行 从 Android Studio 中进行测试,您没有 select 到 运行 的设备也会获取文件。
最后,此脚本将在构建 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
}
}
您可以将这些大文件包含为测试资产 - 只需在您的仪器测试结构中创建一个资产目录。编译您的应用时,这些将被排除(测试除外)。
只需创建正确的结构:src/androidTest/assets
您可能还需要在您的模块中注册它gradle:
androidTest {
assets.srcDirs = ['src/main/assets', 'src/androidTest/assets/']
java.srcDirs = ['src/main/java', 'src/androidTest/java'] //you probably already have this
}
我想在我的仪器测试中使用大文件(> 2 GB 的 zip 存档和视频文件)来测试从 SD 卡/内部存储加载文件。
如何编写这些仪器测试并为它们配备所需的文件?对于其他测试,我只需要非常小的文件,所以我将它们放在应用程序的原始资源中
InputStream rStream = context.getResources().openRawResource(R.raw.smalltestvideo);
但现在我需要专门测试大文件,这不再是一个选项。我是 运行
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
这里有一个脚本,可以添加到 build.gradle
文件并执行从特定文件夹复制文件并将它们放入设备中的工作。
我确实想指出 @m-reza-nasirloo 关于将这些文件存储在回购协议中有一点,因此在设计适当的测试时必须考虑到这一点,同时拥有一个可维护的小型回购协议CI 服务器或队友可以轻松下载克隆。通过下面的脚本,可以将测试文件放在项目根目录之外,实现这几点。
还有一点是这个脚本假定测试文件的目录
(这里是 testFiles
)只包含文件而不是 sub-directories。要处理 sub-directories 需要更多调整。
此外,脚本将推送到所有连接的设备。因此,如果您 运行 从 Android Studio 中进行测试,您没有 select 到 运行 的设备也会获取文件。
最后,此脚本将在构建 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
}
}
您可以将这些大文件包含为测试资产 - 只需在您的仪器测试结构中创建一个资产目录。编译您的应用时,这些将被排除(测试除外)。
只需创建正确的结构:src/androidTest/assets
您可能还需要在您的模块中注册它gradle:
androidTest {
assets.srcDirs = ['src/main/assets', 'src/androidTest/assets/']
java.srcDirs = ['src/main/java', 'src/androidTest/java'] //you probably already have this
}