【问题标题】:Unable to execute tests from command line via xcodebuild无法通过 xcodebuild 从命令行执行测试
【发布时间】:2013-12-12 18:37:14
【问题描述】:

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

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

它构建了应用程序,但没有运行测试用例。

有人可以帮忙吗? 谢谢

【问题讨论】:

  • 您收到了哪些错误消息?

标签: ios xcodebuild xctest


【解决方案1】:

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

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

最终对我有用。 iPhone 是有限的和/或不可预测的。

正如另一位发帖者(找不到引文)提到的,'platform' 松散地对应于目标列表中的分隔符,'name' 对应于子选择,OS 参数对应于右边同一列表中雪佛龙的一侧减去“iOS”。

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

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

【讨论】:

  • 谢谢你的编辑,纪尧姆,但我把它放在多行上,因为它需要滚动才能阅读!
  • 如何为真机制作构建
  • 这是 `destination' 参数可用的值之一,@QadirHussain。
  • 以防万一有人正在审查这个,现在,使用 fastlane 和测试操作 scanmulti_scan 管理测试要容易得多。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

  • 目标语法给出的5:xcodebuild:错误:选项'Destination'需要至少一个'key = value'形式的参数。您的意思是“platform=iOS Simulator,name=iPad”吗?
  • 我发现这只是测试构建而不运行单元测试。尝试使用 xcodebuild test 和 xcodebuild test ... 没有运气。
  • 有趣的是,手册页声称可以使用latest 指定操作系统版本,但这似乎根本不起作用。
  • 嗨,我使用xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone' 低于错误:xcodebuild:错误:无法找到与 -destination 标志的参数匹配的目标:找不到请求的设备,因为没有可用的设备与请求匹配。
【解决方案3】:

需要注意的是,您可以使用instruments -s devices 来获取所有可用设备的列表。

您还应该将字符串作为 -destination 'platform=iOS Simulator,id=ID_OF_THE_SIMULATOR' 传递,因为出于某种原因,它不喜欢 key=value 对之间的空格。

【讨论】:

    【解决方案4】:

    我在 Xcode 构建中遇到了类似的问题。就我而言,问题是我没有与我的方案相关的任何测试。

    请看我的答案(附图表)here

    【讨论】:

      【解决方案5】:

      在这里寻找类似 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 }
      

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

      【讨论】:

        猜你喜欢
        • 2015-01-07
        • 2011-07-21
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-04
        • 1970-01-01
        • 2015-08-15
        相关资源
        最近更新 更多