我会尝试尽可能详细。请原谅任何格式或语言问题。
我想做什么?
我正在尝试创建一个应用程序,将APK上传到Appcenter,以便在用户提供的任何设备上执行UI测试用例。完成后,我的应用程序将显示已执行的UI测试的结果。
我是怎么做到的?
应用中心提供了许多可以查看here的API。执行UI测试是一个4个步骤。
我需要哪些帮助?
上面的步骤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。出于格式化目的,我没有添加内联。
我做错了什么?
答案 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
格式的以下正文参与。
如果文件正确上传,您可以按/start
API终点执行测试运行。