无法将APK上传到App Center以执行Espresso UI测试

时间:2018-06-08 08:21:53

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

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

我想做什么?

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

我是怎么做到的?

应用中心提供了许多可以查看here的API。执行UI测试是一个4个步骤。

  1. 创建新的测试运行。 这是有用的
  2. 创建要上传的文件的哈希值。 这是有用的
  3. 上传实际文件。 我一直收到400错误请求或“有效负载太大”错误。我的APK文件只有1 MB&上传通过Appcenter CLI
  4. 完成
  5. 执行创建的测试运行。 此API无效。可能是由于第3步失败
  6. 我需要哪些帮助?

    上面的步骤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测试作为构建步骤的一部分执行,则App中心使用完全相同的程序&amp;用于上传APK的API集。请查看完整的日志here。出于格式化目的,我没有添加内联。

    我做错了什么?

2 个答案:

答案 0 :(得分:0)

您在步骤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",然后检查此测试运行的上传网址的响应。

答案 1 :(得分:0)

经过一天半的时间,可能有两个我能够解决这个问题。我已经发布了一份精心设计的文件here&amp;以下是较短的版本。

在您创建新的测试运行后,您需要上传由gradle命令$ ./gradlew clean assembleDebug assembleAndroidTest生成的APK的文件哈希值。 location API响应中的/hashes/batch键中提到了该网址。 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收到的网址上的文件,其中包含form-data格式的以下正文参与。

  • relative_path //文件名称足够
  • file //实际文件
  • file_type //用于构建APK的app-file和用于包含espresso测试的APK的测试文件

如果文件正确上传,您可以按/start API终点执行测试运行。