Невозможно загрузить APK в App Center для тестирования пользовательского интерфейса Espresso. - PullRequest
0 голосов
/ 08 июня 2018

Я постараюсь быть как можно более подробным.Прошу прощения за любые проблемы с форматированием или языком.

Что я пытаюсь сделать?

Я пытаюсь создать приложение для загрузки APK в Appcenter для выполнения тестовых примеров пользовательского интерфейса на любых устройствах, предоставленных пользователем.Когда приложение будет завершено, мое приложение покажет результаты выполненных тестов пользовательского интерфейса.

Как я это делаю?

Центр приложений предоставил множество API, которые могут бытьпросмотрено здесь .Выполнение теста пользовательского интерфейса состоит из четырех этапов.

  1. Создайте новый тестовый прогон. Это работает
  2. Создание хешей файлов для загрузки. Это работает
  3. Загрузить фактические файлы. Я получаю 400 неверных запросов ИЛИ ошибка "Полезная нагрузка слишком большая".Мой файл APK составляет всего 1 МБ, и загрузка выполняется через Appcenter CLI .
  4. Выполните созданный тестовый прогон. Этот API не работает.Вероятно, из-за сбоя 3-го шага .

В чем мне нужна помощь?

Шаг 3. выше не работает для меня.Я продолжаю получать следующую ошибку, когда я пытаюсь загрузить файл APK через curl / почтальон.

Команда скручивания:

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

Получена ошибка:

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

Ирония в том, когда точно такая жеAPI выполняется CLI Appcenter, он работает.Если тесты пользовательского интерфейса выполняются как часть этапа сборки, App Center использует точно такую ​​же процедуру и набор API для загрузки APK.Пожалуйста, просмотрите полный журнал здесь .Для форматирования я не добавил inline.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Через полтора дня, возможно, два я смог решить эту проблему.Я разместил подробный документ здесь и ниже - более короткая версия.

После того, как вы создали новый тестовый прогон, вам необходимо загрузить хэши файлов для APK, сгенерированных изкоманда gradle $ ./gradlew clean assembleDebug assembleAndroidTest.URL указывается в ключе 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"
}]

Теперь мы загружаем файл по URL-адресу, полученному в ответ на API /hashes/batch, со следующими параметрами тела в формате form-data.

  • lative_path // Имя файла является адекватным
  • file // Фактический файл
  • file_type // app-файл для сборки APK и test-файл для APK, содержащийэспрессо-тесты

Если файлы загружены правильно, вы можете выполнить тестовый запуск с помощью /start конечной точки API.

0 голосов
/ 08 июня 2018

Ваша команда curl на шаге 3 пытается загрузить двоичный файл в виде данных составной формы (в параметре data, которого нет в спецификации API ).Конечная точка / files не ожидает загрузки файла, но готовит загрузку внутренне, а затем возвращает вам URL для загрузки.См. здесь в коде CLI App Center:

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

Удалите -F "data=@app-debug-androidTest.apk" из команды curl, затем проверьте ответ для URL загрузки для этого запуска теста.

...