考虑这个示例项目:https://github.com/stremsdoerfer/TestPlan。这只是一个 Hello World,它有两个测试计划:
TestPlanUnit
仅运行单元测试和 TestPlanUI
仅运行 UI 测试。
使用 Xcode 14.3 运行下面的命令,我希望运行
TestPlanUI
,但实际上只运行 TestPlanUnit
,这是默认值。
xcodebuild -scheme TestPlan -destination 'platform=iOS Simulator,id=<sim_id>' -testPlan TestPlanUI test-without-building
它在 Xcode 14.2 上运行良好。 使用
test
代替 test-without-building
也可以正常工作。
有什么想法吗?
遇到同样的问题并向 Apple 报告了问题。当传递
testPlan
时,test-without-building
参数似乎被忽略。
我还向苹果报告了
testPlan ignored when using xcodebuild test-without-building
。
苹果回应:Potential fix identified - For a future OS update
。
这不是一个解决方案,而是一个潜在的解决方法,直到苹果修复它。如果您复制了您的Scheme,然后将该Scheme的默认测试计划设置为您想要运行的测试,则test-without-building将关注Scheme中的默认测试。
我已经使用
fastlane
进行了测试,并直接使用 xcodebuild
进行了测试,两者都是这样工作的。我不喜欢它,特别是因为我的计划相当复杂。然而,我确实成功地运行了我的测试。
确保您的运行变体均已构建。我遇到了一个问题,我不久前复制了我的方案,并且一个方案因单个测试计划的 Runtime Sanitization 的 Run / Diagnostics 设置而出现分歧。因此,当我在 CI 中运行测试并关闭清理功能时,该方案需要在
Variant-NoSanitizers
中有一个二进制文件。
实际上我得到了一个不需要任何黑客攻击的可行解决方案🔥
第一次调用
xcodebuild
将创建一个 xctestrun
文件:
xcrun xcodebuild build-for-testing -workspace <project_root>/<project_name>.xcworkspace -scheme <scheme> -destination 'platform=iOS Simulator,id=2253C0D7-C198-44AD-A98B-11301FD88F30'
此文件将位于 DerivedData 文件夹中,并命名如下:
~/Library/Developer/Xcode/DerivedData/<build_folder>/Build/Products/<scheme>_<test_plan_name>_<device_type><ios-version>-<architecture>.xctestrun
一个例子是
MyScheme_Screenshots_iphonesimulator16.4-arm64.xctestrun
第二次调用
xcodebuild
然后使用此文件来运行测试。使用 [-project, -scheme, -workspace]
时不允许指定任何 -xctestrun
:
xcrun xcodebuild test-without-building -destination 'platform=iOS Simulator,id=2253C0D7-C198-44AD-A98B-11301FD88F30' -xctestrun ~/Library/Developer/Xcode/DerivedData/<build_folder>/Build/Products/<scheme>_<test_plan_name>_<device_type><ios-version>-<architecture>.xctestrun
希望对大家有帮助👍
PS: 在这里您可以找到集成此修复程序的命令行工具 Snap
的
Pull Request。 Snap 使用 Xcode TestPlans 创建屏幕截图。对于 CI 超级有用🔥