システムテスト自動化カンファレンス2017-2 一般公演A 16:00 〜の部
TypeScriptとPhantomJSを利用したテスト自動化について、弊社(アスタミューゼ株式会社)が運用している348サイトを対象にした登録試験自動化の事例を元に説明いたします。
5ZQF4DSJQU 1IBOUPN+4Λར༻ͨ͠ޮతͳςετ࣮ࢪΞελϛϡʔθגࣜձࣾ։ൃɾΠϯϑϥ෦ ྒ
View Slide
ࣗݾհ໊લ ྒʢʹ͔͠Θ Γΐ͏ʣۈઌͳͲ Ξελϛϡʔθגࣜձࣾ։ൃɾΠϯϑϥ෦झຯ ञɺ৯͏ɺ৸ΔɺΔಓՈ ࠺ͱଉࢠ
ࣗݾհٕज़ +BWBɺ4DBMBɺ1ZUIPOɺ#BTIɺ"OTJCMFɺ"TUBEɺ"QBDIFɺ.Z42-ɺ1PTUHSF42-ɺ;BCCJYɺ3BCCJU.2ɺ&MBTUJD4FBSDIɺ'MVFOUE FUD4BMFTGPSDFDPNɺ4ɺ3PVUFܦྺ ిΛੜۀͱ͢Δάϧʔϓձࣾʹ͍ͨަػͷࢼݧΛͨ͠Γۚ༥ͷγεςϜ࡞ͬͨΓݚڀॴͰٕज़ݕূͨ͠ΓηΩϡϦςΟͷ։ൃͬͨΓɾɾɾ
ࣗݾհٕज़ +BWBɺ4DBMBɺ1ZUIPOɺ#BTIɺ"OTJCMFɺ"TUBEɺ"QBDIFɺ.Z42-ɺ1PTUHSF42-ɺ;BCCJYɺ3BCCJU.2ɺ&MBTUJD4FBSDIɺ'MVFOUE FUD4BMFTGPSDFDPNɺ4ɺ3PVUFܦྺ ిΛੜۀͱ͢Δάϧʔϓձࣾʹ͍ͨަػͷࢼݧΛͨ͠Γۚ༥ͷγεςϜ࡞ͬͨΓݚڀॴͰٕज़ݕূͨ͠ΓηΩϡϦςΟͷ։ൃͬͨΓɾɾɾ൧Λ৯͏ͨΊʹԿͰͨ͠ʂ
ͦͨ͠Βମॏ̓̔LHʹʂࣗݾհ
ࣾձਓʹͳͬͯ̍̏LH૿͑ͨʂࣗݾհ
ࣗݾհʮϩΧϘʯ࢝Ί·ͨ͠ʂ
ϩΧϘʁ• ࣭ʢϩʔΧʔϘʣμΠΤοτ• ʮϘΧϩʯͰ͋Γ·ͤΜʮϩΧϘʯͰ͢ʂ• ݫີʹʮϩʔΧʔϘʯͱҧ͏Β͍͠Ͱ͢ҰͰ̏LH૫ͤͨʂ
ࣗݾհࠓೖࣾ͠·ͨ͠ʂ
Ξελϛϡʔθגࣜձࣾͷ
స৬φϏͱ͍͏αʔϏεʹैࣄ
స৬φϏͷస৬φϏΛ͝ଘͰ͔͢ʁ
స৬φϏͷ
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ αΠτ͕ଘࡏ
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ αΠτ͕ଘࡏ ొͨ͠Ϣʔβͷస৬Λαϙʔτʂ
స৬φϏͷ ༷ʑͳۀքɾٕज़ʹಛԽͨ͠స৬αΠτ αΠτ͕ଘࡏ ొͨ͠Ϣʔβͷస৬Λαϙʔτʂస৬Λߟ͑ͨΒੋඇʂ
స৬φϏͷςετͷ
స৬φϏͷςετͷస৬φϏͷ։ൃ• νʔϜ̒ਓ• ෦• σβΠφ ̍ਓ• ϑϩϯτΤϯδχΞ ̍ਓ• 4DBMBΤϯδχΞ ̏ਓ• ि̍ʙ̏ճϖʔεͷϦϦʔε
స৬φϏͷςετͷ։ൃॳ• αΠτ গͳΊ• ػೳ গͳΊ• 1$αΠτ͔͠ͳ͍खಈͰࢼݧ
αΠτͷϞόΠϧରԠαΠτػೳগͳ͍͠·ͩखಈͰ͍͚ͦ͏ʂస৬φϏͷςετͷ
ొϑΥʔϜվम·͍͚ͩΔʂ·͍͚ͩΔʂస৬φϏͷςετͷ
ొϑΥʔϜվम͍͚ͳ͔ͬͨʂస৬φϏͷςετͷ
ొϑΥʔϜվमϞόΠϧαΠτͰϢʔβొ͕Ͱ͖ͯͳ͔ͬͨస৬φϏͷςετͷ
ొϑΥʔϜվमϞόΠϧαΠτͰϢʔβొ͕Ͱ͖ͯͳ͔ͬͨస৬φϏͷςετͷϦϦʔεޙʹൃ֮
Կ͕͍͚ͳ͔ͬͨͷ͔ʁ• 1$ͱϞόΠϧͰొϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ࢼݧ࿙ΕͷݪҼస৬φϏͷςετͷ
ͲΕ͙Β͍ҧ͏ͷ͔ʁ
ͲΕ͙Β͍ҧ͏ͷ͔ʁϑΥʔϜͷܗঢ়ભҠͷ͕શ͘ҧ͏
Կ͕͍͚ͳ͔ͬͨͷ͔ʁ• 1$ͱϞόΠϧͰొϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ࢼݧ࿙ΕͷݪҼཁରࡦʂస৬φϏͷςετͷ
స৬φϏͷςετͷԿ͕͍͚ͳ͔ͬͨͷ͔ʁ• 1$ͱϞόΠϧͰొϑΥʔϜͷϑϩϯτͷ࡞Γ͕ҧ͏ ࢼݧ࿙ΕͷݪҼࣗಈςετಋೖ
స৬φϏͷςετͷείʔϓʁ• ࠷ݶͷϢʔβϏϦςΟ֬อϢʔβొॲཧ
స৬φϏͷςετͷͯ͞ɺԿͰ࡞Ζ͏ʁ1IBOUPN+4
1IBOUPN+4ͱԿ͔• 8FCςετΛ͢ΔͨΊͷπʔϧ• ྨࣅπʔϧ• 4FMFOJVN• ςετέʔε+BWB4DSJQUͰهࡌ͢Δ $BTQFS+4ͱ͍͏ϥούʔ͕͋Δ
ग़དྷ্͕ͬͨͷ$*αʔόHJUαʔόAPサーバᶃϦΫΤετᶄμϯϩʔυ ᶅςετ࣮ߦ
ग़དྷ্͕ͬͨͷ本番APサーバステージングAPサーバ$*αʔόHJUαʔό˞+FOLJOTΩοΫ ˞ఆظ࣮ߦ
స৬φϏͷςετͷࣗಈςετΛೖΕͯΈͯ• Ϣʔβొॲཧͷ্࣭͕͕ͬͨ• ࢼݧ4MBDL͔Β࣮ߦͰ͖ΔͷͰ୭ͰࢼݧͰ͖ΔΑ͏ʹͳͬͨ• োൃੜ࣌ʹ࠷ݶͷαʔϏεੜଘ֬ೝ͕Ͱ͖ΔΑ͏ʹͳͬͨ• ొϑΥʔϜͷোʹૣ͘ؾͮ͘Α͏ʹͳͬͨ
స৬φϏͷςετͷࣗಈςετΛೖΕͯΈͯ• Ϣʔβొॲཧͷ্࣭͕͕ͬͨ• োൃੜ࣌ʹ࠷ݶͷαʔϏεੜଘ֬ೝ͕Ͱ͖ΔΑ͏ʹͳͬͨ• ొϑΥʔϜͷোʹૣ͘ؾͮ͘Α͏ʹͳͬͨ• ࢼݧ4MBDL͔Β࣮ߦͰ͖ΔͷͰ୭ͰࢼݧͰ͖ΔΑ͏ʹͳͬͨҰ݅མணʂ
ͨ͠Α͏ʹࢥ͚͑ͨͲɾɾɾస৬φϏͷςετͷ
• ొϑΥʔϜ·Ͱͷܦ࿏ʢண࣌ͷύϥϝʔλόϦΤʔγϣϯʣ͕૿Ճ• αʔϏε֦ॆʹΑΔొόϦΤʔγϣϯʢࣅͯඇͳΔϑΥʔϜʣͷ૿Ճ• αΠτʢҰؾʹ̐̌̌ۙ͘·Ͱʣ૿ՃςετίʔυΛߏԽ͍ͯ͠ͳ͔ͬͨͨΊϝϯςφϯείετ૿Ճస৬φϏͷςετͷ
͜͠ͷ··์ஔͨ͠Βɾɾɾ• ςετͷϝϯςφϯε͕͍͔ͭͳ͘ͳΔ• ఆతʹखಈͷςετ͕૿͑Δస৬φϏͷςετͷ
͜͠ͷ··์ஔͨ͠Βɾɾɾ• ςετͷϝϯςφϯε͕͍͔ͭͳ͘ͳΔ• ఆతʹखಈͷςετ͕૿͑Δ։ൃපΉ͚Ͳ࠷ऴ֬ೝ͍ͯ͠Δ෦࣮֬ʹࢮ͵స৬φϏͷςετͷ
͞Βʹస৬φϏͷςετͷ
৽ϝϯόʔೖࣾγεςϜΛཧղͰ͖͍ͯͳ͍ͷͰόάΛΑ͘ຒΊࠐΉͪΖΜ+BWB4DSJQUͳΜ͔ͯΒͳ͍ͷͰϝϯςͰ͖ͳ͍า͘ώϡʔϚϯΤϥʔʹରͯ͠߄ͯΔ։ൃνʔϜస৬φϏͷςετͷ
৭ʑͱݶքʹͳΓςετΛݟ͢͜ͱʹʂస৬φϏͷςετͷ
స৬φϏͷςετͷ؍• طଘͷίʔυΛར༻ʢ։ൃͷϦιʔε͕ݶΒΕ͍ͯΔͨΊʣ• ϝϯςφϯείετΛ͑Δ• ςετίʔυͷߏԽ• ՄಡੑΛ্͛Δ• ୭ͰϝϯςͰ͖ΔΑ͏ʹ͢Δ• +BWB4DSJQUʹෆ׳ΕͳਓͰͰ͖Δ
స৬φϏͷςετͷ؍• طଘͷίʔυΛར༻ʢ։ൃͷϦιʔε͕ݶΒΕ͍ͯΔͨΊʣ• ϝϯςφϯείετΛ͑Δ• ςετίʔυͷߏԽ• ՄಡੑΛ্͛Δ• ୭ͰϝϯςͰ͖ΔΑ͏ʹ͢Δ• 4DSJQUݴޠʹෆ׳ΕͳਓͰͰ͖Δ5ZQF4DSJQUʹܾఆʂ
5ZQF4DSJQUͷ• +BWB4DSJQUΛੜ• ੩తܕ͚ݴޠ• .JDSPTPGU͕։ൃ• Φʔϓϯιʔε• +BWB4DSJQUͰॻ͚Δ
5ZQF4DSJQUͷ• +BWB4DSJQU͕Ͱ͖Δ͜ͱʹՃ͑ҎԼ͕Ͱ͖Δ• ΠϯλʔϑΣʔε• ྻڍܕͷར༻• λϓϧܕͷར༻• .JYJO• δΣωϦοΫ FUD
5ZQF4DSJQUʹΑͬͯͨΒ͞Εͨͷొςετͷج൫ͱͳΔநΫϥεొϑΥʔϜͷܦ࿏ ・・・+BWB4DSJQUίʔυ5ZQF4DSJQUίʔυొϑΥʔϜͷܦ࿏
స৬φϏͷςετͷ͜ΕʹΑΓ• طଘͷίʔυΛར༻Ͱ͖͍ͯΔ• ίʔυͷՄಡੑ্͕͕ͬͨ• Ճ࣮ɺվमָ͕ʹͳͬͨʂ• 4DBMBΤϯδχΞͰ࣮Ͱ͖ΔΑ͏ʹͳͬͨʂ• ԿΑΓɺ͕ϝϯςͰ͖Δʂ
స৬φϏͷςετͷ͞Βʹʂ• େͷΤϥʔίϯύΠϧ࣌ʹݕग़͍͍࣮ͪͪߦ͠ͳͯ͘Τϥʔ͕ݕग़Ͱ͖ΔͷͰੜ࢈ੑ্͕ͨ͠
ग़དྷ্͕ͬͨͷʢ#FGPSFʣ$*αʔόHJUαʔόAPサーバᶃϦΫΤετᶄμϯϩʔυ ᶅςετ࣮ߦ
ग़དྷ্͕ͬͨͷʢ"GUFSʣ$*αʔόHJUαʔόAPサーバᶃϦΫΤετᶄμϯϩʔυ ᶆςετ࣮ߦᶅίϯύΠϧ
αΠτ͝ͱʹొϑΥʔϜΛग़͚ͯ͠ʂͦͷޙʙ ͦͷ̍ ʙ
ࢼݧɺ̐̌̌αΠτ͋ΔͰ͕͢ɾɾɾࠓ·ͰͳΒ
ࢼݧɺ̐̌̌αΠτ͋ΔͰ͕͢ɾɾɾࠓ·ͰͳΒࢮ
ͰɺࠓͳΒͳΜͱ͔͑ΒΕΔ
ొϑΥʔϜʹසൟʹվमೖΕΔΑʂͦͷޙʙ ͦͷ̎ ʙ
Ճͨ͠ػೳ͕ͪΌΜͱಈ͔͘ʁొϑΥʔϜͷग़͚͠Ͱ͖͍ͯΔ͔ʁࠓ·ͰͳΒ
Ճͨ͠ػೳ͕ͪΌΜͱಈ͔͘ʁొϑΥʔϜͷग़͚͠Ͱ͖͍ͯΔ͔ʁࠓ·ͰͳΒࢮ
ͦͯ͠ԿΑΓ෦͕ੜ͖ͯΔʂ
5ZQF4DSJQUͷޮՌファイル数 ステップ総数 1ファイルあたりの平均ステップ数PhantomJS 22 4678 212TypeScript 25 2682 107ஔ͖͑ޙͷεςοϓൺֱファイル数 ステップ総数 1ファイルあたりの平均ステップ数TypeScript 30 7910 263αΠτ͝ͱͷొϑΥʔϜग़͚͠ద༻ޙͷεςοϓ
5ZQF4DSJQUʹΑͬͯͨΒ͞Εͨͷファイル数 ステップ総数 1ファイルあたりの平均ステップ数PhantomJS 22 4678 212TypeScript 25 2682 107ஔ͖͑ޙͷεςοϓൺֱファイル数 ステップ総数 1ファイルあたりの平均ステップ数TypeScript 30 7910 263αΠτ͝ͱͷొϑΥʔϜग़͚͠ద༻ޙͷεςοϓ͍͍ײ͡
ܾͯ͠ɺ͍͍͜ͱ͔ΓͰͳ͍• ࣮࣌• +BWB4DSJQU͕Τϥʔͳ͘ੜ͞Εͯɺ1IBOUPN+4͕ಈ͘Θ͚Ͱͳ͍• શମ• 1IBOUPN+4ͷ։ൃ͕ࢭ·͍ͬͯΔ5ZQF4DSJQU 1IBOUPNF+4ͷσϝϦοτ
ࠓޙͷ՝• 4FMFOJVN͘͠)FBEMFTT$ISPNFͷಋೖͱஔ͖͑• ࣗಈςετͷ֦ॆ• ొϑΥʔϜҎ֎ͷػೳ
ฐࣾͰҰॹʹಇ͖·ͤΜ͔ʁΤϯδχΞɾσβΠφ࠾༻αΠτIUUQSFDSVJUBTUBNVTFDPKQBTUBNVTF -BCʢ։ൃϒϩάʣIUUQMBCBTUBNVTFDPKQ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠