
Playwright à Gaugeã§æãE2Eã®æ°å¢å° ã 瀟å ã®èªåE2Eãæé«ãªè©±
ããã«ã¡ã¯ãã¢ã«ãã§QAãšã³ãžãã¢ããã£ãŠããyokota(@katawara)ã§ãã
ã¢ã«ãã§ã¯QAãšã³ãžãã¢ã®åãæ¹ãšããŠ3ã€ã®ããŒã«ãããã以äžã®ããã«åé¡ãããŠããŸãã
ã»ãªãŒãQAãšã³ãžãã¢(L-QA) : çµç¹å šäœã®QAããã»ã¹ãæ¹åãã責åãæ ã
ã»ããŒã QAãšã³ãžãã¢(T-QA) : ãããã¯ãããŒã å ã®QAããã»ã¹ãæ¹åãã責åãæ ã
ã»ãªãŒãã¡ãŒã·ã§ã³QAãšã³ãžãã¢(A-QA) : ãããã¯ãããŒã ãè¡ã£ãŠãããã¹ããšã¯å¥è»žã®èªåãã¹ããäœæãæ ã
ãã®èšäºãæžããŠãã2024幎5æçŸåšã§ã¯ãäžäººã§ãããããªåžœåã䜿ãåããŠãããšãã£ãå¡©æ¢ ãªã®ã§ãããä»åã¯A-QAãšããŠã®åžœåããã¶ããE2Eãã¹ãïŒèªåãã¹ãïŒã®è©±ãããŠã¿ãããšæããŸãã
ã¢ã«ãã§ã®E2Eäºæ
ã¢ã«ãã§äœ¿ãããŠããE2Eã¯å€§ãã2ã€ãããŸãã
SaaSãšããŠæäŸãããŠããAutifyãšãããã°ã©ã ã§èªåã§æ§ç¯ããPlaywright & Gaugeããã®2ã€ã䜵çšããŠããŸãã
ããããã®ç¹æ§ãšãã¹ã察象ã®ç¹åŸŽãèžãŸããªãã䜿ãåããããŠãã圢ã§ããã
ä»åã¯åŸè ã®Playwright & Gaugeã®ã»ãã«ã¹ããããåœãŠãŸãã
瀟å€ã®æ¹ãšã話ããéãèªåãã¹ãã®æè¡ã¹ã¿ãã¯ã®èª¬æã¯ãAutifyãšPlaywrightã䜿ã£ãŠããŸããã«çããŠããŸãããšãå€ãã®ã§ãããå®ã¯åŸè
ã«ã€ããŠã¯ãããã«Gaugeãšãããã®ãçµã¿åãããŠããããããããªããŠããŒã¯ãªããæé«ã®çµã¿åãããªããããªãããšæã£ãŠããŸãã
ã¡ãã£ãšãã¯ãã«ã«ãªè©±ãå
¥ã£ãŠãããããããŸããããããã«ãã®çµã¿åãããçŽ æµãåžæããŠã¿ãããšæããŸãã
ãªãããã®èªåã®E2Eã¯ç€Ÿå ã§ã¯ "harness" ãšããã³ãŒãããŒã ã§åŒã°ããŠããŸãã以éã®èšäºã®äžã§ãã®åãåºãŠããããPlaywrightãšGaugeã䜿ã£ã瀟å ã®èªåE2Eã®ããšã ãšãçè§£ãã ããã
æè¡ã¹ã¿ãã¯ã®ç޹ä»
ãŸãã¯ç»å Žäººç©ããæŽçããŠãããŸãããã
Playwright
Microsoftãéçºãããã¹ãèªååãã¬ãŒã ã¯ãŒã¯ã§ããNode.js(TypeScript, JavaScript), Python, Java, .NETãããããµããŒãããŠããŸãã
ã¯ãã¹ãã©ãŠã¶ã»ã¯ãã¹ãã©ãããã©ãŒã ã«å¯Ÿå¿ããInspectorãTrace Viewerã§ã®å®è£
ãµããŒããæåããflakyãã¹ã察çãåããããå®è£
ãåãæããããŠããã®ãé
åçã§ãã
瀟å€ã®QAã®æ¹ãšäŒè©±ããéã«ãçµæ§ååãäžãã£ãŠããã®ã§ã䜿ã£ãŠãã人ãåŸã ã«å¢ããŠããŠããã®ã§ã¯ãªãã§ããããã
ã¢ã«ãã§ã¯ãæäŸããŠããScalebaseã®ããã³ããšã³ããReactã§ãããšããã¹ãã«ã®èŠªåæ§ãšãåãããã»ããäœããšäŸ¿å©ãšããããšã§TypeScriptãéžãã§ããŸãã
Gauge
ãªãŒãã³ãœãŒã¹ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ã§ããC#, Java, JavaScript, Python, Rubyãšãã£ããšãããå
¬åŒã§ãµããŒãããŠããŸããTypeScriptã«ã€ããŠããéå
¬åŒã®ããã§ã¯ãããŸããGaugeã®ã³ããã¿ãŒã®æ¹ãçšæããŠãã ãã£ãŠãããã®ã䜿ããŸãã
ãŸããVisual Studio Codeã§ããã°ãæ¡åŒµæ©èœãçšæããŠãããŠããŠãã¹ãããéã®ç§»åãè£å®ãåŒã³åºãå
ã®åç
§ãã·ããªãªã®å®è¡ãšãã£ãIDEã£ãœããµããŒããåŸãããšãã§ããŸãã
äœãšèšã£ãŠãããã®ç¹åŸŽã¯ãspec, cptãšãããã¡ã€ã«ã«Markdownã§ãã¹ããèšè¿°ãããã®è£åŽã®å®è£
ãäœããã®ããã°ã©ãã³ã°èšèªã§æžãããšãã§ãããšãããã®ã§ãã
Markdownã®ãªã¹ãäžè¡ãæäœã衚ãã¹ããããšãªãããã®ã¹ããããè£åŽã§å¥ã®èšèªã§å®è£
ãããã¿ãããªã€ã¡ãŒãžã§ãã
ãŸããè£åŽã®ã©ã€ãã©ãªãšããŠTaikoãšãããã®ã䜿ãããšãã§ããç°¡åã«æäœã衚çŸã§ããããã«ãªã£ãŠããŸãã
Playwright à Gauge = ?
ã¢ã«ãã§ã¯ããããŸã§ç޹ä»ããGaugeãšPlaywrightãçµã¿åãããŠäœ¿ã£ãŠããŸãããGaugeãããŒã¹ã«ããŠãè£åŽã§åãã©ã€ãã©ãªãšããŠTaikoã®ä»£ããã«Playwrightã䜿ãããšã«ããããšããã®ãæ£ç¢ºãªèª¬æã«ãªãã§ããããã
åœåTaikoãæ€èšã¯ããŠããŸãããPlaywrightã®ã»ãããããããšæè»ã«ã§ãããã ã£ãã®ã§ãã®çµã¿åããã«ãããšããèæ¯ããããŸãã
ãã®çµã¿åããã®çµæãšããŠãã¢ã«ãã®èªåE2Eã¯MarkdownãšTypeScriptã§å®è£ ãããŠããŸãã
ã€ãŸãã衚åŽã®ãã¹ãã¯Markdownã§æžãããšãã§ãã€ã€ãè£åŽã¯Playwrightã®æ©æµãåããªããããã°ã©ã ãšããŠæžãããšãã§ãããšãã£ã圢ã§ããã
ããªãããE2Eã®äžã§ãããã³ããšã³ããMarkdownãããã¯ãšã³ããTypeScriptããšããç¶æ
ãæç«ããŠãããšèšã£ãŠãããã®ã§ã¯ãªãã§ããããã
ãã€ãGaugeãšPlaywrightåæ¹ã䜿ã£ãŠããã®ã§ãGaugeãæäŸããã¬ããŒãã£ã³ã°æ©èœãå©çšãã€ã€ãPlaywrightãæäŸããInspectorãTrace Viewerã§ãããã°ãå®è£ ã®è£å©ãå©çšãããã¿ãããªããšãã§ããŸãããããªãã«ã³ãŒããæžãå¿ èŠã¯ãããŸãããã ãã¶äŸ¿å©ã«äœã蟌ãããšãã§ããŸãã

ãã¹ããã¬ãŒã ã¯ãŒã¯ã®æãç®ã«ããååŠåå¿
ãã®2ã€ã®çµã¿åããã«ããã3ã€ã®å¯èœæ§ãçãŸããŸãããé ã«ç޹ä»ããŸãã
1. E2Eãæžãã®ã«ãããã°ã©ã ãæžãã人ãšããã§ãªã人ã§åæ¥ã§ããå¯èœæ§
GaugeãšPlaywrightã®äœµçšã«ãããMarkdownãšTypeScriptã«åããããšãã§ããããã«ãªããŸãããããã¯ã€ãŸããèšèªãå¢çç·ã«äœæ¥åæ ãã§ããå¯èœæ§ã瀺åããŸããE2Eãèªåã§çšæããã«ããã£ãŠããã¹ãŠãã§ããäººãæ±ããªããŠããããšããã®ã¯æ¡çšé¢ã«ã奜圱é¿ãäžããã®ã§ã¯ãªãã§ããããã
Markdownã¯ãè¿é ã§ã¯NotionãConfluenceãšãã£ãããã¥ã¡ã³ãããŒã«ãnoteãQiitaãšãã£ãããã°æçš¿ã·ã¹ãã ã§ããµããŒããããŠãããããã°ã©ãã³ã°ã«éŠŽæã¿ãèã人ã§ãæžãããŒãã«ãäœããšæãããŸãã
TypeScriptã§èšãã°ãæäœå
容ã¯ã³ãŒãäžã«ã¢ãããŒã·ã§ã³ãã€ããã°å®è£
ã§ããã®ã§ããç¹å®ã®æååãã¯ãªãã¯ããããšãã£ãæ±çšæ§ã®é«ãã¹ããããçšæããã°ãããªãã®æäœãå®åçã«æžããããã«ãªããŸãã
ããšãã°ãããªæãã§ããã
ãããããã®ã³ãŒãã§åãŸããã®ãçµæ§å€ãã®ã§ãããããããšååŠè ãå ¥ãã®ã«ããããããããŸããã
ã¢ã«ãã§ãPdMã«MarkdownåŽãæžããŠããããè¶³ããªããšãããéçºã¡ã³ããŒã«å®è£ ããŠããããã¿ãããªããšããã£ãŠã¿ãããšããããŸããéçºã¡ã³ããŒããã¯ã©ãæžããããããããŸãè¿·ããªãã£ããšãèšã£ãŠããããã®ã§ã瀟å ã®æè¡ã¹ã¿ãã¯ãšèŠªåæ§ã®é«ããã®ãéžãã§ããã°ãã¹ãã«ãã©ã³ã¹ãã¡ãŒãé£ãããªãããã§ãã
2. ããã¥ã¡ã³ããšããŠã®ãããããããšãã³ãŒããšããŠã®ãããããããšããé¢å¿äºãåé¢ã§ããå¯èœæ§
Gaugeã®Markdownãã©ããŸã§æžããã®ãå®å šã«ææ¡ã§ããŠããªããšããããããåãããªãã確ãããŠããéšåãããã®ã§ãããããªãã®èªç±åºŠã§èšè¿°ãã§ããŸãã衚ããªã¹ãã眫ç·ãçµµæåãšãã£ããšãããŸã§ã¯ãµããŒããããŠãããGaugeã®ã¬ããŒãã«å€æããããšäžå®ã®ããã¥ã¡ã³ããšããŠèªãããšãã§ããŸããããã«ã¯ãªããã®ãã¹ããå¿ èŠãšããŠããã®ãã®æå³ããäœã確èªãããã®ãªã®ããšãã£ããããã¥ã¡ã³ããšããŠã®æçŸ©ãèªç¶èšèªã§èšèŒããããšãã§ããŸãã

ïŒãªããèšèŒå 容ã¯ãããŸã§æçš¿æç¹ã§ã®è©±ã§ãããå°æ¥ãŸã§åæ§ãšã¯éããŸããïŒ
èªç¶èšèªã§æžãããšããããšã¯ãã¹ãã¬ããã·ãŒãã§ãã¹ãã±ãŒã¹ãèµ·ããããšãšã倧差ã¯ãªããšæãããŸããå®è¡æé ã¿ãããªã«ã©ã ãäœã£ãŠã±ãŒã¹ãæžããšãã®ç¥èŠãããã«æµçšã§ããã¯ãã§ãã
ãŸããã³ãŒãã¯å¥ã§æžãããããã¹ãç¬ç¹ã®èšæ³ã¿ãããªãã®ãå ¥ãã«ãããçŽ çŽã«ã³ãŒããæžããŠãããã®ã§ãããããäžå®èªã¿ãããã§ãããšããã¡ãªãããçãŸããŠãããšæããŸãã
3. ããã¥ã¡ã³ãã§ãããªããåæã«å®è¡å¯èœã§ãããæåéãçããããã¥ã¡ã³ããšãªãå¯èœæ§
ããã¥ã¡ã³ãã®å®¿åœãšããŠãæžãããã°ããé³è
åããŠãããšãããã®ããããŸãã
ãããããã®ããã¥ã¡ã³ãã¯ïŒVisual Studio Codeã®æ¡åŒµæ©èœãå©çšããŠã§ã¯ãããŸããïŒåäœãããããšãã§ããŸãã

ããã®æ©èœã¯ããæäœãããšããåãã¯ãã§ãããããã€ã§ãæ€èšŒã§ããç°ãªãåãã«å€ãã£ãŠããªãããéæãã§ãã¯ããããšãã§ããã®ã§ãã
èªç¶èšèªã§æžãããããã¥ã¡ã³ããããã®å Žã§ã¢ããªãåããå°ç·ããããæ£ããåäœããããæ€èšŒã§ããããšããã®ã¯ãªããªãèŠãªãäœéšã§ã¯ãªãã§ããããã
çŸç¶ã®èª²é¡
ããŠããããŸã§ããããšã°ããæžããŠããŸããããåœç¶æ©ãŸããéšåãããã®ã§ãããè§ŠããŠãããŸãã
1. ããããããæžãããšã¯é£ãã
Markdownã§ãããããã«èªç±åºŠã®é«ãèšè¿°ãããããšã¯ã§ããŸãããæçµçã«ã©ãæžãã®ãããã®ããã¿ãããªç¹ã¯ãã£ãšæš¡çŽ¢ãç¶ããŠããŸãã
äžçªã·ã³ãã«ãªåœ¢ãšããŠãæäœãé çªã«æçŽã«çŸ
åããããšã§ãæç«ã¯ããŸãããã¢ãŠãããããèŠããšçµæ§ç®ãæ»ããŸãã
ãŸããã©ããªæäœãäºåã«å®è£
ãããŠããã®ãããããã«ããã®ã§ãå
¥ååè£ãåºããšããŠãäžæ
£ããªæžãæã«ãšã£ãŠã®ããŒãã«ããããŸãã
ããšãã£ãŠãç²åºŠãç²ããããããšãä»åºŠã¯ããã°ã©ã åŽã§åå©çšãã«ãããã®ãã§ããŠããŸããå®è£
ã®è€éãã«ã€ãªãã£ãŠããŸãã®ã§ããã©ã³ã¹ãé£ãããšããã§ãã
æè¿ã§ã¯BDDã§èšããšããã®å®åŒåãšåŒã°ããããæ¹ãçãã«è¿ãã®ã§ã¯ãã¿ãããªããšãèããŠããŸãããããã¯ãŸãå¥ã®ã話ãšããããšæããŸãã
2. æžãããšèªäœã«å°ãå·¥æ°ãéã
E2Eãšããç¹æ§ãããã¯å€æãé£ãããšããã§ãããäœæ¥ã«æ
£ããŠããŠã1ã·ããªãªæžãã®ã«1ã2æ¥æã£ãŠãããããšããã¯åŠããŸããã
äžäººã§äžæ°éè²«ã§æžãããšãããšãMarkdownã®é ããTypeScriptã®é ãžã®ã¹ã€ãããçºçãããããªãã®ã¹ã€ããã³ã°ã³ã¹ããããããŸãã
ãŸãã广çãªãã¹ããæžãããšæããšãã©ãããã·ããªãªãæžãã®ãé©åããã©ããããã¹ãããŒã¿ãçšæããã®ãé©åãããšãã£ãããšã«ãé ã䜿ãå¿
èŠããããéœåºŠå£æã¡çžæã欲ãããªã£ããããŸãã
3. å°ãã倧éã«ã·ããªãªãäœããšããã®ã¯ããã¥ãã
E2EãšããŠåãããšããåŽé¢ãæãããŠããŸã£ãŠãããããã€ãã€ãã·ããªãªã倧ãããªããã¡ãªãšããããããŸãã
ãã¡ããå°ããäœãããšãã§ããªãã¯ãªããããã£ã¡ã®ã»ããçæ³çã ãšãæãã®ã§ãããæäœã®äžã§ã¯åã®å·¥çšã§äœã£ãããŒã¿ã䜿ã£ãŠç¶ãã®æäœãããã»ããéœåãããå Žé¢ããããŸããããããããéäžã§å€±æããŠããŸããšãåŸç¶ã®ãã¹ããç·åŽ©ãã«ãªã£ãŠããŸã£ãããã¡ãã£ãšå®å®æ§ã«æ¬ ãããã¹ããšãªã£ãŠããŸãã®ãäºå®ã§ãã
çŸæç¹ã§ã¯ããããŒãã¹ãäžå¿ã«çœ®ãããšã§ããã¹ãã®è¥å€§åãé²ãã»ããéèŠããŠããŸãããããã®ããå æžã¯ãŸã 暡玢äžã§ãã
æåŸã«
ãšããããšã§ãã¢ã«ãã®E2Eãã³ãŒãããŒã "harness" ã®ç޹ä»ã§ããã
ãªãŒãã³ãœãŒã¹ã®çµã¿åãããªã®ã§ãïŒããããšæãã°ïŒèª°ã§ã詊ããã®ãè¯ããšããã§ããããã£ãšããã§ããããã¿ãããªã¢ã€ãã£ã¢ãå®è£
ããŠäœ¿ãåæãæ¡åŒµã§ããã®ãè¯ãã§ãã
ãããŸã§ã§ç޹ä»ããéããMarkdownãšTypeScriptã®çµã¿åããã§äœãèªåãã¹ãã¯3ã€ã®å¯èœæ§ãæã¡ããããããã«ã«æŽ»ããã°ãã¢ã«ãã§å¹ã£ãŠããBDDã§ãããšããã®ãçºèŠãã®æ¬¡ããå®åŒåããšãèªååããžãšã€ãªããéžæè¢ã®ã²ãšã€ãšãªãããã®ã§ã¯ãšèããŠããŸãã
ä»åã¯ã³ãŒããåããŠããæ§åãã»ãšãã©åºããã«ã³ã³ã»ãããäžå¿ã«ã話ããŠããã®ã§ããããã«ãããšãããå€ã
ãã£ãããšæããŸãã
ã³ãŒããšããŠã©ãäœããã®ãªã®ãç¥ãããããã ã£ãããæ®æ®µã®éçšã¯ã©ãããŠããã®ãç¥ãããããã¿ãããªã話ããããããªããã¡ãã«ç¹åããç¶ç·šãèããŠã¿ããããªãšæãã®ã§ãããã£ãããã£ãŒãããã¯ããããããå¬ããã§ãã