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

后端 未结 5 1608
后悔当初
后悔当初 2020-12-02 20:44

Is it possible to run individual test cases, or individual test suites, from an iOS app test target, instead of all the test cases, from a command line interface?

Yo

相关标签:
5条回答
  • 2020-12-02 20:53

    I was in similar situation as you and have built a python script that triggers the set of test case/s that i want. Its a little bit elaborate process but works for me and has been very useful over time in implementing DataProvider methods, Rerunning of failed test cases and other customizations I required.

    Some relevant steps for what you want to achieve.

    1. Override testInvocations method present in XCTestCase to do below steps
      • In this method I read Environment Variable XXXX.
      • This environment variable is basically a comma separated test case method names.
      • Now create NSInvocations for each test method that you want to trigger.
      • Return array of Invocations.
    2. How to pass Environment Variable?
      • In scheme add an environment variable named XXXX.
      • Scheme files are standard xml files, write a script that modifies the scheme file to contain the Comma separated values in environment variable.

    If you require more info add a comment I will reply to it.

    0 讨论(0)
  • 2020-12-02 20:59

    It is now possible with Xcode 8 using the -only-testing parameter with xcodebuild:

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

    Check this video: https://developer.apple.com/videos/play/wwdc2016/409/

    0 讨论(0)
  • 2020-12-02 21:06

    You can edit the scheme to run only specific tests. Select the scheme, then edit scheme. In the appearing window, select the Test phase and disable/enable individual tests.

    You can also add schemes to run subsets of tests. When running the tests from command line you can specify the scheme to use for the test (at least in fastlane).

    0 讨论(0)
  • 2020-12-02 21:07

    To run an individual test case you can use -only-testing

    xcodebuild test 
    -workspace <name>.xcworkspace  
    -scheme "<name>" 
    -destination '<options>' 
    -only-testing <test_case>
    
    //for example
    xcodebuild test 
    -workspace SampleApp.xcworkspace  
    -scheme "SampleAppTest" 
    -destination 'platform=iOS Simulator,name=iPhone 11 Pro Max,OS=13.5' 
    -only-testing SampleAppTest/SampleAppTest/testExample
    -only-testing SampleAppTest/SampleAppTest/testExample2
    
    -only-testing:<MyXCTargetForTest>/<MyTestSuite>/<MyTestMethod>
    
    • MyXCTargetForTest - target
    • MyTestSuite - class_name
    • MyTestMethod - test_name

    For example if Test Navigator looks like

    the parameter will have the following type

    -only-testing:SampleAppTest/SampleAppTest/testExample
    

    If you want to add an additional test case you can add one more -only-testing

    Also you can skip a test using: -skip-testing

    Test results you can find

    /Users/alex/Library/Developer/Xcode/DerivedData/<project_name>-dzqvyqfphypgrrdauxiyuhxkfxmg/Logs/Test/Test-<target_name>-2020.09.25_13-45-46-+0300.xcresult
    

    [Xcode screenshot]

    Read more here

    0 讨论(0)
  • 2020-12-02 21:12

    To run an individual test or test class you can click the diamond next to it in the gutter. This is right next to where line numbers appear if you have them turned on.

    In this screenshot my mouse is hovering over the diamond. Notice how it has changed to a little play arrow indicating it will be run.

    You can then re-execute the most recently run test(s) with ⌃⌥⌘ G.

    As far as I know this cannot be done via the xcodebuild.

    0 讨论(0)
提交回复
热议问题