Skip to content

Latest commit

ย 

History

History
118 lines (75 loc) ยท 4.6 KB

What-s-New-in-Testing.md

File metadata and controls

118 lines (75 loc) ยท 4.6 KB

What's New in Testing

Session 403

๐Ÿ”— What's New in Testing - WWDC 2018 - Videos - Apple Developer

Code coverage

  • Xcode 9.3
  • Performance and accuray ํ–ฅ์ƒ Xcode 9 ๋ณด๋‹ค 95% ๋นจ๋ผ์ง. File Size๋„ 10๋ฐฐ ๊ฐ์†Œ.
  • Target selection third-party dependencies, ์ด๋ฏธ ํ…Œ์ŠคํŠธ ๋œ framework๊ฐ€ ์žˆ์„ ๋•Œ ํƒ€๊ฒŸ ์กฐ์ ˆ ๊ฐ€๋Šฅ

  • xccov Command line tool, Human-readable, View coverage data

    Coverage data

    • Derived data์— ์กด์žฌ
    • xcodebuild -resultBundlePath ... flag๊ฐ€ ์žˆ๋‹ค๋ฉด Result Bundle์—๋„ ํฌํ•จ
  • Source editor

Test selection and ordering

Xcode10 New

  • Automatically include new test ํ…Œ์ŠคํŠธ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ํฌํ•จ ์‹œ์ผœ์คŒ
  • ์›๋ž˜ ํ…Œ์ŠคํŠธ ์ˆœ์„œ๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๊ฐ€ ๋””ํดํŠธ์ธ๋ฐ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค โ†’ Randomize execution order ์ฒดํฌ ํ•˜๋ฉด ๋žœ๋ค์œผ๋กœ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค

Parallel testing

Parallel Destination Testing

xcodebuild test
-destination โ€˜platform=iOS,name=iPhone Xโ€™ 
-destination โ€˜platform=iOS,name=iPadโ€™

Xcode9์—์„œ ์†Œ๊ฐœ๋œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ destination์—์„œ ๋Œ๋ฆฌ๋Š” ๊ธฐ๋Šฅ ๊ทธ ์ „์—๋Š” iPhone X์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ณ  ์ข…๋ฃŒ ํ•˜๋ฉด iPad๋ฅผ ํ•˜๋Š” ์‹. Xcode9์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์‹œ์— ์ง„ํ–‰ ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. ์‹คํ–‰ ์‹œ๊ฐ„์„ ๊ฐ์†Œ์‹œํ‚ด. ํ•˜์ง€๋งŒ ์ œ์•ฝ์ด ์žˆ์—ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ destination์—์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋งŒ ์œ ์ตํ•จ
  • xcodebuild์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ

Parallel Distributed Testing

  • ํ•˜๋‚˜์˜ destination์— ๋ณ‘๋ ฌ๋กœ ํ…Œ์ŠคํŠธ ์‹คํ–‰
  • xcodebuild, XCode์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Testing Architecture

Unit tests

  • Unit test๋Š” test bundle๋กœ ์ปดํŒŒ์ผ ๋œ๋‹ค
  • ๋Ÿฐํƒ€์ž„์—, Xcode๋Š” ํ…Œ์ŠคํŠธ runner๋กœ ์ทจ๊ธ‰๋˜๋Š” ์•ฑ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค
  • runner๋Š” test bundle์„ loadํ•˜๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค

UI Test

  • test bundle๋กœ ์ปดํŒŒ์ผ ๋œ๋‹ค
  • ํ•˜์ง€๋งŒ ์ด ๋ฒˆ๋“ค์€ Xcode๊ฐ€ ์ƒ์„ฑํ•˜๋Š” custom app์— ์˜ํ•ด load ๋œ๋‹ค
  • ์•ฑ์ด ๋”์ด์ƒ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ,
  • ํ…Œ์ŠคํŠธ๊ฐ€ ์•ฑ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ๋‹ค๋ฅธ UI ํŒŒํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋ฉด์„œ ์•ฑ์„ ์ž๋™ํ™”ํ•œ๋‹ค

Parallel Distributed Testing

  • ๊ทธ์ „์ฒ˜๋Ÿผ Xcode๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด test runner๋ฅผ ๋Ÿฐ์นญํ•œ๋‹ค
  • ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ test runner๋“ค์„ ์‹คํ–‰์‹œํ‚จ๋‹ค
  • ๊ฐ๊ฐ ํ…Œ์ŠคํŠธ subset์„ ์‹คํ–‰์‹œํ‚จ๋‹ค
  • ๊ธฐ๊ณ„๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด Xcode๋Š” test ruuner์—๊ฒŒ ๋™์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ๋ถ„๋ฐฐํ•œ๋‹ค
  • ๊ฐ๊ฐ์˜ runnere๋“ค์€ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฐฐ ๋ฐ›๋Š”๋‹ค
  • ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚œ๋‹ค

Classes Execute in Parallel

์™œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฐฐํ• ๊นŒ?

  • ํด๋ž˜์Šค์˜ ํ…Œ์ŠคํŠธ๋“ค ์‚ฌ์ด์˜ ์˜์กด์„ฑ์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด
  • ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—๋Š” ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ํด๋ž˜์Šค ๋ ˆ๋ฒจ์˜ setUp๊ณผ tearDown๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—. ํ•˜๋‚˜์˜ runner์— ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋กœ ์ œํ•œ ํ•จ์œผ๋กœ์จ XE test๋Š” ์ด ๋ฉ”์†Œ๋“œ๋“ค์„ ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ ํ•˜๋ฉด ๋œ๋‹ค.

Parallel Testing on Simulator

์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ Parellel Test๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, Xcode ๋Š” ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ cloneํ•œ๋‹ค. ์ด ๋ณต์‚ฌ๋ณธ๋“ค์€ ์›๋ณธ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

๊ทธ๋ฆฌ๊ณ  Xcode๋Š” ํ•„์š”ํ•˜๋‹ค๋ฉด ์ž๋™์œผ๋กœ ์ด ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ ํ•  ๊ฒƒ์ด๋‹ค.

์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋ช‡์ฐจ๋ก€ ๋ณต์‚ฌ ํ•œ ํ›„, Xcode๋Š” ๊ฐ๊ฐ์˜ ๋ณต์‚ฌ๋ณธ์—์„œ test runner๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ณ , runner๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

Implications

  • ์›๋ณธ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ํ…Œ์ŠคํŠธ ๋™์•ˆ์— ์‚ฌ์šฉ ๋˜์ง€ ์•Š๋Š”๋‹ค
  • ์•ฑ์˜ ๋ณต์‚ฌ๋ณธ์ด ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ณต์‚ฌ๋ณธ์€ ๊ณ ์œ ์˜ data container์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋””์Šคํฌ์—์„œ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ, ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ data container์— ์ ‘๊ทผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ ํŒŒ์ผ ์ˆ˜์ •์„ ๋ณผ ์ˆ˜ ์—†๋‹ค

Tips and Tricks

  • ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ํด๋ž˜์Šค๋ฅผ ๋‘ ํด๋ž˜์Šค๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ผ
  • parallelization์ด disabled๋œ ์ƒํƒœ์—์„œ, bundle์— ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ผ
  • ์–ด๋–ค ํ…Œ์ŠคํŠธ๋“ค์ด prallelization์— ์•ˆ์ „ํ•˜์ง€ ์•Š์€์ง€ ์ดํ•ดํ•˜๋ผ