appcenter-sdk-dotnet/scripts/run-ui-tests.sh

159 строки
5.4 KiB
Bash
Executable File

#!/bin/bash
# Define directory and file locations
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
UITEST_BUILD_DIR="$SCRIPT_DIR/../Tests/UITests/bin/Release"
BUILD_SCRIPT="build.sh"
CLEAN_TARGET="clean"
# Set default values for running locally
TEST_APK="$SCRIPT_DIR/../Tests/Droid/bin/Release/com.contoso.contoso_forms_test.apk"
TEST_IPA="$SCRIPT_DIR/../Tests/iOS/bin/iPhone/Release/Contoso.Forms.Test.iOS.ipa"
BUILD_TARGET="TestApps"
# If script is running in bitrise environment, use arguments
if ! [ -z ${IN_BITRISE+x} ]; then # We are in bitrise environment
if [ -z ${3+x} ]; then # If there are not three arguments, exit failure
echo "Error - usage: ./run-ui-tests.sh {PATH_TO_APK} {PATH_TO_IPA} {BUILD_TARGET}"
exit 1
fi
TEST_APK=$1
TEST_IPA=$2
BUILD_TARGET=$3
fi
# The APP_CENTER_USERNAME environment variable must be set
if [ -z ${APP_CENTER_USERNAME+x} ]; then
echo "Error - the environment variable APP_CENTER_USERNAME must be set."
exit 1
fi
# Define test parameters
LOCALE="en-US"
# For a larger suite, go to portal, pretend to start a test suite, select devices, click next until you see CLI instructions and copy the hash code
IOS_DEVICES=8551ba4e # just one device.
ANDROID_DEVICES=f0b8289c # just one device.
ANDROID_APP_NAME="mobilecenter-xamarin-testing-app-android"
IOS_APP_NAME="mobilecenter-xamarin-testing-app-ios"
ANDROID_APP="$APP_CENTER_USERNAME/$ANDROID_APP_NAME"
IOS_APP="$APP_CENTER_USERNAME/$IOS_APP_NAME"
TEST_SERIES="master"
# Define results constants
ANDROID_PORTAL_URL="https://mobile.azure.com/users/$APP_CENTER_USERNAME/apps/$ANDROID_APP_NAME/test/runs/"
IOS_PORTAL_URL="https://mobile.azure.com/users/$APP_CENTER_USERNAME/apps/$IOS_APP_NAME/test/runs/"
ANDROID_INFORMATION_FILE="android_info.txt"
IOS_INFORMATION_FILE="ios_info.txt"
ANDROID_PLATFORM_NAME="Android"
IOS_PLATFORM_NAME="iOS"
# If the APP_CENTER_ANDROID_DEVICES environment variable is set, use it as the ANDROID_DEVICES
if ! [ -z ${APP_CENTER_ANDROID_DEVICES+x} ]; then
ANDROID_DEVICES="$APP_CENTER_ANDROID_DEVICES"
fi
# If the APP_CENTER_IOS_DEVICES environment variable is set, use it as the IOS_DEVICES
if ! [ -z ${APP_CENTER_IOS_DEVICES+x} ]; then
IOS_DEVICES="$APP_CENTER_IOS_DEVICES"
fi
# Define functions
# This function extracts the test run ID from an information file, and then echoes it
# Usage: get_test_run_id {INFORMATION_FILE}
get_test_run_id() {
INFORMATION_FILE="$1"
while read -r line
do
if [ $(expr "$line" : "Test run id: ") -ne 0 ]; then
echo $(echo $line | cut -d'"' -f 2)
break
fi
done < $INFORMATION_FILE
}
# This function prints the results of test initialization
# Usage: print_initialization_results {RETURN_CODE} {PLATFORM_NAME} {PORTAL_URL} {TEST_RUN_ID}
print_initialization_results() {
RETURN_CODE=$1
PLATFORM_NAME="$2"
PORTAL_URL="$3"
TEST_RUN_ID="$4"
if [ $RETURN_CODE -ne 0 ]; then
echo "$PLATFORM_NAME test failed to initiate."
fi
if [ $RETURN_CODE -eq 0 ]; then
echo "$PLATFORM_NAME test run ID: $TEST_RUN_ID"
echo "$PLATFORM_NAME test results: $PORTAL_URL$TEST_RUN_ID"
fi
}
# This function initializes tests for the given parameters
# Usage: initialize_tests {APP_NAME} {DEVICES_CODE} {APP_PACKAGE} {INFORMATION_FILE}
initialize_tests() {
APP_NAME="$1"
DEVICES_CODE="$2"
APP_PACKAGE="$3"
INFORMATION_FILE="$4"
mobile-center test run uitest --app $APP_NAME\
--devices $DEVICES_CODE --app-path $APP_PACKAGE\
--test-series $TEST_SERIES --locale $LOCALE\
--build-dir $UITEST_BUILD_DIR --async true > $INFORMATION_FILE
echo $?
}
# Log in to app center
./appcenter-login.sh
if [ $? -ne 0 ]; then
exit 1
fi
# Build tests
pushd ..
echo "Cleaning..."
sh $BUILD_SCRIPT -t=$CLEAN_TARGET # clean so that we don't accidentally update to snapshot
if [ $? -ne 0 ]; then
echo "An error occured while cleaning."
popd
exit 1
fi
echo "Building target \"$BUILD_TARGET\"..."
sh $BUILD_SCRIPT -t=$BUILD_TARGET
if [ $? -ne 0 ]; then
echo "An error occured while building tests."
popd
exit 1
fi
popd
# Run Android tests
echo "Initializing Android tests..."
ANDROID_RETURN_CODE=$(initialize_tests $ANDROID_APP $ANDROID_DEVICES $TEST_APK $ANDROID_INFORMATION_FILE)
ANDROID_TEST_RUN_ID=$(get_test_run_id $ANDROID_INFORMATION_FILE)
echo $ANDROID_TEST_RUN_ID
print_initialization_results $ANDROID_RETURN_CODE "$ANDROID_PLATFORM_NAME" "$ANDROID_PORTAL_URL" "$ANDROID_TEST_RUN_ID"
rm $ANDROID_INFORMATION_FILE
# Run iOS tests
echo "Initializing iOS tests..."
IOS_RETURN_CODE=$(initialize_tests $IOS_APP $IOS_DEVICES $TEST_IPA $IOS_INFORMATION_FILE)
IOS_TEST_RUN_ID=$(get_test_run_id $IOS_INFORMATION_FILE)
print_initialization_results $IOS_RETURN_CODE "$IOS_PLATFORM_NAME" "$IOS_PORTAL_URL" "$IOS_TEST_RUN_ID"
rm $IOS_INFORMATION_FILE
# If iOS or Android tests failed to be initiated, exit failure. Otherwise exit success
if [ $IOS_RETURN_CODE -ne 0 ] || [ $ANDROID_RETURN_CODE -ne 0 ]; then
exit 1
fi
# If script is running in bitrise environment, upload test run IDs to Azure Storage
if ! [ -z ${IN_BITRISE+x} ]; then # Then we are in bitrise environment
echo "Writing test run IDs to files..."
echo "$IOS_TEST_RUN_ID" > $IOS_TEST_RUN_ID_FILE
echo "$ANDROID_TEST_RUN_ID" > $ANDROID_TEST_RUN_ID_FILE
azure storage blob upload -q $IOS_TEST_RUN_ID_FILE $AZURE_STORAGE_CONTAINER
azure storage blob upload -q $ANDROID_TEST_RUN_ID_FILE $AZURE_STORAGE_CONTAINER
fi
exit 0