翻译:使用Xcode测试(七)——测试过程自动化(Automat
除了在开发过程中交互运行测试,还可以使用服务器自动运行测试。
基于服务器的连续集成测试
交互使用Xcode测试功能,保证你的代码保持特定要求,并确保开发中的bug容易发现和修复。一套快速运行的功能测试保证你的工作并确保app功能有效运行。
即,成功的开发项目往往不止有一个开发人员实现和管理。像源代码管理,基于服务自动化测试有这些好处:使开发精力集中在团队高效。
使用基于服务器测试有以下好处:
- 使用服务器脱机生成和测试,使你的开发系统可以执行和调试,特别是在完整测试需要很长时间运行的情况下。
- 使用相同的配置,开发团队的所有程序可以在服务器上运行相同的测试,这样提高测试的一致性。服务器也生成产品给整个团队,就像生成和测试报告一样。
- 你可以根据项目和团队的需要调整配置。例如,团队任何成员提交新工作到源代码管理系统或定期在设置时间段中提交新工作时,可以启动运行测试。运行测试也可以在需要时手动启动。
- 服务器以相同方式运行测试。服务器报告提供一段时间内构建问题、构建警告和测试决议的图片。
- 你的项目可以在更多的目标上测试,自动运行测试系统比手动方式更经济。例如,你可以将任意数量的iOS设备连接到服务器,使用一个配置,该系统可以构建和测试库、应用程序,并在所有设备上运行测试,同时测试多个版本的模拟器。
命令行测试
使用Xcode命令行工具,你可以使用脚本自动构建和测试你的项目。
使用xcodebuild测试
xcodebuild
命令行工具像Xcode IDE一样驱动测试。运行xcodebuild,
使用destination
参数指定不同的目标。例如,为了测试本地OS X的MyApp,使用这个命令指定目标。
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=OS X,arch=x86_64'
</pre></code>
如果你连接了开发功能可用的设备,你可以通过名字或id调用。例如你有一个名为“开发iPod touch”的ipod touch连接设备,你可以使用下面的命令测试你的代码:
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=iOS,name=Development iPod touch'
</pre></code>
可以在模拟器上运行测试。使用模拟器以针对不同因素,操作系统和系统版本。模拟器的目标可以指定名称或id。例如:
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone,OS=8.1'
</pre></code>
destination
参数可以连接在一起,一个命令在指定共享配置目标上执行测试。例如,下面的命令链将前面三个例子结合在一起变成一个命令:
<pre><code>
xcodebuild test -project MyAppProject.xcodeproj -scheme MyApp
-destination 'platform=OS X,arch=x86_64'
-destination 'platform=iOS,name=Development iPod touch'
-destination 'platform=Simulator,name=iPhone,OS=9.0'
</pre></code>
如果测试失败,xcodebuild
返回非零退出代码。
关于命令行运行测试,你需要知道一些基本要素。关于xcodebuild
的详细信息,在终端应用窗口使用man
:
<pre><code>
man xcodebuild
</pre></code>
使用xcodebuild的ssh
从ssh远程登录(或启动守护进程)调用xcodebuild
会失败,除非主机上创建正确会话环境。
当你作为用户登陆到你的OS X系统时会创建“Aqua会话”环境。Aqua会话初始化OS X交互环境,为了可以运行OS X应用,这些是必需的。更具体来说,使用UI框架(APPKit或UIKit)代码需要运行Aqua会话。因为这个要求,在OS X上测试(或测试模拟器或OS X 应用)需要Aqua会话。
默认情况下,当你使用ssh登陆没有运行用户会话的OS X系统,会创建命令行会话。为了确保ssh登陆时创建了Aqua会话,你必须有用户登陆到远程OS X主机系统。远程系统上有运行的用户时,会强制ssh登陆创建Aqua会话。
一旦有一个用户在主机系统上运行,从ssh登陆为所有类型测试运行xcodebuild。例如,下面终端应用命令运行测试开发系统上的“
MyApp”:
<pre><code>
ssh localhost
cd ~/Development/MyAppProject_Folder
xcodebuild test -project MyApp.xcodeproj -scheme MyApp -destination 'platform=Simulator,name=iPhone 6'
</pre></code>
需要深入了解ssh,启动守护进程和启动代理,以及他们如何与系统交互,参见技术说明文档守护进程和代理及守护进程和服务变成指南(Daemons and Agents and Daemons and Services Programming Guide)。
使用Xcode服务器并持续集成
通过Xcode服务器,Xode支持完全集成基于服务器持续集成工作流。Xcode服务器可用于OS X 服务器,自动构建、分析、测试和归档app。Xcode服务器和持续集成工作流对于交互式开发工作是无缝和透明的。
学习所有关于设置并使用Xcode服务器,参见Xcode服务器并持续集成指南( Xcode Server and Continuous Integration Guide)。