无法通过xcodebuild从命令行执行测试

时间:2013-11-27 08:14:58

标签: ios xcodebuild xctest

我正在尝试使用iOS测试用例的命令行构建和运行测试用例。 我给出了以下命令:

xcodebuild -target AppEngineTests -configuration Debug -sdk iphonesimulator TEST_AFTER_BUILD=YES clean build

它构建应用程序,但不运行测试用例。

有人可以帮忙吗? 感谢

5 个答案:

答案 0 :(得分:18)

我发现name属性需要更多规范。

xcodebuild test -workspace #{WORKSPACE_FILE} -scheme #{TEST_SCHEME} -destination 'platform=iOS Simulator,name=iPhone Retina (4-inch),OS=7.0'

最终对我有用。 iPhone有限和/或无法预测。

作为另一张提到的海报(无法找到引文),该平台'松散地对应于目标列表中的分隔符,' name'对应于子选择,OS参数对应于同一列表中人字形的右侧减去' iOS'。

不幸的是,文档具有启发性,乍一看听起来很权威,实际上并不完整或正确。

令人惊讶的是这是多么麻烦。一旦实现正确的调用,它的效果如何。

答案 1 :(得分:12)

您还没有说过您正在使用的Xcode版本,但由于您使用“xctest”标记了您的问题,因此假设您拥有Xcode 5或更高版本似乎是安全的。

Xcode 5通过xcodebuild动词显着增强了对test中运行测试的支持。使用此动词时,您需要指定 scheme destination 而不是目标,因为它的行为与Xcode IDE中的Test命令类似。

因此,例如,假设您的项目或名为AppEngine的工作区中有一个共享方案,其正确配置了Test方案操作,您就可以使用

xcodebuild test -scheme AppEngine -destination 'platform=iOS Simulator,name=iPad'

在配置为运行最新iOS的iPad的iOS模拟器中运行为AppEngine方案配置的所有单元测试。有关目标说明符语法的更多详细信息,请参见xcodebuild man page。 (您甚至可以使用它在连接的iOS设备上运行测试!)

之前用于运行单元测试的脚本已经过调整,以便将用户引用到test动词,因为通过这些改进,每个人都应该使用它。

答案 2 :(得分:1)

应该注意,您可以使用params[:id]获取所有可用设备的列表。

你也应该将字符串作为instruments -s devices传递,因为某些原因,它不像key = value对之间的空格。

答案 3 :(得分:0)

我在Xcode构建方面遇到了类似的问题。在我的情况下,问题是我没有任何与我的计划相关的测试。

请参阅我的答案(附图)here

答案 4 :(得分:0)

登陆这里寻找类似xcodebuild错误的解决方案。与附录一样,您也可以将单个key = val传递给-destination,例如-destination 'platform=iOS',xcodebuild将告诉您该方案可用的所有替代方案。

λ ~/Development/app-ios/ task/JIOS-400-Earl-Grey-Spike* xcodebuild -workspace app.xcworkspace -scheme app -destination 'platform=iOS'  -derivedDataPath "build" build-for-testing

User defaults from command line:
    IDEDerivedDataPathOverride = /Users/schoudhary/Development/app-ios/build

xcodebuild: error: Unable to find a destination matching the provided destination specifier:
        { platform:iOS }

    Missing required device specifier option.
    The device type “Generic iOS Device” requires that either “name” or “id” be specified.
    Please supply either “name” or “id”.

    Available destinations for the "App" scheme:
        { platform:iOS Simulator, id:D248DB01-A852-4360-A9C0-2D71AFE478D7, OS:10.3, name:iPad Air }
        { platform:iOS Simulator, id:CE87AF5A-141C-43DA-AE61-AF53593F37F7, OS:10.3, name:iPad Air 2 }
        { platform:iOS Simulator, id:E93B43E4-D24E-4927-B9EE-0375E15DCBD5, OS:10.3, name:iPad Pro (9.7 inch) }
        { platform:iOS Simulator, id:6D71DB17-0FE2-4D5E-BEE6-CC696445BA11, OS:10.3, name:iPad Pro (12.9 inch) }
        { platform:iOS Simulator, id:F7E37EF4-5E72-438A-A286-216C20158B47, OS:10.3, name:iPhone 5 }
        { platform:iOS Simulator, id:24653844-AE99-4B5B-8332-9FFD2208172F, OS:10.3, name:iPhone 5s }
        { platform:iOS Simulator, id:FD2089A4-BF3F-4F98-8E33-B7EFDCFE5B4D, OS:10.3, name:iPhone 6 }
        { platform:iOS Simulator, id:6EF0DFBD-E99E-4EB3-9C51-6E749F41B6E7, OS:10.3, name:iPhone 6 Plus }
        { platform:iOS Simulator, id:846E631C-6285-4B91-9BA6-1AB6E66C88DB, OS:10.3, name:iPhone 6s }
        { platform:iOS Simulator, id:A6943ADC-F6EF-42F6-9958-D966DFC419FC, OS:10.3, name:iPhone 6s Plus }
        { platform:iOS Simulator, id:B41ABED0-7554-438A-97AC-F34943ED4D79, OS:10.3, name:iPhone 7 }
        { platform:iOS Simulator, id:20F1582C-0D19-4F42-9DAD-43138FB923B9, OS:10.3, name:iPhone 7 Plus }
        { platform:iOS Simulator, id:683BB5CA-E0A8-4CE4-B0DD-AED4C4295B90, OS:10.3, name:iPhone SE }

    Ineligible destinations for the "App" scheme:
        { platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Generic iOS Device }
        { platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Generic iOS Simulator Device }

另一种获得正确目的地的有用方法。