繁体   English   中英

从命令行为 iOS 应用程序运行单个 XCTest(UI、单元)测试用例

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

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

您可以使用xcodebuild从命令行运行测试,开箱即用。 当您这样做时,您将运行您选择的测试目标中包含的所有测试用例。

您也可以使用 Fastlane 的扫描来执行此操作,但我相信您只能运行 select(如上)的构建方案的所有测试,因此它与 xcodebuild 没有什么不同。

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

我找到了直接运行xctest命令行实用程序的参考,但它似乎是一个未记录的功能并且以 DerivedData 为目标。 由于 UI 测试将其 *xctest 文件放在单独的 XCTRunner 包中,这使情况变得复杂。

现在可以在 Xcode 8 中使用xcodebuild-only-testing参数:

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

在此处输入图片说明

您可以编辑方案以仅运行特定测试。 选择方案,然后编辑方案。 在出现的窗口中,选择测试阶段并禁用/启用单个测试。

在此处输入图片说明

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

运行单独的测试

要运行单个测试用例,您可以使用-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跳过测试: -skip-testing

您可以在Derived Data找到测试结果[关于]

<derived_data>/<project_name>-dzqvyqfphypgrrdauxiyuhxkfxmg/Logs/Test/Test-<target_name>-<date>.xcresult

[Xcode截图]

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

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

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

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

要运行单个测试或测试类,您可以单击装订线中它旁边的菱形。 如果您打开它们,它就在行号出现的位置旁边。

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

悬停在测试钻石上

然后,您可以使用⌃⌥⌘ G重新执行最近运行的测试。

据我所知,这不能通过xcodebuild完成。

可能这有帮助。 我很无知,因为我不知道您可以通过右键单击测试导航器中的某些特定测试来禁用它们。

然后像往常一样运行xcodebuild test -scheme <name> ,所有禁用的测试都将被忽略。 为我与 Fastlane 合作。

Xcode 测试导航器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM