Skip to content

Instantly share code, notes, and snippets.

@npu3pak
Created October 13, 2017 05:36
Show Gist options
  • Save npu3pak/8504f79a3c8a5eae18c0a34b8d49dc53 to your computer and use it in GitHub Desktop.
Save npu3pak/8504f79a3c8a5eae18c0a34b8d49dc53 to your computer and use it in GitHub Desktop.
Запуск модульных тестов XCTest из консоли
# Скрипт для автоматического юнит-тестирования iOS-проектов
# ТРЕБОВАНИЯ:
# Требуется наличие гема xcpretty (https://github.com/supermarin/xcpretty)
# Установка: sudo gem install xcpretty
# РЕЗУЛЬТАТ:
# В результате выполнения формируется каталог, имя которого содержит дату и время запуска скрипта REPORT_PATH, который содержит
# - zip-архив с результатами выполнения скрипта в родном формате XCode
# - log-файл, содержащий полный консольный вывод сборки выполнения тестов
# - xml-файл, содержащий отчет в формате JUnit. В случае ошибок файл будет пуст
# - html-файл, содержащий отчет в удобном для чтения виде. В случае ошибок файл будет пуст
PROJECT_NAME=""
SCHEME=""
WORKSPACE_NAME="${PROJECT_NAME}.xcworkspace"
DEVICE="platform=iOS Simulator,name=iPhone 8"
DATE=`date '+%Y-%m-%d_%H.%M.%S'`
# Корневой каталог, в котором будут накапливаться тесты
REPORT_PATH="./test_reports/${DATE}"
# Временный каталог, в котором будет отчет о тестировании в родном формате XCode
TEMP_XCODE_REPORT_PATH="${REPORT_PATH}/XCTest"
# ZIP-архив с отчетом в родном формате XCode
XCODE_REPORT_ZIP="${REPORT_PATH}/${PROJECT_NAME}_${SCHEME}_${DATE}.zip"
# Отчет о сборке
BUILD_LOG_NAME="${REPORT_PATH}/${PROJECT_NAME}_${SCHEME}_${DATE}.log"
# Отчет о тестировании в формате HTML. Нужно разослать заинтересованным лицам.
HTML_REPORT_NAME="${REPORT_PATH}/${PROJECT_NAME}_${SCHEME}_${DATE}.html"
# Отчет о тестировании в формате JUnit. Можно прицепить к Jenkins
JUNIT_REPORT_NAME="${REPORT_PATH}/${PROJECT_NAME}_${SCHEME}_${DATE}.xml"
# Удаляем старый отчет, если он есть
rm -f -d -r "${REPORT_PATH}"
# Создаем каталог
mkdir ${REPORT_PATH}
# Запускаем тест
xcodebuild test -workspace ${WORKSPACE_NAME} -scheme ${SCHEME} -destination "${DEVICE}" -resultBundlePath "${TEMP_XCODE_REPORT_PATH}" \
| tee ${BUILD_LOG_NAME} \
| xcpretty --report html --output ${HTML_REPORT_NAME} --report junit --output ${JUNIT_REPORT_NAME}
# Сохраняем код результата тестирования
STATUSCODE=${PIPESTATUS[0]}
# Архивируем отчет XCode
zip -rX ${XCODE_REPORT_ZIP} ${TEMP_XCODE_REPORT_PATH}
# Удаляем временный каталог
rm -f -d -r "${TEMP_XCODE_REPORT_PATH}"
# Возвращаем код результат тестирования
exit ${STATUSCODE}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment