メむンコンテンツぞスキップ
芋出し画像

Playwright × Gaugeで拓くE2Eの新境地 〜 瀟内の自前E2Eが最高な話

    こんにちは、アルプでQA゚ンゞニアをやっおいるyokota(@katawara)です。
    アルプではQA゚ンゞニアの働き方ずしお3぀のロヌルがあり、以䞋のように分類されおいたす。

    ・リヌドQA゚ンゞニア(L-QA) : 組織党䜓のQAプロセスを改善する責務を担う
    ・チヌムQA゚ンゞニア(T-QA) : プロダクトチヌム内のQAプロセスを改善する責務を担う
    ・オヌトメヌションQA゚ンゞニア(A-QA) : プロダクトチヌムが行っおいるテストずは別軞の自動テストを䜜成を担う

    QA゚ンゞニアの幅広い業務を敎理し、3぀のゞョブディスクリプションを䜜っおみた より匕甚

    この蚘事を曞いおいる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でデバッグや実装の補助を利甚する、みたいなこずができたす。それなりにコヌドを曞く必芁はありたすが、だいぶ䟿利に䜜り蟌むこずができたす。

    画像
    Gaugeからはこんな感じのレポヌトが出せたす

    テストフレヌムワヌクの掛け算による化孊反応

    この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でいうずころの「発芋」の次、「定匏化」ず「自動化」ぞず぀なげる遞択肢のひず぀ずなりうるのではず考えおいたす。

    今回はコヌドや動いおいる様子をほずんど出さずにコンセプトを䞭心にお話しおいるので、わかりにくいずころも倚々あったかず思いたす。
    コヌドずしおどう䜜るものなのか知りたいよ、だったり、普段の運甚はどうしおいるのか知りたいよ、みたいなお話がもしあるならそちらに特化した続線も考えおみようかなず思うので、よかったらフィヌドバックをもらえたら嬉しいです。

     
     
    二人目QA゚ンゞニアからの二代目ひずりQA゚ンゞニア。 䌌たような境遇の誰かにずっお参考になるこずを曞ければず思う所存。 2023幎3月よりScalebase株匏䌚瀟旧・アルプ株匏䌚瀟に所属。猫掟。

    あなたぞのおすすめ