【问题标题】:Unable to upload APKs to App Center to perform Espresso UI testing无法将 APK 上传到 App Center 以执行 Espresso UI 测试
【发布时间】:2018-06-08 08:21:52
【问题描述】:

我会尽可能详细。请原谅任何格式或语言问题。

我要做什么?

我正在尝试制作一个应用程序来将 APK 上传到 Appcenter,以便在用户提供的任何设备上执行 UI 测试用例。完成后,我的应用将显示执行的 UI 测试的结果。

我是怎么做到的?

应用中心提供了很多API,可以查看here。执行 UI 测试需要 4 个步骤。

  1. 创建一个新的测试运行。 这是有效的
  2. 创建要上传的文件的哈希值。 这是有效的
  3. 上传实际文件。 我不断收到 400 错误请求或“有效负载太大”错误。我的 APK 文件只有 1 MB 并且通过Appcenter CLI进行上传
  4. 执行创建的测试运行。 此 API 不工作。可能是由于第三步失败

我需要什么帮助?

上面的第 3 步对我不起作用。当我尝试通过 curl/postman 上传 APK 文件时,我不断收到以下错误。

卷曲命令:

curl -i -F "data=@app-debug-androidTest.apk" -H "X-API-Token:API_TOKEN_HERE" -H "Content-Type:application/json" -X POST https://api.appcenter.ms/v0.1/apps/{ORG_NAME}/{APP_NAME}/test_runs/{TEST_RUN_ID_CREATED_IN_STEP_1}/files

收到错误:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error</title>
    </head>
    <body>
        <pre>Payload Too Large</pre>
    </body>
</html>

具有讽刺意味的是,当 Appcenter CLI 执行完全相同的 API 时,它可以工作。如果 UI 测试作为构建步骤的一部分执行,应用中心将使用完全相同的过程和 API 集来上传 APK。请查看完整日志here。出于格式化目的,我没有添加 inline。

我做错了什么?

【问题讨论】:

    标签: android continuous-integration visual-studio-app-center


    【解决方案1】:

    您在步骤 3 中的 curl 命令正在尝试将二进制文件作为多部分表单数据上传(在 API spec 中不存在的参数 data 中)。 /files 端点不需要文件上传,但正在内部准备上传,然后将上传 URL 返回给您。请参阅 App Center CLI 代码中的here

    const directUrl = await this.getDirectUploadUrl(this._client, testRunId, file);
    await this.makeDirectUpload(directUrl, file);
    

    从您的 curl 命令中删除 -F "data=@app-debug-androidTest.apk",然后检查此测试运行的上传 URL 的响应。

    【讨论】:

    • 很多 API 的 API 规范都不完整。事实证明,/file 根本不需要调用,即使它是 CLI 工具的一部分。将对我有用的内容作为单独的答案发布。感谢您抽出宝贵时间进行调查。
    【解决方案2】:

    在一天半之后,可能是两天后,我能够解决这个问题。我已经发布了一个详细的文档here & 下面是较短的版本。

    创建新的测试运行后,您需要上传通过 gradle 命令$ ./gradlew clean assembleDebug assembleAndroidTest 生成的 APK 的文件哈希值。在/hashes/batch API 的响应中,location 键中提到了 URL。 API 的主体类似于:

    [{
            "file_type":"app-file",
            "checksum":"df798b4d07597db804546b8ca723780992811111", //Calculate your file's SHA-1 by using shasum util
            "relative_path":"app-debug.apk"
    }]
    

    现在我们在响应/hashes/batch API 时收到的URL 上上传文件,其中包含form-data 格式的以下正文参数。

    • relative_path //文件名就够了
    • file //实际文件
    • file_type //用于构建 APK 的应用文件和用于包含 espresso 测试的 APK 的测试文件

    如果文件上传正常,您可以通过/start API端点执行测试运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多