Phi*_*Lab 5 testing android android-espresso android-instrumentation
我想在我的仪器测试中使用大文件(> 2 GB zip 存档以及视频文件)来测试从 SD 卡/内部存储加载的文件。
我如何编写这些仪器测试并为其配备所需的文件?对于其他测试,我只需要非常小的文件,所以我将它们放在应用程序的原始资源中
InputStream rStream = context.getResources().openRawResource(R.raw.smalltestvideo);
Run Code Online (Sandbox Code Playgroud)
但现在我需要专门测试大文件,这不再是一种选择。我在跑步
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
Run Code Online (Sandbox Code Playgroud)
作为开始,这里有一个脚本,它可以添加到build.gradle文件中,并完成从某个文件夹复制文件并将它们放置在设备中的工作。
我确实想指出@m-reza-nasirloo 有一个关于将这些文件存储在 repo 中的观点,因此在设计适当的测试时必须考虑到这一点,同时拥有 CI 服务器或队友可以轻松下载克隆。使用下面的脚本,可以将测试文件放在项目根目录之外并实现这些点。
还有一点是这个脚本假设测试文件的目录(这里是testFiles)只包含文件而不包含子目录。处理子目录需要更多的调整。
此外,脚本将推送到所有连接的设备。因此,如果您在 Android Studio 中运行测试,您未选择运行的设备也将获得这些文件。
最后,此脚本将在为 android 测试构建时执行,特别是在执行 gradleassembleDebugAndroidTest或类似任务时。要更改它,只需在您认为必要时修改 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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |