运行 个来自命令行的 iOS 应用的 XCTest(UI,单元)测试用例

Running individual XCTest (UI, Unit) test cases for iOS apps from the command line

是否可以 运行 单个测试用例或单个测试套件,来自 iOS 应用程序测试目标,而不是来自命令行界面的所有测试用例?

您可以使用 xcodebuild 从命令行进行 运行 测试,开箱即用。当您这样做时,您 运行 您已经 select 编辑的测试目标中包含的所有测试用例。

您也可以使用 Fastlane 中的 scan 来执行此操作,但我相信您被限制在 运行 构建方案的所有测试中 select(如上所述), 所以它与 xcodebuild.

没有区别

您可以 运行 使用来自 Facebook 的 xctool 进行特定测试,但它不使用 xcodebuild,并且仅限于 运行 只能在模拟器上使用,而不是实际 iOS 测试设备。

我找到了对 运行宁 xctest command line utility directly, but it seems to be an undocumented feature and targets DerivedData. This is complicated by the fact that UI Tests, have their *xctest files in a separate XCTRunner bundle 的引用。

要运行 单个测试或测试class,您可以单击装订线中它旁边的菱形。如果您打开了行号,它就在显示行号的旁边。

在此屏幕截图中,我的鼠标悬停在钻石上方。注意它是如何变成一个小播放箭头的,表示它将是 运行.

然后您可以使用 ⌃⌥⌘ G.

重新执行最近的 运行 个测试

据我所知,这无法通过 xcodebuild.

完成

您可以将方案编辑为 运行 仅特定测试。 Select方案,然后编辑方案。在出现的 window、select 测试阶段和 disable/enable 个人测试中。

您还可以将方案添加到 运行 个测试子集。 运行从命令行执行测试时,您可以指定用于测试的方案(至少在 fastlane 中)。

我和你的情况相似,并且构建了一个 python 脚本来触发我想要的测试集 case/s。它的过程有点复杂,但对我有用,并且随着时间的推移在实现 DataProvider 方法、重新运行失败的测试用例和我需要的其他自定义方面非常有用。

您想要实现的一些相关步骤。

  1. 覆盖 XCTestCase 中存在的 testInvocations 方法以执行以下步骤
    • 在这个方法中我读取了环境变量 XXXX。
    • 这个环境变量基本上是一个逗号分隔的测试用例方法名称。
    • 现在为每个要触发的测试方法创建 NSInvocations。
    • Return 调用数组。
  2. 如何传递环境变量?
    • 在方案中添加一个名为 XXXX 的环境变量。
    • 方案文件是标准的 xml 文件,编写一个脚本来修改方案文件以包含环境变量中的逗号分隔值。

如果您需要更多信息,请添加评论,我会回复。

现在可以通过 Xcode 8 使用 -only-testing 参数和 xcodebuild:

xcodebuild test -workspace <path>
                -scheme <name>
                -destination <specifier>
                -only-testing:TestBundle/TestSuite/TestCase

运行 个人 XC 测试

到运行一个单独的测试用例你可以使用-only-testing

-only-testing 模式

-only-testing:<target>/<class_name>/<test_name>

xcodebuild 模式

xcodebuild test 
-workspace "<name>.xcworkspace"  
-scheme "<name>" 
-destination '<options>' 
-only-testing "<test_case>"

例子

//for example(several test cases)
xcodebuild test 
-workspace "MyApp.xcworkspace"
-scheme "MyAppTest" 
-destination 'platform=iOS Simulator,name=iPhone 11 Pro Max,OS=13.5' 
-only-testing "MyAppTest/TestClass/foo"
-only-testing "MyAppTest/TestClass/foo2"

例如,如果 Test Navigator 看起来像

参数将具有以下类型

-only-testing:F49088168M_OBDIITests/HexUtilityTests/testHexToBinStringFormat

如果你想添加一个额外的测试用例你可以再添加一个-only-testing

你也可以跳过测试使用:-skip-testing

您可以在 Derived Data[About]

中找到测试结果
<derived_data>/<project_name>-dzqvyqfphypgrrdauxiyuhxkfxmg/Logs/Test/Test-<target_name>-<date>.xcresult