203
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Developer Tools #WWDC16 Session 409 Advanced Testing and Continuous Integration Zoltan Foley-Fisher Xcode Engineer Eric Dudiak Xcode Engineer

Advanced Testing and Continuous Integration

Embed Size (px)

Citation preview

Page 1: Advanced Testing and Continuous Integration

© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Developer Tools #WWDC16

Session 409

Advanced Testing andContinuous Integration

Zoltan Foley-Fisher Xcode EngineerEric Dudiak Xcode Engineer

Page 2: Advanced Testing and Continuous Integration
Page 3: Advanced Testing and Continuous Integration
Page 4: Advanced Testing and Continuous Integration
Page 5: Advanced Testing and Continuous Integration
Page 6: Advanced Testing and Continuous Integration

Agenda

Page 7: Advanced Testing and Continuous Integration

Agenda

Testing Concepts

Page 8: Advanced Testing and Continuous Integration

Agenda

Testing Concepts

Xcode• Crash Log Gathering

Page 9: Advanced Testing and Continuous Integration

Agenda

Testing Concepts

Xcode• Crash Log Gathering

Xcode Server• Advanced Triggers• Issue Tracking and Blame• Configurable Integration User

Page 10: Advanced Testing and Continuous Integration

Agenda

Testing Concepts

Xcode• Crash Log Gathering

Xcode Server• Advanced Triggers• Issue Tracking and Blame• Configurable Integration User

xcodebuild

Page 11: Advanced Testing and Continuous Integration

Overview

Page 12: Advanced Testing and Continuous Integration

Overview

Page 13: Advanced Testing and Continuous Integration
Page 14: Advanced Testing and Continuous Integration

Testing frameworkXCTest

Page 15: Advanced Testing and Continuous Integration

Testing frameworkXCTest

Sources

TestClassA.m

TestClassB.swift

TestClassC.swift

Page 16: Advanced Testing and Continuous Integration

Testing frameworkXCTest

Compile

Build Products

UI.xctest

Unit.xctest

Sources

TestClassA.m

TestClassB.swift

TestClassC.swift

Page 17: Advanced Testing and Continuous Integration
Page 18: Advanced Testing and Continuous Integration

Test harnessXcode

Page 19: Advanced Testing and Continuous Integration

Test harnessXcode

Author tests

Page 20: Advanced Testing and Continuous Integration

Test harnessXcode

Author testsExecute tests

Page 21: Advanced Testing and Continuous Integration

Test harnessXcode

Author testsExecute testsReview reports

Page 22: Advanced Testing and Continuous Integration
Page 23: Advanced Testing and Continuous Integration

Continuous IntegrationXcode Server

Page 24: Advanced Testing and Continuous Integration

Continuous IntegrationXcode Server

Schedules bot runs

Page 25: Advanced Testing and Continuous Integration

Continuous IntegrationXcode Server

Schedules bot runsGenerates reports

Page 26: Advanced Testing and Continuous Integration

Continuous IntegrationXcode Server

Schedules bot runsGenerates reportsSends notifications

Page 27: Advanced Testing and Continuous Integration
Page 28: Advanced Testing and Continuous Integration

Command line toolxcodebuild

Page 29: Advanced Testing and Continuous Integration

Command line toolxcodebuild

Used by Xcode Server

Page 30: Advanced Testing and Continuous Integration

Command line toolxcodebuild

Used by Xcode ServerBuild and execute tests

Page 31: Advanced Testing and Continuous Integration

Command line toolxcodebuild

Used by Xcode ServerBuild and execute testsFor custom CI systems

Page 32: Advanced Testing and Continuous Integration

Previous Years’ Sessions

Testing with Xcode 6 WWDC 2014

Continuous Integration with Xcode 6 WWDC 2014

UI Testing in Xcode WWDC 2015

CI and Code Coverage in Xcode WWDC 2015

Page 33: Advanced Testing and Continuous Integration

Testing Concepts

Page 34: Advanced Testing and Continuous Integration

Behind the scenesHow Testing Works

MyTests.xctest MyApp.app

Page 35: Advanced Testing and Continuous Integration

Fundamental conceptsTesting Timeline

Compilation Hosting Observation

Page 36: Advanced Testing and Continuous Integration

How testing startsTest Hosting

Unit Tests UI Tests

Page 37: Advanced Testing and Continuous Integration

How testing startsTest Hosting

MyApp.app

Unit Tests UI Tests

Page 38: Advanced Testing and Continuous Integration

How testing startsTest Hosting

MyApp.app

Unit Tests UI Tests

Page 39: Advanced Testing and Continuous Integration

How testing startsTest Hosting

MyApp.app

Unit Tests UI Tests

Host Application

Page 40: Advanced Testing and Continuous Integration

How testing startsTest Hosting

MyApp.app UI Test Runner MyApp.app

Unit Tests UI Tests

Host Application

Page 41: Advanced Testing and Continuous Integration

How testing startsTest Hosting

MyApp.app UI Test Runner MyApp.app

Unit Tests UI Tests

Host Application

Page 42: Advanced Testing and Continuous Integration

How testing startsTest Hosting

MyApp.app UI Test Runner MyApp.app

Unit Tests UI Tests

Host Application Target Application

Page 43: Advanced Testing and Continuous Integration

ComparisonTest Hosting

Unit Tests UI Tests

Direct access to host app data and APIs Uses Accessibility to access target app

All tests run in single app launch Tests launch app for every test case

Page 44: Advanced Testing and Continuous Integration

ComparisonTest Hosting

Unit Tests UI Tests

Direct access to host app data and APIs Uses Accessibility to access target app

All tests run in single app launch Tests launch app for every test case

Page 45: Advanced Testing and Continuous Integration

Fundamental conceptsTesting Timeline

Compilation Hosting

Page 46: Advanced Testing and Continuous Integration

Fundamental conceptsTesting Timeline

Compilation Hosting Observation

Page 47: Advanced Testing and Continuous Integration

Test case structureTest Observation

Page 48: Advanced Testing and Continuous Integration

Test case structureTest Observation

Test Case 1 Test Case 2

Page 49: Advanced Testing and Continuous Integration

Test case structureTest Observation

Test Suite A

Page 50: Advanced Testing and Continuous Integration

Test case structureTest Observation

Test Suite A Test Suite B

Page 51: Advanced Testing and Continuous Integration

Test case structureTest Observation

Test Suite A Test Suite B

Test Bundle

Page 52: Advanced Testing and Continuous Integration

Test case structureTest Observation

Setup or tear down work

Test Suite A Test Suite B

Test Bundle

Page 53: Advanced Testing and Continuous Integration

Test case structureTest Observation

Setup or tear down workCustom logging

Test Suite A Test Suite B

Test Bundle

Page 54: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testBundleWillStart(_ testBundle: AnyObject!)

BUNDLE WILL START

Page 55: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testSuiteWillStart(_ testSuite: AnyObject!)

SUITE WILL START

Page 56: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testCaseWillStart(_ testCase: AnyObject!)

CASE WILL START

Page 57: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testCaseDidFinish(_ testCase: AnyObject!)

CASE DID FINISH

Page 58: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testCase(_ testCase: AnyObject!, didFailWithDescription

description: AnyObject!, inFile filePath: AnyObject!, atLine lineNumber: AnyObject!)

CASE DID FAIL

Page 59: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testSuiteDidFinish(_ testSuite: AnyObject!)

SUITE DID FINISH

Page 60: Advanced Testing and Continuous Integration

XCTestObservation ProtocolTest Observation

Test Suite A Test Suite B

Test Bundle

optional public func testBundleDidFinish(_ testBundle: AnyObject!)

BUNDLE DID FINISH

Page 61: Advanced Testing and Continuous Integration

// Test Observation // Example LoggingObserver

class LoggingObserver: NSObject, XCTestObservation {

}

Page 62: Advanced Testing and Continuous Integration

// Test Observation // Example LoggingObserver

class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedCenter = XCTestObservationCenter.shared() sharedCenter.addTestObserver(self) }

}

Page 63: Advanced Testing and Continuous Integration

// Test Observation // Example LoggingObserver

class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedCenter = XCTestObservationCenter.shared() sharedCenter.addTestObserver(self) } internal func testBundleWillStart(_ testBundle: Bundle) { print("Lights down, show is about to start") }

}

Page 64: Advanced Testing and Continuous Integration

// Test Observation // Example LoggingObserver

class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedCenter = XCTestObservationCenter.shared() sharedCenter.addTestObserver(self) } internal func testBundleWillStart(_ testBundle: Bundle) { print("Lights down, show is about to start") } internal func testCase(_ testCase: AnyObject!, didFailWithDescription description: AnyObject!, inFile filePath: AnyObject!, atLine lineNumber: AnyObject!) print("That sounds off key…") }

}

Page 65: Advanced Testing and Continuous Integration

// Test Observation // Example LoggingObserver

class LoggingObserver: NSObject, XCTestObservation { override init() { super.init() let sharedCenter = XCTestObservationCenter.shared() sharedCenter.addTestObserver(self) } internal func testBundleWillStart(_ testBundle: Bundle) { print("Lights down, show is about to start") } internal func testCase(_ testCase: AnyObject!, didFailWithDescription description: AnyObject!, inFile filePath: AnyObject!, atLine lineNumber: AnyObject!) print("That sounds off key…") } internal func testBundleDidFinish(_ testBundle: Bundle) { print("Lights up, don’t forget your coat!") } }

Page 66: Advanced Testing and Continuous Integration

Use NSPrincipalClassTest Observation

Page 67: Advanced Testing and Continuous Integration

Use NSPrincipalClassTest Observation

Test Bundle Info.plist

Page 68: Advanced Testing and Continuous Integration

Use NSPrincipalClassTest Observation

Test Bundle Info.plistTest specific instantiation

Page 69: Advanced Testing and Continuous Integration

SummaryTesting Concepts

Compilation Hosting Observation

Page 70: Advanced Testing and Continuous Integration

Crash Log Gathering

Page 71: Advanced Testing and Continuous Integration

Crashes during testingCrash Log Gathering

Page 72: Advanced Testing and Continuous Integration

Crashes during testingCrash Log Gathering

Page 73: Advanced Testing and Continuous Integration

Crashes during testingCrash Log Gathering

Test host or target application may crash

Page 74: Advanced Testing and Continuous Integration

Crashes during testingCrash Log Gathering

Test host or target application may crashXcode completes test suite

Page 75: Advanced Testing and Continuous Integration

Crashes during testingCrash Log Gathering

Test host or target application may crashXcode completes test suiteBut how to resolve the crash?

Page 76: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering NEW

Page 77: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering NEW

Page 78: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering

For Unit and UI tests

NEW

Page 79: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering

For Unit and UI testsLocal and Xcode Server crash logs

NEW

Page 80: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering

For Unit and UI testsLocal and Xcode Server crash logsLogs included in test report

NEW

Page 81: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering

For Unit and UI testsLocal and Xcode Server crash logsLogs included in test reportView crashes in Xcode’s Debug Navigator

NEW

Page 82: Advanced Testing and Continuous Integration

DemoCrash Log Gathering

Page 83: Advanced Testing and Continuous Integration

Improved test reportsCrash Log Gathering

Page 84: Advanced Testing and Continuous Integration

Crash logs gathered in test reports

Improved test reportsCrash Log Gathering

Page 85: Advanced Testing and Continuous Integration

Crash logs gathered in test reportsView crashes in Xcode’s Debug Navigator

Improved test reportsCrash Log Gathering

Page 86: Advanced Testing and Continuous Integration

Continuous Integration in XcodeXcode Server

Eric DudiakXcode Engineer

Page 87: Advanced Testing and Continuous Integration

OverviewXcode Server

Page 88: Advanced Testing and Continuous Integration

OverviewXcode Server

Custom environment variables

Page 89: Advanced Testing and Continuous Integration

OverviewXcode Server

Custom environment variablesAdvanced trigger editing

Page 90: Advanced Testing and Continuous Integration

OverviewXcode Server

Custom environment variablesAdvanced trigger editingIssue tracking and blame

Page 91: Advanced Testing and Continuous Integration

OverviewXcode Server

Custom environment variablesAdvanced trigger editingIssue tracking and blameUpgrade integrations

Page 92: Advanced Testing and Continuous Integration

OverviewXcode Server

Custom environment variablesAdvanced trigger editingIssue tracking and blameUpgrade integrationsConfigurable integration user

Page 93: Advanced Testing and Continuous Integration

New in Xcode 7.3Custom Environment Variables

Page 94: Advanced Testing and Continuous Integration

Integration scriptsAdvanced Triggers NEW

Page 95: Advanced Testing and Continuous Integration

Email notificationsAdvanced Triggers NEW

Page 96: Advanced Testing and Continuous Integration

Email notificationsAdvanced Triggers NEW

Page 97: Advanced Testing and Continuous Integration

Email notificationsAdvanced Triggers NEW

Page 98: Advanced Testing and Continuous Integration

Email notificationsAdvanced Triggers NEW

Page 99: Advanced Testing and Continuous Integration

Email notificationsAdvanced Triggers NEW

Page 100: Advanced Testing and Continuous Integration

Email notificationsAdvanced Triggers NEW

Page 101: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Page 102: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect

Page 103: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail

Page 104: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail• Errors will come up

Page 105: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail• Errors will come up• Xcode will blame you

Page 106: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail• Errors will come up• Xcode will blame you

Even if you are perfect

Page 107: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail• Errors will come up• Xcode will blame you

Even if you are perfect• SDKs change

Page 108: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail• Errors will come up• Xcode will blame you

Even if you are perfect• SDKs change• Language improvements

Page 109: Advanced Testing and Continuous Integration

We all have issuesIssue Tracking and Blame

Nobody is perfect• Tests will fail• Errors will come up• Xcode will blame you

Even if you are perfect• SDKs change• Language improvements• Smarter tools

Page 110: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame NEW

Page 111: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to act

NEW

Page 112: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it

NEW

Page 113: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue

NEW

Page 114: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue• Issue is on or near line you modified

NEW

Page 115: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue• Issue is on or near line you modified• You are the only committer

NEW

Page 116: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue• Issue is on or near line you modified• You are the only committer

You can help fix it

NEW

Page 117: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue• Issue is on or near line you modified• You are the only committer

You can help fix it• You probably know how to fix an issue

NEW

Page 118: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue• Issue is on or near line you modified• You are the only committer

You can help fix it• You probably know how to fix an issue• You seem to know about the area involved

NEW

Page 119: Advanced Testing and Continuous Integration

Identifying issue ownersIssue Tracking and Blame

Lets you know when it’s time to actYou broke it• You introduced an issue• Issue is on or near line you modified• You are the only committer

You can help fix it• You probably know how to fix an issue• You seem to know about the area involved• Fuzzy matching

NEW

Page 120: Advanced Testing and Continuous Integration

Bot configuration changesIssue Tracking and Blame NEW

Page 121: Advanced Testing and Continuous Integration

Bot configuration changesIssue Tracking and Blame

Tracks changes to your bot configuration

NEW

Page 122: Advanced Testing and Continuous Integration

Bot configuration changesIssue Tracking and Blame

Tracks changes to your bot configurationAttributes issues to changes where possible

NEW

Page 123: Advanced Testing and Continuous Integration

Bot configuration changesIssue Tracking and Blame

Tracks changes to your bot configurationAttributes issues to changes where possibleIncluded in email reports

NEW

Page 124: Advanced Testing and Continuous Integration

When it’s not your faultUpgrade Integrations NEW

Page 125: Advanced Testing and Continuous Integration

When it’s not your faultUpgrade Integrations

Re-integrates your project

NEW

Page 126: Advanced Testing and Continuous Integration

When it’s not your faultUpgrade Integrations

Re-integrates your projectSame revision as the last integration

NEW

Page 127: Advanced Testing and Continuous Integration

When it’s not your faultUpgrade Integrations

Re-integrates your projectSame revision as the last integrationAny new issues are due to the upgrade

NEW

Page 128: Advanced Testing and Continuous Integration

When it’s not your faultUpgrade Integrations

Re-integrates your projectSame revision as the last integrationAny new issues are due to the upgradePrevents blaming you for broken builds

NEW

Page 129: Advanced Testing and Continuous Integration

Configurable Integration User

Page 130: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibility into your integrations

Page 131: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibility into your integrationsAllows customization

Page 132: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations run

Page 133: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the system

Page 134: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 135: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 136: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

••••••••••••••••••••••••••••••

Page 137: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 138: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 139: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 140: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 141: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 142: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 143: Advanced Testing and Continuous Integration
Page 144: Advanced Testing and Continuous Integration

Custom Integration User

Improved visibility into your integrationsAllows customizationYou own and manage how your integrations runCan be any user on the systemRuns as a menu extra

Page 145: Advanced Testing and Continuous Integration

DemoXcode Server

Page 146: Advanced Testing and Continuous Integration

Configurable Integration User

Page 147: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibility

Page 148: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibilityCustomized simulators

Page 149: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibilityCustomized simulatorsNormal macOS user

Page 150: Advanced Testing and Continuous Integration

Configurable Integration User

Improved visibilityCustomized simulatorsNormal macOS userRuns as a menu extra

Page 151: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Page 152: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new user

Page 153: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accounts

Page 154: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User Switching

Page 155: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User SwitchingDisable screen lock

Page 156: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User SwitchingDisable screen lockCustomize for your needs

Page 157: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User SwitchingDisable screen lockCustomize for your needs• Simulators

Page 158: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User SwitchingDisable screen lockCustomize for your needs• Simulators• Networking (VPN and proxies)

Page 159: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User SwitchingDisable screen lockCustomize for your needs• Simulators• Networking (VPN and proxies)• User data and settings

Page 160: Advanced Testing and Continuous Integration

Best practicesConfigurable Integration User

Dedicate a new userAvoid using administrator accountsStay logged in with Fast User SwitchingDisable screen lockCustomize for your needs• Simulators• Networking (VPN and proxies)• User data and settings• Advanced provisioning

Page 161: Advanced Testing and Continuous Integration

Building block for Continuous Integration Systemsxcodebuild

Page 162: Advanced Testing and Continuous Integration

Test actionxcodebuild

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

Page 163: Advanced Testing and Continuous Integration

Test actionxcodebuild

Builds sources

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

Page 164: Advanced Testing and Continuous Integration

Test actionxcodebuild

Builds sourcesInstalls app on destination if needed

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

Page 165: Advanced Testing and Continuous Integration

Test actionxcodebuild

Builds sourcesInstalls app on destination if neededRuns tests

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

Page 166: Advanced Testing and Continuous Integration

Test actionxcodebuild

Builds sourcesInstalls app on destination if neededRuns testsReports results in console

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

Page 167: Advanced Testing and Continuous Integration

Customizing testsTest Options NEW

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

-only-testing:TestBundleA/TestSuiteA/TestCaseA

-only-testing:TestBundleB/TestSuiteB

-only-testing:TestBundleC

Page 168: Advanced Testing and Continuous Integration

Customizing testsTest Options NEW

xcodebuild test -workspace <path>

-scheme <name>

-destination <specifier>

-only-testing:TestBundleA/TestSuiteA/TestCaseA

-only-testing:TestBundleB/TestSuiteB

-only-testing:TestBundleC

xcodebuild test -scheme <name>

-skip-testing:TestBundleD/TestSuiteD/TestCaseD

Page 169: Advanced Testing and Continuous Integration

Separating building from testingAdditional Test Actions NEW

Test

Page 170: Advanced Testing and Continuous Integration

Separating building from testingAdditional Test Actions NEW

Build for Testing Test without Building

Page 171: Advanced Testing and Continuous Integration

Only buildingBuilding for Testing NEW

xcodebuild build-for-testing -workspace <path>

-scheme <name>

-destination <specifier>

Page 172: Advanced Testing and Continuous Integration

Builds sources for testing

Only buildingBuilding for Testing NEW

xcodebuild build-for-testing -workspace <path>

-scheme <name>

-destination <specifier>

Page 173: Advanced Testing and Continuous Integration

Builds sources for testingOutputs products in Derived Data

Only buildingBuilding for Testing NEW

xcodebuild build-for-testing -workspace <path>

-scheme <name>

-destination <specifier>

Page 174: Advanced Testing and Continuous Integration

Builds sources for testingOutputs products in Derived DataGenerates an xctestrun file

Only buildingBuilding for Testing NEW

xcodebuild build-for-testing -workspace <path>

-scheme <name>

-destination <specifier>

Page 175: Advanced Testing and Continuous Integration

Only testingTest Without Building NEW

xcodebuild test-without-building -workspace <path>

-scheme <name>

-destination <specifier>

Page 176: Advanced Testing and Continuous Integration

Only testingTest Without Building

Finds binary products in Derived Data

NEW

xcodebuild test-without-building -workspace <path>

-scheme <name>

-destination <specifier>

Page 177: Advanced Testing and Continuous Integration

Only testingTest Without Building

Finds binary products in Derived DataInstalls if necessary

NEW

xcodebuild test-without-building -workspace <path>

-scheme <name>

-destination <specifier>

Page 178: Advanced Testing and Continuous Integration

Only testingTest Without Building

Finds binary products in Derived DataInstalls if necessaryRuns tests and report results as before

NEW

xcodebuild test-without-building -workspace <path>

-scheme <name>

-destination <specifier>

Page 179: Advanced Testing and Continuous Integration

Only testingTest Without Building NEW

xcodebuild test-without-building -xctestrun <path>

-destination <specifier>

Page 180: Advanced Testing and Continuous Integration

Only testingTest Without Building

Ingests the xctestrun file

NEW

xcodebuild test-without-building -xctestrun <path>

-destination <specifier>

Page 181: Advanced Testing and Continuous Integration

Only testingTest Without Building

Ingests the xctestrun fileFinds binary products relative to xctestrun file

NEW

xcodebuild test-without-building -xctestrun <path>

-destination <specifier>

Page 182: Advanced Testing and Continuous Integration

Only testingTest Without Building

Ingests the xctestrun fileFinds binary products relative to xctestrun fileRuns tests, reports results as before

NEW

xcodebuild test-without-building -xctestrun <path>

-destination <specifier>

Page 183: Advanced Testing and Continuous Integration

Distributed testingxcodebuild

Build Machine Test Machine #2

Test Machine #1

Page 184: Advanced Testing and Continuous Integration

Distributed testingxcodebuild

Build Machine Test Machine #2

Test Machine #1

Page 185: Advanced Testing and Continuous Integration

Distributed testingxcodebuild

Build Machine Test Machine #2

Test Machine #1

xcodebuild build-for-testing

Page 186: Advanced Testing and Continuous Integration

Distributed testingxcodebuild

Build Machine Test Machine #2

Test Machine #1

xcodebuild build-for-testing

Page 187: Advanced Testing and Continuous Integration

xcodebuild test-without-building

Distributed testingxcodebuild

Build Machine Test Machine #2

Test Machine #1

xcodebuild build-for-testing

Page 188: Advanced Testing and Continuous Integration

xcodebuild test-without-building

xcodebuild test-without-building

Distributed testingxcodebuild

Build Machine Test Machine #2

Test Machine #1

xcodebuild build-for-testing

Page 189: Advanced Testing and Continuous Integration

Test manifestxctestrun NEW

Page 190: Advanced Testing and Continuous Integration

Test manifestxctestrun NEW

Page 191: Advanced Testing and Continuous Integration

Test manifestxctestrun

Tests to run or skip

NEW

Page 192: Advanced Testing and Continuous Integration

Test manifestxctestrun

Tests to run or skipEnvironment variables

NEW

Page 193: Advanced Testing and Continuous Integration

Test manifestxctestrun

Tests to run or skipEnvironment variablesCommand-line arguments

NEW

Page 194: Advanced Testing and Continuous Integration

Test manifestxctestrun

Tests to run or skipEnvironment variablesCommand-line argumentsDocumentation in man pages

NEW

Page 195: Advanced Testing and Continuous Integration

Test manifestxctestrun

Tests to run or skipEnvironment variablesCommand-line argumentsDocumentation in man pagesman xcodebuild.xctestrun

NEW

Page 196: Advanced Testing and Continuous Integration

Summary

Page 197: Advanced Testing and Continuous Integration
Page 198: Advanced Testing and Continuous Integration

Summary

Testing Concepts

Xcode• Crash Log Gathering

Xcode Server• Advanced Triggers• Issue Tracking and Blame• Configurable Integration User

xcodebuild

Page 199: Advanced Testing and Continuous Integration
Page 200: Advanced Testing and Continuous Integration
Page 201: Advanced Testing and Continuous Integration

More Information

https://developer.apple.com/wwdc16/409

Page 202: Advanced Testing and Continuous Integration

Labs

Xcode Open Hours Developer Tools Lab C Thursday 9:00AM

Xcode Open Hours Developer Tools Lab B Friday 9:00AM

Page 203: Advanced Testing and Continuous Integration