【问题标题】:How to download file from Firebase Test Lab device如何从 Firebase 测试实验室设备下载文件
【发布时间】:2019-01-25 23:16:23
【问题描述】:

我正在尝试从 Google Firebase 测试实验室设备下载文件。这些文件是通过运行检测测试生成的。这些文件是屏幕截图。我需要下载屏幕截图,因为随后的测试运行会将屏幕与这些屏幕截图进行比较。因此,屏幕截图是视觉变化检测的基准。

我尝试寻找一种方法来连接到 Firebase 测试实验室设备的 Device File Explorer。但似乎没有办法远程访问它。

由于Firebase Test Lab cleans up the device 在测试之后,我认为我可以实现我想要做的唯一方法是将代码添加到测试中以推送文件到某个地方。

我想将文件推送到存储测试结果的 Google Cloud 存储桶。从下面的文档来看,这似乎是存储桶的预期用途:

测试实验室完成对您的应用的测试后,您可以查看测试 结果在 Firebase 控制台或 Google Cloud 存储桶中 你的项目。您还可以在 shell 命令中添加 gsutil 命令 如上图所示,将测试结果数据复制到本地计算机。到 了解更多信息,请参阅分析 Firebase 测试实验室结果。 (Firebase documentation)

对于这种方法,我的插桩测试如何将文件推送到存储桶?它如何知道使用什么存储桶?执行文件传输的 API 是什么?

我可以采取的另一种方法是 Take Screenshots from Firebase Test Lab Instrumentation Tests 这会将屏幕截图放入存储桶中。但我看到了两个潜在的问题。

第一个问题是截图库的截图可能与UiAutomation.takeScreenshot()截取的截图不同。换句话说,基线屏幕截图是使用屏幕截图库拍摄的,但在随后的运行中,我会使用 UiAutomation.takeScreenshot() 拍摄屏幕截图并进行比较。由于库不同,因此它们的屏幕截图可能会有所不同。一种可能的解决方案是使用屏幕截图库拍摄两个屏幕截图。但随后我需要弄清楚如何将屏幕截图读回内存,以便执行比较操作。今天我以Bitmaps 阅读它们。

对于这种方法,我的插桩测试如何将屏幕截图库的屏幕截图加载为 Bitmaps

第二个问题是弄清楚如何将屏幕截图从存储桶下载到我的本地计算机。存储桶的用户界面没有下载按钮。它只有一个上传按钮:

对于这种方法,我如何将文件从存储桶下载到我的本地计算机,以便我可以将它们添加到我的插桩测试可以读取的资源目录中?

【问题讨论】:

    标签: android firebase firebase-test-lab


    【解决方案1】:

    好的,我希望我在下面记录了你所有的问题:

    默认情况下,/sdcard/Screenshots 中的所有文件都会从设备复制到您有权访问的 GCS 存储桶中。您可以在测试期间将自己的文件写入设备上的同一文件夹中。测试实验室会将它们拾取并复制到存储桶中。

    如果您想下载其他文件夹并在本地下载它们,我可以推荐flank,它有一个名为“directories-to-pull”的选项来指定多个目录。它已经提供了很多您尝试手动实现的功能以及更多功能。

    如果您不想使用 flank,gcloud 也有此选项,但会将文件放入您的 GCS 存储桶中。没有下载到本地机器。

    Cloud Storage 用户界面似乎相当有限。它允许您下载单个文件,但不能以 zip 格式下载文件夹。使用 gsutil 递归下载文件:

    gsutil -m cp -r gs://path/to/bucket/folder path/to/local/folder
    

    默认情况下,测试实验室会为您提供 GCS 存储桶位置,它将文件复制到该位置,但您可以使用自己的存储桶和位置,例如使用 gcloud 客户端:

    gcloud firebase test android run --results-bucket=gs://my-bucket --results-dir=path/to/folder
    

    【讨论】:

    • 谢谢你。为了从我的仪器测试中将我自己的文件写入/sdcard/Screenshots,我尝试了developer.android.com/training/data-storage/files 中描述的 API,但它们都不起作用。例如,getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES) 给了我/storage/emulated/0/Android/data/com.locuslabs.android.sdk/files/Pictures 而不是/sdcard/Screenshots。我也可以尝试通过firebase.google.com/docs/test-lab/android/… 截屏。你会怎么做?
    • 我还应该补充一点,我尝试直接保存到/sdcard/Screenshots,但我得到了java.io.FileNotFoundException ... (Permission denied)
    • 但是,当我简单地将屏幕截图保存到使用File imageFolder = new File("/sdcard/screenshots/") 打开的目录中的文件中时,我确实可以正常工作。我的错误可能是认为我可以使用物理设备在调试器上运行 Android Studio 中的插桩测试。
    • Environment.getExternalStorageDirectory() 应该给你 sdcard 目录。路径可能类似于/storage/emulated/0,但它实际上应该指向与/sdcard 相同的目录。
    【解决方案2】:

    为您提供更多信息。您无需使用 Flank 即可使用 --directories-to-pull。该标志在测试实验室的gcloud firebase test android run 命令中可用——有关更多信息,请参阅https://cloud.google.com/sdk/gcloud/reference/firebase/test/android/run

    此外,您当然可以从 Cloud Storage UI 下载文件 - 只需单击文件名,它会询问您要将文件保存在本地驱动器的哪个位置(或者根据文件的类型,您可能需要右键单击并选择“将链接另存为...”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多