Автоматизированное тестирование изображения
Допустим, я использую пакетный подход к созданию образов для 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 для автоматизации любых действий, которые вы пытаетесь проверить.