假设我正在使用以套装为基础的方法为 Mac 制作镜像,并准备好一台新镜像的机器(或者更好的是,几台不同类型的机器)进行测试。如何进行自动化测试?
编辑:
我主要关注的是客户端机器的图像。我考虑的测试如下:
- 一次运行已安装的所有应用程序(位于 /Applicaions 中)。是否有崩溃?应用程序是否要求输入许可证代码(是否需要输入许可证代码)?
- 更好的方法是测试在不同的应用程序中加载和保存文件。
- 更好的方法是,在网络帐户下登录时执行上述操作。[对于网络用户来说,许多程序的运行很奇怪。]
- 如果可能的话,了解应用程序的响应程度会很好(但这可能超出了合理测试的范围)。
也许更根本的是:
- 系统能启动吗?
- 它能连接到我们的网络吗?
- 检查预期服务(ARD、SSH)是否已启动并正在运行也是很好的。
- 是否安装了所需的软件?
- 硬盘可以正常使用吗?
答案1
我见过茄子多次建议采用自动化测试的方法 - 尤其是使用 GUI 应用程序。
或者,在首次启动时运行一个简短的 shell 脚本,然后自行删除,以确保配置设置已设置(例如,绑定到开放目录、可以访问服务器、使用 PlistBuddy 或默认值读取某些首选项、检查 MCXCache 是否正确等)
答案2
你说的“测试”是指“验证某些包和程序是否存在以及它们是否按预期运行”吗?
如果是的话,我无法谈论 Mac 特定的部分,但我的方法是将一个小的 XML-RPC 程序作为映像的一部分。它不一定是 XML-RPC,但我以前发现这种方法很有用。
该程序将在机器上公开 API,用于各种测试。默认情况下,它会在机器启动时运行,监听(例如)端口 8080。您的控制脚本将连接并运行一系列命令,单元测试风格。您可以控制公开级别,从“此目录是否存在”到“运行 Photoshop 时会发生什么”。
就像我说的,这不是 Mac 独有的,但却是一个简单且便携的解决方案。
PS:通过测试后,该包可以响应最终命令,将自身从图像中删除:)
答案3
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 编辑器中的应用程序(这样它在打开时就会运行),然后将其添加到测试帐户的登录项列表中(系统偏好设置->帐户窗格->登录项选项卡)。
我将推迟解决让网络帐户在启动时自动登录的问题。我怀疑有一种不太难的方法可以做到这一点(也许通过管理首选项,或者只是“手动”放入相关的设置文件——即恢复后脚本),但目前我手边没有有用的测试设置。
答案4
我想这取决于您要测试的内容。我假设您可以使用 Apple 脚本来自动执行您要测试的任何操作。