自动图像测试

自动图像测试

假设我正在使用以套装为基础的方法为 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 脚本来自动执行您要测试的任何操作。

相关内容