1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

gauge×playwrightで作るモダンE2Eテスト環境をハンズオンで詳細に解説

Posted at

環境前提

  • OS:Linux(WSLでも可)
  • 言語:JavaScript
  • IDE:VSCode または Cursor
    ※ VSCode互換エディタであれば同様に実施可能です。

公式によると以下のIDEがサポートされています:
Gauge 公式プラグイン一覧

image.png

参考リポジトリをもとに、ここでは Playwright と Gauge の連携 を再現し、実際に体験していきます。


全体像

  1. Gauge プロジェクトを作成
  2. その中に Playwright を導入
  3. 先に簡単なテストを書いてみる
  4. React アプリを構築(任意)

Gauge の準備

mkdir gauge×playwright
cd gauge×playwright
npm install --save-dev @getgauge/cli

以下のようなフォルダ構成になっていればOKです。

image.png


Gauge拡張機能を導入

Gauge VSCode拡張機能

image.png

  1. Ctrl + Shift + P でコマンドパレットを開く
  2. 「Create new Gauge Project」と入力

「Gauge: Create new Gauge Project」が表示されていればOKです。

image.png

もし表示されない場合は、エディタを再起動するか「Reload window」を実行してください。


プロジェクト作成

「Gauge: Create new Gauge Project」を選択するとテンプレート選択画面が表示されます。

image.png

ここでは TypeScript (ts) を選択します。

次にプロジェクト作成フォルダを聞かれたら、最初に作成したディレクトリ gauge×playwright を選択してください。

「Select a folder to create the project」をクリックし、プロジェクト名を「gauge」と入力します。

image.png

完了すると以下のような構成になります。

image.png


example.spec を確認

gauge/specs/example.spec を開くと以下のような内容が表示されます。

image.png

カーソルをステップ上で Ctrl + クリック すると、対応する step_implementation.js にジャンプします。

step("Open todo application"
~~~~

これにより テスト仕様 (spec)テストコード が自動で紐づいていることが確認できます。


Gaugeの特徴

Gaugeでは「テスト仕様(Markdown)」と「テストコード」を分離できます。
これにより:

  • E2Eテストでの可読性が向上
  • 仕様書とコードの役割分担が明確化
  • QAとエンジニアの分業が容易になる

テストの実行

cd gauge
gauge run specs

example.spec に紐づいたテストが実行され、以下のような結果が得られます。

image.png

デフォルトでは TAIKO が利用されます。
次にこれを Playwright に置き換えましょう。


Playwright環境の準備

gaugeディレクトリ内で以下を実行します。

npm init playwright@latest

設定は以下の通りです:

  • 言語:TypeScript
  • プロジェクト名:playwright
  • GitHub Actions:No
  • ブラウザ環境インストール:Yes
  • OS依存パッケージ:Yes

※ root パスワードが求められたら入力してください。

npx playwright test

テストが実行され、結果が返れば成功です。

ブラウザで動作を確認する場合:

npx playwright test --headed

UIが立ち上がればOKです。


GaugeでPlaywrightを利用する

specファイルを追加

specs ディレクトリに以下を追加します。

gauge-playwright.spec
# Getting Started with Gauge

* Open Playwright Website
## Get Started
* Click on Get Started

テストコードを追加

tests ディレクトリに以下を追加します。

gauge-playwright.ts
import { chromium, Browser, BrowserContext, Page } from "@playwright/test";
import { Step, BeforeSuite, AfterSuite } from "gauge-ts";

let browser: Browser;
let context: BrowserContext;
let page: Page;

export default class GaugePlaywright {
  @BeforeSuite()
  public async beforeSuite() {
    browser = await chromium.launch({ headless: false });
    context = await browser.newContext();
    page = await context.newPage();
  }

  @AfterSuite()
  public async afterSuite() {
    await browser.close();
  }

  @Step("Open Playwright Website")
  public async openPlaywrightSite() {
    await page.goto("https://playwright.dev/");
  }

  @Step("Click on Get Started")
  public async clickOnGetStarted() {
    await page.getByRole("link", { name: "Get started" }).click();
  }
}

GaugeとPlaywrightの役割分担

Playwrightの担当領域

// ブラウザ環境設定
@BeforeSuite()
public async beforeSuite() {
  browser = await chromium.launch({ headless: false });
  context = await browser.newContext();
  page = await context.newPage();
}

// DOM操作
@Step("Open Playwright Website")
public async openPlaywrightSite() {
  await page.goto("https://playwright.dev/");
}

@Step("Click on Get Started")
public async clickOnGetStarted() {
  await page.getByRole("link", { name: "Get started" }).click();
}

Gaugeの担当領域

// クラス構成
export default class GaugePlaywright {}

// 初期化・終了処理
@BeforeSuite()
@AfterSuite()

// specファイルとの紐付け
@Step()

テスト実行

gauge run

Gaugeを通じてPlaywrightが起動し、ブラウザ上でテストが正常に実行されれば成功です。

image.png

image.png


まとめ

  • GaugeのMarkdownベース仕様とPlaywrightの高機能E2E操作を組み合わせることで、
    テストコードの保守性・可読性が大幅に向上します。
  • QAと開発者間の分業もしやすくなります。

お疲れさまでした。
質問や不明点があればコメントいただければと思います。


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?