Автоматизированное тестирование изображения

Допустим, я использую пакетный подход к созданию образов для Mac, и у меня есть готовая к тестированию машина со свежим изображением (или, что лучше, несколько разных типов машин). Как мне выполнить автоматическое тестирование?

редактировать:

В первую очередь меня интересуют образы для клиентских машин. Я имею в виду следующее тестирование:

  • Запустите все установленные приложения (в / Applicaions), по одному за раз. Что-нибудь падает? Приложения запрашивают лицензионные коды (и ожидается это или нет)?
  • Еще лучше было бы проверить загрузку и сохранение файлов в разных приложениях.
  • Еще лучше было бы сделать вышеуказанное, когда залогинен под сетевой учетной записью. [Ряд программ работают смешно для пользователя сети.]
  • Если возможно, было бы неплохо узнать, насколько отзывчивым является приложение (но это может выходить за рамки того, что может быть разумно протестировано).

Возможно, более фундаментально:

  • Система даже загружается?
  • Это подключается к нашей сети?
  • Также было бы неплохо проверить, что ожидаемые службы (ARD, SSH) работают и работают.
  • Установлено ли необходимое программное обеспечение?
  • Работает ли жесткий диск?

4 ответа

AppleScript кажется очевидным выбором. Вот краткий обзор (с некоторыми заметками о приложениях, которые не воспроизводились при минимальном тестировании, которое я провел) (примечание: замените reportEvent чем-то более актуальным...):

my TestApp("Address Book")
#my testApp("Aperture") # Aperture doesn't seem to understand activate -- WTF?
#my testApp("Automator") # Automator brings up a sheet when launched -- not sure how to dismiss
my TestApp("Calculator")
my TestApp("Chess")
my TestApp("Dictionary")
# etc...
my reportEvent("OS", "FinishedTest")


on TestApp(appName)
    tell application appName to activate
    delay 1
    tell application "System Events" to count (application processes whose name is appName)
    if result is 0 then
        my reportEvent(appName, "QuitUnexpectedly")
    end if
    tell application appName to quit
    delay 1
    tell application "System Events" to count (application processes whose name is appName)
    if result is not 0 then
        my reportEvent(appName, "FailedToQuit")
    end if
end TestApp

on reportEvent(appName, eventDesc)
    do shell script "curl 'http://server/eventtracker.php?app=" & sanitizeSpaces(appName) & "&event=" & sanitizeSpaces(eventDesc) & "'"
end reportEvent

on sanitizeSpaces(dangerousString)
    set AppleScript's text item delimiters to " "
    set safeString to text items of dangerousString
    set AppleScript's text item delimiters to "_"
    return safeString as Unicode text
end sanitizeSpaces

... сохраните его как приложение из редактора AppleScript (чтобы оно запускалось при открытии), а затем добавьте его в список элементов входа тестовой учетной записи (Системные настройки -> панель "Учетные записи" -> вкладка "Элементы входа").

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

Я видел, как Eggplant много раз предлагал способ автоматизации тестирования, особенно с помощью приложений с графическим интерфейсом.

В качестве альтернативы короткий сценарий оболочки, который запускается при первом запуске и впоследствии удаляется, чтобы убедиться, что настройки конфигурации установлены (например, привязаны к открытому каталогу, могут обращаться к серверам, читать определенные предпочтения с помощью PlistBuddy или по умолчанию, проверять правильность MCXCache, так далее.)

Под "тестом" вы подразумеваете "проверить, существуют ли определенные пакеты и программы и работают ли они так, как ожидается"?

Если это так, я не могу говорить о специфичных для Mac деталях, но мой подход заключается в том, чтобы включить небольшую программу XML-RPC в качестве части изображения. Это не обязательно должен быть XML-RPC, но этот подход я нашел полезным ранее.

Программа выставила бы API на коробке для различных тестов. По умолчанию он запускается при загрузке машины, прослушивая (скажем) порт 8080. Ваш управляющий скрипт подключается и запускает последовательность команд в стиле модульного тестирования. Вы можете контролировать уровень экспозиции от "существует ли этот каталог" до "что происходит, когда вы запускаете фотошоп".

Как я уже сказал, это не подкованный Mac, но было бы простым и портативным решением.

PS После прохождения тестов пакет может ответить на последнюю команду, чтобы удалить себя из образа:)

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

Другие вопросы по тегам