Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TypeScript + PhantomJSを利用した効率的なテスト実施

Ryo Nishikawa
December 13, 2017

TypeScript + PhantomJSを利用した効率的なテスト実施

システムテスト自動化カンファレンス2017-2
一般公演A 16:00 〜の部

TypeScriptとPhantomJSを利用したテスト自動化について、弊社(アスタミューゼ株式会社)が運用している348サイトを対象にした登録試験自動化の事例を元に説明いたします。

Ryo Nishikawa

December 13, 2017
Tweet

Other Decks in Technology

Transcript

  1. 5ZQF4DSJQU 1IBOUPN+4Λར༻ͨ͠ ޮ཰తͳςετ࣮ࢪ Ξελϛϡʔθגࣜձࣾ ։ൃɾΠϯϑϥ෦ ੢઒ ྒ

  2. ࣗݾ঺հ ໊લ ੢઒ ྒʢʹ͔͠Θ Γΐ͏ʣ ۈ຿ઌͳͲ Ξελϛϡʔθגࣜձࣾ ։ൃɾΠϯϑϥ෦ झຯ ञɺ৯͏ɺ৸Δɺ૸Δ

    ݋ಓ Ո଒ ࠺ͱଉࢠ
  3. ࣗݾ঺հ ٕज़ +BWBɺ4DBMBɺ1ZUIPOɺ#BTIɺ "OTJCMFɺ"TUBEɺ "QBDIFɺ.Z42-ɺ1PTUHSF42-ɺ ;BCCJYɺ3BCCJU.2ɺ&MBTUJD4FBSDIɺ'MVFOUE FUD 4BMFTGPSDFDPNɺ4ɺ3PVUF ܦྺ ి࿩Λੜۀͱ͢Δ๭άϧʔϓձࣾʹ͍ͨ

    ަ׵ػͷࢼݧΛͨ͠Γ ۚ༥ͷγεςϜ࡞ͬͨΓ ݚڀॴͰٕज़ݕূͨ͠Γ ηΩϡϦςΟ੡඼ͷ։ൃ΍ͬͨΓ ɾɾɾ
  4. ࣗݾ঺հ ٕज़ +BWBɺ4DBMBɺ1ZUIPOɺ#BTIɺ "OTJCMFɺ"TUBEɺ "QBDIFɺ.Z42-ɺ1PTUHSF42-ɺ ;BCCJYɺ3BCCJU.2ɺ&MBTUJD4FBSDIɺ'MVFOUE FUD 4BMFTGPSDFDPNɺ4ɺ3PVUF ܦྺ ి࿩Λੜۀͱ͢Δ๭άϧʔϓձࣾʹ͍ͨ

    ަ׵ػͷࢼݧΛͨ͠Γ ۚ༥ͷγεςϜ࡞ͬͨΓ ݚڀॴͰٕज़ݕূͨ͠Γ ηΩϡϦςΟ੡඼ͷ։ൃ΍ͬͨΓ ɾɾɾ ൧Λ৯͏ͨΊʹԿͰ΋ͨ͠ʂ
  5. ͦͨ͠Βମॏ̓̔LHʹʂ ࣗݾ঺հ

  6. ࣾձਓʹͳͬͯ̍̏LH૿͑ͨʂ ࣗݾ঺հ

  7. ࣗݾ঺հ ʮϩΧϘʯ࢝Ί·ͨ͠ʂ

  8. ϩΧϘʁ • ௿౶࣭ʢϩʔΧʔϘʣμΠΤοτ • ʮϘΧϩʯͰ͸͋Γ·ͤΜʮϩΧϘʯͰ͢ʂ • ݫີʹ͸ʮϩʔΧʔϘʯͱ͸ҧ͏Β͍͠Ͱ͢ Ұ೥Ͱ̏LH૫ͤͨʂ

  9. ࣗݾ঺հ ࠓ೥ೖࣾ͠·ͨ͠ʂ

  10. Ξελϛϡʔθגࣜձࣾͷ࿩

  11. None
  12. None
  13. None
  14. None
  15. None
  16. స৬φϏͱ͍͏αʔϏεʹैࣄ

  17. స৬φϏͷ࿩ స৬φϏΛ͝ଘ஌Ͱ͔͢ʁ

  18. స৬φϏͷ࿩

  19. స৬φϏͷ࿩ ὎ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ

  20. స৬φϏͷ࿩ ὎ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ ὎ ໿αΠτ͕ଘࡏ

  21. స৬φϏͷ࿩ ὎ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ ὎ ໿αΠτ͕ଘࡏ ὎ ొ࿥ͨ͠Ϣʔβͷస৬Λαϙʔτʂ

  22. స৬φϏͷ࿩ ὎ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ ὎ ໿αΠτ͕ଘࡏ ὎ ొ࿥ͨ͠Ϣʔβͷస৬Λαϙʔτʂ స৬Λߟ͑ͨΒੋඇʂ

  23. స৬φϏͷςετͷ࿩

  24. స৬φϏͷςετͷ࿩ స৬φϏͷ։ൃ͸ • νʔϜ͸̒ਓ • ෦௕ • σβΠφ ̍ਓ •

    ϑϩϯτΤϯδχΞ ̍ਓ • 4DBMBΤϯδχΞ ̏ਓ • ि̍ʙ̏ճϖʔεͷϦϦʔε
  25. స৬φϏͷςετͷ࿩ ։ൃ౰ॳ • αΠτ਺ ὎গͳΊ • ػೳ ὎গͳΊ • 1$αΠτ͔͠ͳ͍

    खಈͰࢼݧ
  26. αΠτͷϞόΠϧରԠ αΠτ਺΋ػೳ΋গͳ͍͠ ·ͩखಈͰ͍͚ͦ͏ʂ స৬φϏͷςετͷ࿩

  27. ొ࿥ϑΥʔϜվम ·͍͚ͩΔʂ·͍͚ͩΔʂ స৬φϏͷςετͷ࿩

  28. ొ࿥ϑΥʔϜվम ͍͚ͳ͔ͬͨʂ స৬φϏͷςετͷ࿩

  29. ొ࿥ϑΥʔϜվम ϞόΠϧαΠτͰ Ϣʔβొ࿥͕Ͱ͖ͯͳ͔ͬͨ స৬φϏͷςετͷ࿩

  30. ొ࿥ϑΥʔϜվम ϞόΠϧαΠτͰ Ϣʔβొ࿥͕Ͱ͖ͯͳ͔ͬͨ స৬φϏͷςετͷ࿩ ϦϦʔεޙʹൃ֮

  31. Կ͕͍͚ͳ͔ͬͨͷ͔ʁ • 1$ͱϞόΠϧͰొ࿥ϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ὎ ࢼݧ࿙ΕͷݪҼ స৬φϏͷςετͷ࿩

  32. ͲΕ͙Β͍ҧ͏ͷ͔ʁ

  33. ͲΕ͙Β͍ҧ͏ͷ͔ʁ ϑΥʔϜͷܗঢ়΍ ભҠͷ਺͕શ͘ҧ͏

  34. Կ͕͍͚ͳ͔ͬͨͷ͔ʁ • 1$ͱϞόΠϧͰొ࿥ϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ὎ ࢼݧ࿙ΕͷݪҼ ཁରࡦʂ స৬φϏͷςετͷ࿩

  35. స৬φϏͷςετͷ࿩ Կ͕͍͚ͳ͔ͬͨͷ͔ʁ • 1$ͱϞόΠϧͰొ࿥ϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ὎ ࢼݧ࿙ΕͷݪҼ ࣗಈςετಋೖ

  36. స৬φϏͷςετͷ࿩ είʔϓ͸ʁ • ࠷௿ݶͷϢʔβϏϦςΟ֬อ Ϣʔβొ࿥ॲཧ

  37. స৬φϏͷςετͷ࿩ ͯ͞ɺԿͰ࡞Ζ͏ʁ 1IBOUPN+4

  38. 1IBOUPN+4ͱ͸Կ͔ • 8FCςετΛ͢ΔͨΊͷπʔϧ • ྨࣅπʔϧ • 4FMFOJVN • ςετέʔε͸+BWB4DSJQUͰهࡌ͢Δ ὎

    $BTQFS+4ͱ͍͏ϥούʔ͕͋Δ
  39. ग़དྷ্͕ͬͨ΋ͷ $*αʔό HJUαʔό APサーバ ᶃϦΫΤετ ᶄμ΢ϯϩʔυ ᶅςετ࣮ߦ

  40. ग़དྷ্͕ͬͨ΋ͷ 本番 APサーバ ステージング APサーバ $*αʔό HJUαʔό ˞ +FOLJOTΩοΫ ˞

    ఆظ࣮ߦ
  41. స৬φϏͷςετͷ࿩ ࣗಈςετΛೖΕͯΈͯ • Ϣʔβొ࿥ॲཧͷ඼্࣭͕͕ͬͨ • ࢼݧ͸4MBDL͔Β࣮ߦͰ͖ΔͷͰ୭Ͱ΋ࢼݧͰ͖ΔΑ͏ʹͳͬͨ • ো֐ൃੜ࣌ʹ࠷௿ݶͷαʔϏεੜଘ֬ೝ͕Ͱ͖ΔΑ͏ʹͳͬͨ • ొ࿥ϑΥʔϜͷো֐ʹૣ͘ؾͮ͘Α͏ʹͳͬͨ

  42. స৬φϏͷςετͷ࿩ ࣗಈςετΛೖΕͯΈͯ • Ϣʔβొ࿥ॲཧͷ඼্࣭͕͕ͬͨ • ো֐ൃੜ࣌ʹ࠷௿ݶͷαʔϏεੜଘ֬ೝ͕Ͱ͖ΔΑ͏ʹͳͬͨ • ొ࿥ϑΥʔϜͷো֐ʹૣ͘ؾͮ͘Α͏ʹͳͬͨ • ࢼݧ͸4MBDL͔Β࣮ߦͰ͖ΔͷͰ୭Ͱ΋ࢼݧͰ͖ΔΑ͏ʹͳͬͨ

    Ұ݅མணʂ
  43. ͨ͠Α͏ʹࢥ͚͑ͨͲɾɾɾ స৬φϏͷςετͷ࿩

  44. • ొ࿥ϑΥʔϜ·Ͱͷܦ࿏ʢண஍࣌ͷύϥϝʔλόϦΤʔγϣϯʣ͕૿Ճ • αʔϏε֦ॆʹΑΔొ࿥όϦΤʔγϣϯʢࣅͯඇͳΔϑΥʔϜʣͷ૿Ճ • αΠτ਺ʢҰؾʹ̐̌̌ۙ͘·Ͱʣ૿Ճ ςετίʔυΛߏ଄Խ͍ͯ͠ͳ͔ͬͨͨΊ ϝϯςφϯείετ૿Ճ స৬φϏͷςετͷ࿩

  45. ΋͜͠ͷ··์ஔͨ͠Βɾɾɾ • ςετͷϝϯςφϯε͕௥͍͔ͭͳ͘ͳΔ • ࢑ఆతʹखಈͷςετ͕૿͑Δ స৬φϏͷςετͷ࿩

  46. ΋͜͠ͷ··์ஔͨ͠Βɾɾɾ • ςετͷϝϯςφϯε͕௥͍͔ͭͳ͘ͳΔ • ࢑ఆతʹखಈͷςετ͕૿͑Δ ։ൃ΋පΉ͚Ͳ ࠷ऴ֬ೝ͍ͯ͠Δ෦௕͸࣮֬ʹࢮ͵ స৬φϏͷςετͷ࿩

  47. ͞Βʹ స৬φϏͷςετͷ࿩

  48. ৽ϝϯόʔೖࣾ γεςϜΛཧղͰ͖͍ͯͳ͍ͷͰόάΛΑ͘ຒΊࠐΉ ΋ͪΖΜ+BWB4DSJQUͳΜͯ෼͔Βͳ͍ͷͰϝϯςͰ͖ͳ͍ า͘ώϡʔϚϯΤϥʔʹରͯ͠ ߄ͯΔ։ൃνʔϜ స৬φϏͷςετͷ࿩

  49. స৬φϏͷςετͷ࿩

  50. ৭ʑͱݶքʹͳΓ ςετΛݟ௚͢͜ͱʹʂ స৬φϏͷςετͷ࿩

  51. స৬φϏͷςετͷ࿩ ؍఺ • طଘͷίʔυΛར༻ʢ։ൃͷϦιʔε͕ݶΒΕ͍ͯΔͨΊʣ • ϝϯςφϯείετΛ཈͑Δ • ςετίʔυͷߏ଄Խ • ՄಡੑΛ্͛Δ

    • ୭Ͱ΋ϝϯςͰ͖ΔΑ͏ʹ͢Δ • +BWB4DSJQUʹෆ׳ΕͳਓͰ΋Ͱ͖Δ
  52. స৬φϏͷςετͷ࿩ ؍఺ • طଘͷίʔυΛར༻ʢ։ൃͷϦιʔε͕ݶΒΕ͍ͯΔͨΊʣ • ϝϯςφϯείετΛ཈͑Δ • ςετίʔυͷߏ଄Խ • ՄಡੑΛ্͛Δ

    • ୭Ͱ΋ϝϯςͰ͖ΔΑ͏ʹ͢Δ • 4DSJQUݴޠʹෆ׳ΕͳਓͰ΋Ͱ͖Δ 5ZQF4DSJQUʹܾఆʂ
  53. 5ZQF4DSJQUͷ࿩ • +BWB4DSJQUΛੜ੒ • ੩తܕ෇͚ݴޠ • .JDSPTPGU͕։ൃ • Φʔϓϯιʔε •

    +BWB4DSJQUͰ΋ॻ͚Δ
  54. 5ZQF4DSJQUͷ࿩ • +BWB4DSJQU͕Ͱ͖Δ͜ͱʹՃ͑ҎԼ͕Ͱ͖Δ • ΠϯλʔϑΣʔε • ྻڍܕͷར༻ • λϓϧܕͷར༻ •

    .JYJO • δΣωϦοΫ FUD
  55. 5ZQF4DSJQUʹΑͬͯ΋ͨΒ͞Εͨ΋ͷ ొ࿥ςετͷج൫ͱͳΔ ந৅Ϋϥε ొ࿥ϑΥʔϜ΁ͷ ܦ࿏ ・・・ +BWB4DSJQU ίʔυ 5ZQF4DSJQU ίʔυ

    ొ࿥ϑΥʔϜ΁ͷ ܦ࿏
  56. స৬φϏͷςετͷ࿩ ͜ΕʹΑΓ • طଘͷίʔυΛར༻Ͱ͖͍ͯΔ • ίʔυͷՄಡੑ্͕͕ͬͨ • ௥Ճ࣮૷ɺվमָ͕ʹͳͬͨʂ • 4DBMBΤϯδχΞͰ΋࣮૷Ͱ͖ΔΑ͏ʹͳͬͨʂ

    • ԿΑΓɺ੢઒͕ϝϯςͰ͖Δʂ
  57. స৬φϏͷςετͷ࿩ ͞Βʹʂ • େ఍ͷΤϥʔ͸ίϯύΠϧ࣌ʹݕग़ ὎͍͍࣮ͪͪߦ͠ͳͯ͘΋Τϥʔ͕ݕग़Ͱ͖ΔͷͰੜ࢈ੑ͕޲্ͨ͠

  58. ग़དྷ্͕ͬͨ΋ͷʢ#FGPSFʣ $*αʔό HJUαʔό APサーバ ᶃϦΫΤετ ᶄμ΢ϯϩʔυ ᶅςετ࣮ߦ

  59. ग़དྷ্͕ͬͨ΋ͷʢ"GUFSʣ $*αʔό HJUαʔό APサーバ ᶃϦΫΤετ ᶄμ΢ϯϩʔυ ᶆςετ࣮ߦ ᶅίϯύΠϧ

  60. αΠτ͝ͱʹొ࿥ϑΥʔϜΛग़͠෼͚ͯʂ ͦͷޙʙ ͦͷ̍ ʙ

  61. ࢼݧɺ̐̌̌αΠτ෼͋ΔͰ͕͢ɾɾɾ ࠓ·ͰͳΒ

  62. ࢼݧɺ̐̌̌αΠτ෼͋ΔͰ͕͢ɾɾɾ ࠓ·ͰͳΒ ࢮ

  63. Ͱ΋ɺࠓͳΒ ͳΜͱ͔଱͑ΒΕΔ

  64. ొ࿥ϑΥʔϜʹසൟʹվमೖΕΔΑʂ ͦͷޙʙ ͦͷ̎ ʙ

  65. ௥Ճͨ͠ػೳ͕ͪΌΜͱಈ͔͘ʁ ొ࿥ϑΥʔϜͷग़͠෼͚͸Ͱ͖͍ͯΔ͔ʁ ࠓ·ͰͳΒ

  66. ௥Ճͨ͠ػೳ͕ͪΌΜͱಈ͔͘ʁ ొ࿥ϑΥʔϜͷग़͠෼͚͸Ͱ͖͍ͯΔ͔ʁ ࠓ·ͰͳΒ ࢮ

  67. Ͱ΋ɺࠓͳΒ ͳΜͱ͔଱͑ΒΕΔ

  68. ͦͯ͠ԿΑΓ΋ ෦௕͕ੜ͖ͯΔʂ

  69. 5ZQF4DSJQUͷޮՌ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 PhantomJS 22 4678 212 TypeScript 25

    2682 107 ஔ͖׵͑௚ޙͷεςοϓ਺ൺֱ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 TypeScript 30 7910 263 αΠτ͝ͱͷొ࿥ϑΥʔϜग़͠෼͚ద༻ޙͷεςοϓ਺
  70. 5ZQF4DSJQUʹΑͬͯ΋ͨΒ͞Εͨ΋ͷ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 PhantomJS 22 4678 212 TypeScript 25

    2682 107 ஔ͖׵͑௚ޙͷεςοϓ਺ൺֱ ファイル数 ステップ総数 1ファイルあたりの平均ステップ数 TypeScript 30 7910 263 αΠτ͝ͱͷొ࿥ϑΥʔϜग़͠෼͚ద༻ޙͷεςοϓ਺ ͍͍ײ͡
  71. ܾͯ͠ɺ͍͍͜ͱ͹͔ΓͰ͸ͳ͍ • ࣮૷࣌ • +BWB4DSJQU͕Τϥʔͳ͘ੜ੒͞Εͯ΋ɺ1IBOUPN+4͕ಈ͘Θ͚Ͱ͸ͳ͍ • શମ • 1IBOUPN+4ͷ։ൃ͕ࢭ·͍ͬͯΔ 5ZQF4DSJQU

    1IBOUPNF+4ͷσϝϦοτ
  72. ࠓޙͷ՝୊ • 4FMFOJVN΋͘͠͸)FBEMFTT$ISPNFͷಋೖͱஔ͖׵͑ • ࣗಈςετͷ֦ॆ • ొ࿥ϑΥʔϜҎ֎ͷػೳ

  73. ฐࣾͰҰॹʹಇ͖·ͤΜ͔ʁ ΤϯδχΞɾσβΠφ࠾༻αΠτ IUUQSFDSVJUBTUBNVTFDPKQ BTUBNVTF -BCʢ։ൃϒϩάʣ IUUQMBCBTUBNVTFDPKQ

  74. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠