从命令行为iOS应用程序运行单独的XCTest(UI,Unit)测试用例

Apo*_*oad 29 unit-testing ios xctest xcode-ui-testing

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

您可以使用xcodebuild从命令行运行测试,开箱即用.执行此操作时,将运行所选测试目标中包含的所有测试用例.

您也可以使用Fastlane 扫描,但我相信您只能运行您选择的构建方案的所有测试(如上所述),因此它与xcodebuild没有区别.

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

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

emo*_*ssi 78

现在可以使用Xcode 8.查看此视频:

https://developer.apple.com/videos/play/wwdc2016/409/

在此输入图像描述

  • 完善.谢谢截图.值得一提的是,对我而言,我们还有新的xcodebuild操作来分解原始`test`动作的组件 - 即`build-for-testing`和`test-without-building` .如果你想多次运行测试而没有每次构建的开销,后者就很方便了.如果您需要,还可以与Maven生命周期阶段保持一致. (3认同)
  • `xcodebuild test -workspace <path> -scheme <name> -destination <specifier> -only-testing:TestBundle/TestSuite/TestCase` (2认同)

das*_*dom 20

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

在此输入图像描述

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


yoA*_*ex5 12

运行单独的测试

要运行单个测试用例,您可以使用 -only-testing

-only-testing 图案

-only-testing:<target>/<class_name>/<test_name>
Run Code Online (Sandbox Code Playgroud)

xcodebuild 图案

xcodebuild test 
-workspace "<name>.xcworkspace"  
-scheme "<name>" 
-destination '<options>' 
-only-testing "<test_case>"
Run Code Online (Sandbox Code Playgroud)

例子

//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"
Run Code Online (Sandbox Code Playgroud)

例如,如果Test Navigator看起来像

参数将具有以下类型

-only-testing:F49088168M_OBDIITests/HexUtilityTests/testHexToBinStringFormat
Run Code Online (Sandbox Code Playgroud)

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

您也可以使用以下方法跳过测试:-skip-testing

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

<derived_data>/<project_name>-dzqvyqfphypgrrdauxiyuhxkfxmg/Logs/Test/Test-<target_name>-<date>.xcresult
Run Code Online (Sandbox Code Playgroud)

[Xcode截图]


小智 5

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

您希望实现的一些相关步骤.

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

如果您需要更多信息添加评论我将回复它.