TestPlanの使い道 #hakata_test_night /when_use_test_plan

249b3122eee454c0a818bfe7851418e4?s=47 fromkk
January 24, 2020

TestPlanの使い道 #hakata_test_night /when_use_test_plan

Test PlanはWWDC 2019で発表され、Xcode 11から追加されたテストに関する新たな機能です。
これまでは端末の状態や設定を変更してテストをしようとすると都度スキームの設定を変更する必要がありました。
そういった場合にCIなどで柔軟なテストを実行しようとするとxcodebuildコマンドで頑張る必要がありました。
例) `-testLanguage`や`-testRegion`オプション
Test Planを利用するとそういった設定を一つのJSONファイル(`.xctestplan`)に書いておき実行時にそれらをまとめて実行することができるようになりました。

この資料HAKATA Test Night #2( https://testnight.connpass.com/event/152296/ )にて発表してきた資料の公開版です。
YouTubeに動画版もあります。
https://youtu.be/z1Ez3LLpTDg

249b3122eee454c0a818bfe7851418e4?s=128

fromkk

January 24, 2020
Tweet

Transcript

  1. 5FTU1MBOͷ࢖͍ಓ )","5"5FTU/JHIU

  2. 1SPpMF struct Profile { let name = "Kazuya Ueoka" let

    twitter = "@fromkk" let github = "fromkk" let qiita = "fromkk" let company = "Timers Inc." } • 2
  3. 88%$Ͱൃද IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED

  4. #FGPSF5FTU1MBO w ؀ڥͷมߋʹऑ͔ͬͨ w $*্Ͱݴޠ΍஍ҬΛม͑ͯςετ͠Α͏ͱ͢Δͱ YDPEFCVJMEUFTUͷΦϓγϣϯΛઃఆ࣮ͯ͠ߦ͕ඞཁ w UFTU-BOHVBHF΍UFTU3FHJPOͰมߋ͍ͯͨ͠ 4

  5. "GUFS5FTU1MBO w ςετͷ؀ڥઃఆΛॊೈʹઃఆՄೳ w YDUFTUQMBOͱ͍͏+40/ϑΝΠϧͰෳ਺؀ڥΛઃఆ w ෳ਺ͷ؀ڥΛߏஙͯ͠Ұؾʹ࣮ߦՄೳ w ௨ৗ͸Ϣχοτςετ͚࣮ͩߦͯ͠ɺॏ͍6*ςετ͸ผͷ 5FTU1MBOʹ෼͚ͯ؅ཧͳͲ

    5
  6. 5FTU1MBOͷઃఆํ๏ 4DIFNFͷฤूը໘Ͱ5FTUΛબ୒

  7. ςετ͢Δλʔήοτͷ௥Ճ

  8. ςετͷλʔήοτΛબ୒

  9. $POpHVSBUJPOΛબ୒ w 4IBSFE4FUUJOHTͰॳ ظ஋Λઃఆ w $POpHVSBUJPOΛ௥ Ճ͢Δͱܧঝ͞ΕΔ w ࠨԼͷ Ϙλϯ͔Βߏ

    ੒Λ௥Ճɾ࡟আ͢Δ͜ ͱ͕Մೳ 9
  10. ઃఆ߲໨ w ςετͷ࣮ߦ࣌ͷઃఆΛมߋ ͢Δࣄ͕Մೳ Ҿ਺ɺ؀ڥม ਺ɺϩέʔϧ৘ใͳͲ  w ςετͷ࣮ߦॱং΍ίʔυΧ όϨοδʹؔ͢Δ߲໨΍Ϋ

    ϥογϡ࣌ʹऔಘ͢Δ৘ใͳ Ͳ΋
  11. ࣮ߦ w 㵰 6Ͱݱࡏબ୒தͷશͯͷςετϓϥϯ͕࣮ߦ͞ΕΔ w ෳ਺ͷ$POpHVSBUJPO͕ଘࡏ͢Δঢ়ଶͰςετ࣮ߦϘλϯΛӈ ΫϦοΫ͢Δͱ$POpHVSBUJPOΛબΜͰ࣮ߦՄೳ  w ίϚϯυϥΠϯ͔Β͸YDPEFCVJMEUFTUUFTU1MBO5FTU1MBO໊

  12. 13 ߋʹࡉ͔͍5FTU1MBOͷઃఆํ๏΋όονϦܝࡌʂ

  13. 5FTU1MBOͷ࢖͍ಓ

  14. 5FTU1MBOͷ࢖͍ಓ ຋༁͕ਖ਼͘͠ઃఆ͞Ε͍ͯΔ͔

  15. લఏ

  16. લఏ

  17. લఏ

  18. 5FTU1MBOʹ"NFSJDB ӳޠ Λ௥Ճͯ͠ΈΔ

  19. ςετ͕ίέ·ͨ͠

  20. ೔ຊޠ͚ͩςετ͢Δ৔߹ʹͨ·ͨ· ੒ޭ͢Δ͜ͱ͕͋Δ͔΋ʁ

  21. 5FTU1MBOͷ࢖͍ಓ Locale ͷະઃఆΛݟ͚ͭΔ

  22. ೔෇ͷ୯ҐΛมߋ͍ͨ͠ TU import Foundation struct DayConverter { static func convert(day:

    Int, for languageCode: String) -> String { if languageCode == "en" { let day = day let number = NSNumber(value: day) let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .ordinal return numberFormatter.string(from: number)! } else { return String(day) } } }
  23. લఏ

  24. 5FTUͯ͠ΈΔ 24

  25. 5FTU1MBOʹ೔ຊͷઃఆΛ௥Ճ

  26. ίέͨʁୈʁ

  27. मਖ਼ͯ͠ΈΔ import Foundation struct DayConverter { static func convert(day: Int,

    for locale: Locale) -> String { if locale.languageCode == "en" { let day = day let number = NSNumber(value: day) let numberFormatter = NumberFormatter() numberFormatter.locale = locale numberFormatter.numberStyle = .ordinal return numberFormatter.string(from: number)! } else { return String(day) } } }
  28. ແࣄςετ͕௨ͬͨ

  29. ϝϦοτʗσϝϦοτ w ϝϦοτ w ฐࣾͰ։ൃɾӡ༻͍ͯ͠ΔΞϓϦέʔγϣϯͷ'BNNͰ΋5FTU1MBOΛ׆༻ w ಋೖ͢ΔதͰͭෆ۩߹Λݟ͚ͭΔ͜ͱ͕Ͱ͖ͨ w σϝϦοτ w

    ςετͷ࣮ߦճ਺͕૿͑ΔͷͰ୯ʹςετʹ͔͔Δ͕࣌ؒ৳ͼͯ͠·͏ w ීஈ࢖͍͢Δ5FTU1MBOͱ$*্Ͱ࣮ߦ͢Δ5FTU1MBOΛ෼͚ΔͳͲͯ͠ӡ༻ Λઃܭ͢Δͷ͕Αͦ͞͏ 29
  30. ·ͱΊ w 5FTU1MBO͕ग़Δ·Ͱ͸؀ڥΛಈతʹมߋͯ͠ͷςετ͸ͱͯ΋ େม͕ͩͬͨͱͯ΋؆୯ʹγϛϡϨʔτग़དྷΔ༷ʹͳͬͨ w %*๨ΕͳͲ͕ؾ෇͖қ͘ͳͬͨͷͰ׆༻ͯ͠ΈΔͷ͸Φεεϝ w αϯϓϧίʔυҰԠ্͛ͯ·͢ IUUQTHJUIVCDPNGSPNLL5FTU1MBO%FNP)BLBUB5FTU/JHIU 30

  31. :PV5VCF https://youtu.be/z1Ez3LLpTDg

  32. 13 32

  33. • αʔόʔαΠυΤϯδχΞ (PHP, Golang, AWS) • AndroidΤϯδχΞ (Kotlin) • iOSΤϯδχΞ

    (Swift) TimersͰ͸ݱࡏΤϯδχΞશ৬छ࠾༻தʂ ৄ͘͠͸”Timers”Ͱݕࡧ 33
  34. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 34