Сценарий пост-сборки AppCenter - попытка собрать Xamarin.UITest перед его выполнением

Я настроил CI для моего проекта xamarin для iOS и droid через Центр приложений Visual Studio. Все было хорошо, пока я не попытался настроить запуск теста пользовательского интерфейса. Я создал сценарий пост-сборки как для Android, так и для iOS, который в настоящее время находится в папке в файле решения (appcenter-post-build.sh, который необходим мне для создания всего решения [включая проект Xamarin.UITest]).

Я добился успеха с iOS, поскольку центр приложений позволяет мне выбрать решение для сборки, но это было запрещено на Android (appcenter-post-build.sh, который находится в той же папке, что и droid.csproj). Итак, мой обходной путь - создать еще один скрипт публикации appcenter специально для Android. Я пытаюсь создать Xamarin.UITest после сборки Android.

Всякий раз, когда я выполняю это в моем сценарии пост-сборки, где я пытаюсь собрать Xamarin.UITest:

/Library/Frameworks/Mono.framework/Versions/5_12_0/bin/msbuild $APPCENTER_SOURCE_DIRECTORY/MyDirectory/UITests/Project.UITests.csproj /p:Configuration=Debug

Эта ошибка возвращается в журналах сборки:

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/iOS/Xamarin.iOS.Common.targets: error : The specified iOS provisioning profile 'SampleProvisioningProfile' could not be found

Похоже, он также пытается собрать проект iOS, что и должно быть. Любые предложения по этому вопросу. Я пытался заставить его работать на прошлой неделе.


person mindOfAi    schedule 07.11.2018    source источник
comment
Не могли бы вы добавить тестовую конфигурацию в проект Project.UITest.csproj, который не собирает проекты iOS?   -  person Owen Niblock    schedule 07.11.2018


Ответы (2)


Вот сценарий пост-сборки, который я использую для этого приложения: https://github.com/brminnick/FaceOff

Для сборки App Center я рекомендую создать только конкретный файл .csproj, потому что этот сценарий пост-сборки будет создавать ваш проект UITest.

Пост-сборочный скрипт iOS

#!/usr/bin/env bash
if [ "$APPCENTER_XAMARIN_CONFIGURATION" == "Debug" ];then

    echo "Post Build Script Started"

    SolutionFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your Solution File].sln`
    SolutionFileFolder=`dirname $SolutionFile`

    UITestProject=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your UITest CSProj file].csproj`

    echo SolutionFile: $SolutionFile
    echo SolutionFileFolder: $SolutionFileFolder
    echo UITestProject: $UITestProject

    chmod -R 777 $SolutionFileFolder

    msbuild "$UITestProject" /property:Configuration=$APPCENTER_XAMARIN_CONFIGURATION

    UITestDLL=`find "$APPCENTER_SOURCE_DIRECTORY" -name "[Your UITest Output File Name].dll" | grep bin | head -1` 
    echo UITestDLL: $UITestDLL

    UITestBuildDir=`dirname $UITestDLL`
    echo UITestBuildDir: $UITestBuildDir

    UITestVersionNumber=`grep '[0-9]' $UITestProject | grep Xamarin.UITest|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
    echo UITestVersionNumber: $UITestVersionNumber

    TestCloudExe=`find ~/.nuget | grep test-cloud.exe | grep $UITestVersionNumber | head -1`
    echo TestCloudExe: $TestCloudExe

    TestCloudExeDirectory=`dirname $TestCloudExe`
    echo TestCloudExeDirectory: $TestCloudExeDirectory

    DSYMFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name *.dsym | head -1`
    DSYMDirectory=`dirname $DSYMFile`

    npm install -g [email protected]

    appcenter login --token token

    appcenter test run uitest --app "[Your App Center App Name]" --devices "[Your App Center iOS Deivce List]" --app-path $IPAFile --test-series "master" --locale "en_US" --build-dir $UITestBuildDir --dsym-dir $DSYMDirectory --uitest-tools-dir $TestCloudExeDirectory --async
fi

Пост-сборочный скрипт Android

#!/usr/bin/env bash
if [ "$APPCENTER_XAMARIN_CONFIGURATION" == "Debug" ];then

    echo "Post Build Script Started"

    SolutionFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your Solution File].sln`
    SolutionFileFolder=`dirname $SolutionFile`

    UITestProject=`find "$APPCENTER_SOURCE_DIRECTORY" -name [Your UITest CSProj File].csproj`

    echo SolutionFile: $SolutionFile
    echo SolutionFileFolder: $SolutionFileFolder
    echo UITestProject: $UITestProject

    chmod -R 777 $SolutionFileFolder

    msbuild "$UITestProject" /property:Configuration=$APPCENTER_XAMARIN_CONFIGURATION

    UITestDLL=`find "$APPCENTER_SOURCE_DIRECTORY" -name "[Your UITest Output DLL].dll" | grep bin | head -1` 
    echo UITestDLL: $UITestDLL

    UITestBuildDir=`dirname $UITestDLL`
    echo UITestBuildDir: $UITestBuildDir

    UITestVersionNumber=`grep '[0-9]' $UITestProject | grep Xamarin.UITest|grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
    echo UITestVersionNumber: $UITestVersionNumber

    TestCloudExe=`find ~/.nuget | grep test-cloud.exe | grep $UITestVersionNumber | head -1`
    echo TestCloudExe: $TestCloudExe

    TestCloudExeDirectory=`dirname $TestCloudExe`
    echo TestCloudExeDirectory: $TestCloudExeDirectory

    APKFile=`find "$APPCENTER_SOURCE_DIRECTORY" -name *.apk | head -1`

    npm install -g [email protected]

    appcenter login --token token

    appcenter test run uitest --app "[Your App Center App Name]" --devices "[Your Appcenter Android Device List]" --app-path $APKFile --test-series "master" --locale "en_US" --build-dir $UITestBuildDir --uitest-tools-dir $TestCloudExeDirectory --async
fi
person Brandon Minnick    schedule 13.12.2018
comment
Большое спасибо, Брэндон !. Ты спас мне день. Примеры в документации docs.microsoft.com/en-us/ appcenter / build / build-test-integration работают не так хорошо, как ваш - person David López; 27.06.2020

Я понимаю, что это происходит с опозданием примерно на 18 месяцев, но я только что столкнулся с той же проблемой, и я нашел способ заставить вещи хорошо работать в Центре приложений, даже если у вас есть ссылки на проекты для конкретных платформ в проекте тестирования пользовательского интерфейса.

  • Это проблема только в проекте Android, где мы должны специально создать проект теста пользовательского интерфейса, чтобы запускать тесты пользовательского интерфейса в Test Cloud.

Исходное сообщение @ mindOfAI, отмеченное с использованием сценария appcenter-post-build.sh (дополнительная информация в Центре приложений build scripts) для создания проекта теста пользовательского интерфейса после сборки проекта Android для подготовки к запуску тестов пользовательского интерфейса для Android. Проблема в том, что если вы хотите установить свои «Тестовые приложения» в Visual Studio для Mac для проекта теста пользовательского интерфейса, ссылки будут добавлены в проект теста пользовательского интерфейса для конкретных проектов платформы.

Тестовые приложения добавлены в тесты пользовательского интерфейса

Если проект теста пользовательского интерфейса ссылается на проект iOS, он попытается построить проект iOS как зависимость проекта теста пользовательского интерфейса. Для сборки проекта iOS требуется действующий сертификат iOS и профиль подготовки, поэтому сборка завершится ошибкой.

По сути, нам нужны ссылки там, чтобы нам было легче запускать тесты пользовательского интерфейса на нашем локальном компьютере, но мы хотим, чтобы они были в Центре приложений, чтобы мы не тратили время на создание ненужных проектов и, что наиболее важно, чтобы нам не понадобилось сертификат iOS и профиль подготовки при создании проекта тестирования пользовательского интерфейса для Android.

Чтобы решить эту проблему, я использовал сценарий appcenter-pre-build.sh и dotnet remove reference команда, чтобы удалить ссылки в Центре приложений перед созданием проекта тестирования пользовательского интерфейса для Android:

Псевдокод

dotnet remove "Path/To/UITest/Project.csproj" reference "path/to/iOS_project.csproj" "path/to/Android_project.csproj"

Пример appcenter-pre-build.sh для Android

#!/usr/bin/env bash

echo "**************************************************************************************************"
echo "**** Custom Pre Build Script -- Android Edition"
echo "**************************************************************************************************"

set -e # Exit immediately if a command exits with a non-zero status (failure)

# In order to run UI tests on local dev machines without manually installing the latest version of the app on each platform device
# you are using, the UI test project must contain references to the Android and iOS projects.
# However, in MS App Center, if the iOS reference is there for the Android build, the build will fail since there is no certificate
# nor provisioning profile to satisfy its build requirements. This next step removes the references before building for App Center
# so that we can have the best of both worlds:
echo "Removing project references to Android and iOS projects"
dotnet remove "$APPCENTER_SOURCE_DIRECTORY/MyCoolApp.UITests/MyCoolApp.UITests.csproj" reference "$APPCENTER_SOURCE_DIRECTORY/MyCoolApp.iOS/MyCoolApp.iOS.csproj" "$APPCENTER_SOURCE_DIRECTORY/MyCoolApp.Android/MyCoolApp.Android.csproj"
  • ПРИМЕЧАНИЕ. $APPCENTER_SOURCE_DIRECTORY - это встроенная переменная среды, предоставляемая центром приложений.

Надеюсь, это поможет кому-то найти решение намного быстрее, чем я =)

person jbachelor    schedule 12.05.2020