Gaugeを使って自動テストを自然言語で記述する

ソフトウェア開発において品質を担保するためにはテストは大事な工程です。
しかし、テストを毎回手動で実施するのは大変なので、テストを自動化している現場も多くあるかと思います。

例えばWebアプリケーションの場合、SeleniumCypressPlaywrightなどのフレームワークを使うことでブラウザを自動操作して要素を検証することができます。
このような自動テストは非常に便利ですが、テストコードはプログラミング言語で記述する必要があるため、非エンジニアの方や普段コーディングを行わないテスターの方には詳細を把握するのは難しくなります。

テストの流れを自然言語で記述することができれば、非エンジニアの方にも認知しやすくなります。
テストを自然言語で記述できるフレームワークに、Gauge(ゲージと呼びます)があります。

https://gauge.org/index.html

https://gauge.org/index.html

今回はこのGaugeについて簡単に紹介します。

サンプル

シナリオの記述

まず、Gaugeを使うと以下のように、マークダウン記法でテストシナリオを記述できます。

# ユーザー登録画面のテスト

## 準備

### テスト環境のセットアップ
* ヘッドレスモード "false" でブラウザ "chromium" を起動する
* URL "http://localhost:3000/user/new" にアクセスする

## シナリオ1: ユーザー登録フロー  

### 新規ユーザー登録の操作
* "フォームページ" の "ユーザー名入力" に "新規ユーザー001" を入力する
* "フォームページ" の "メール入力" に "newuser001@example.com" を入力する
* "フォームページ" の "年齢入力" に "25" を入力する
* "フォームページ" の "利用規約チェックボックス" をチェックする
* "フォームページ" の "送信ボタン" をクリックする
* "1" 秒待機する

### 登録完了の確認
* "ダッシュボードページ" の "成功メッセージ" が表示されていることを確認する

実行

テストを実行するには、gaugeコマンドを使ってディレクトリ名や、テストシナリオが記述されたspecファイルを指定します。

# ディレクトリを指定する
> gauge run specs
# ファイルを指定する
> gauge run specs/user-create.spec

※gaugeのプロジェクトを作成すると、specsデフォルトが作成され、このディレクトリにテストシナリオのファイルを格納します。
※gaugeではテストシナリオを記述するファイルは拡張子.specとして、中身は主にMarkdown記法で記述します。

また、IDE(VS CodeやJetBrains製のIDEなど)でGaugeのプラグインを入れることで、specファイル内の見出し(サンプルでは# ユーザー登録画面のテスト## シナリオ1: ユーザー登録フローなど)の部分に実行マークが表示されるようになり、GUI上でも実行が可能となります。

ステップと実装の紐づけ

GaugeではMarkdownの箇条書きで書かれた部分(* URL "http://localhost:3000/user/new" にアクセスするなど)のことをステップと呼びます。
ステップは自然言語による記述が可能ですが、内部的には何かしらのプログラミング言語で動作を定義しておく必要があります。

例えば、* URL "http://localhost:3000/user/new" にアクセスするのステップは例えば以下のように定義します。

@step("URL <url> にアクセスする")
def navigate_to_url(url):
    page = get_current_page()
    page.goto(url)

gaugeのフレームワークに含まれている@stepアノテーションを使い、引数にステップの内容を記述します。<>で囲われた部分はステップの引数となり、実際のステップを記述する箇所ではダブルクォーテーション""で囲うことで値を渡すことができます。
渡された引数の値は関数の引数として受け取ることができます。

ここではPythonで定義していますが、Gaugeは他にもC#, Java, JavaScript, Rubyがサポートされています。
私自身はJavaとPythonのGaugeしか扱ったことはありませんが、どちらも同じように@stepアノテーションによってステップを実装することができます。

サンプルの関数の中身についての詳細は割愛しますが、上記はPlaywrightによって起動されたブラウザで指定のURLを開く処理を実現しています。

導入方法

導入については公式サイトを参考に実施していただく方が確実なので、ここでは簡単に紹介します。
ここでは、言語にPythonを使用することを前提とした環境構築を紹介します。
Pythonの実行環境は導入されていることを前提とします。

Gaugeの導入

以下のページにて、ご自身の環境に合わせてOSとLanguageを選択してgaugeをインストールします。

https://docs.gauge.org/getting_started/installing-gauge?os=windows&language=python&ide=vscode

https://docs.gauge.org/getting_started/installing-gauge?os=windows&language=python&ide=vscode

※Windows環境の場合、インストール方法がいくつかありますが、インストーラによるインストールの場合、私の環境ではWindows Defenderによってブロックされることがありました。
その場合はZIPをダウンロードして、実行ファイルのパスを環境変数PATHに設定してあげるか、他のインストール方法を試す方が良いでしょう。

ひとまずコマンドプロンプトやPowershell上でgaugeコマンドが実行できるようになればgaugeの導入自体は完了です。

Gaugeのプラグインを追加

Gaugeのプラグインも追加します。
gaugeのコマンドを使って、以下を入力します。

> gauge install python 
> gauge install html-report 
> gauge install screenshot

html-reportscreenshotは、テスト実行時に、失敗したテストのスクリーンショットを保存したり、テスト終了後にテストのレポートをHTML形式で出力するための機能です。
入れておくとテスト失敗時の分析などに役に立つので、入れておくと良いでしょう。
今回は言語としてPythonを前提としたため、pythonのプラグインをインストールしましたが、使用する言語に合わせてプラグインを追加しておいてください。

インストール時にバージョンの指定を行わなければ、デフォルトで最新のバージョンがインストールされます。特定のバージョンを指定する場合は、`–version`のオプションを指定してバージョンを指定します。

# バージョンを指定してインストールする方法
> gauge install python --version 0.4.11

IDEにプラグインを追加

VS CodeにGaugeのプラグインがあるので、それも追加します。
また、JetBrains製のIDE(IntelliJ IDEAなど)でもGaugeのプラグインがあります。
(私の場合Java環境でGaugeを導入するときはIntelliJ IDEAを使って実行していました。)

Gaugeプロジェクトの作成

Gaugeプロジェクトの作成方法は2つあります。
1つ目は、VS CodeのGaugeプラグインから作成する方法。
2つ目は、gaugeコマンドから作成する方法。

VS Codeを使用する場合は、コマンドパレットからGauge: Create a Gauge New Projectを実行します。
gaugeコマンドを使用する場合は、以下のコマンドを実行します。

# 使用する言語に合わせて"python"の部分は変更する
gauge init python

プロジェクトの作成に成功したら、必要なファイルと、サンプル用のspecsファイルが生成されます。
以下は、プロジェクト作成時に生成されるexample.specの内容です。

# Specification Heading

This is an executable specification file. This file follows markdown syntax.
Every heading in this file denotes a scenario. Every bulleted point denotes a step.

To execute this specification, run

    gauge run specs

* Vowels in English language are "aeiou".

## Vowel counts in single word

tags: single word

* The word "gauge" has "3" vowels.

## Vowel counts in multiple word

This is the second scenario in this specification

Here's a step that takes a table

* Almost all words have vowels

     |Word  |Vowel Count|
     |------|-----------|
     |Gauge |3          |
     |Mingle|2          |
     |Snap  |1          |
     |GoCD  |1          |
     |Rhythm|0          |

このexample.specを、gaugeコマンドで実行、あるいはGUI上から実行し、問題なく動作してテストが成功すれば導入は完了です。

あとは、ブラウザ操作やDB操作などのライブラリを自由に追加し様々なステップ実装を追加することで、様々なテストを自然言語で定義することができるようになります。

Javaで導入する際の注意点

私の場合、Javaの案件でGaugeを導入する機会が多かったため、GaugeもJavaの環境で作っていましたが、JavaのGauge環境はプラグインやライブラリのバージョンによってうまく動作しなくなることが多く発生するため、注意が必要です。

ここでは私がハマったポイントなども踏まえて備忘録的に注意点を残しておきます。

ライブラリとプラグインのバージョンを一致させる

JavaでGaugeを動かす場合、Gaugeのプラグインとは別で、Javaプロジェクト側にもライブラリが必要でした。
Mavenプロジェクトの場合は以下の依存関係を追加します。

<dependency>  
    <groupId>com.thoughtworks.gauge</groupId>  
    <artifactId>gauge-java</artifactId>  
    <version>0.12.0</version>  
</dependency>

この時、ライブラリのバージョンが、gaugeのjavaプラグインのバージョンと一致している必要があるため、注意が必要です。プラグインのバージョンはgauge -vコマンドで確認できます。

バージョン確認の例

> gauge -v
Gauge version: 1.6.18
Commit Hash: d6e10a4

Plugins
-------
html-report (4.3.1)
java (0.12.0)
python (0.4.11)
screenshot (0.3.0)

また、gaugeそのもののバージョンと、プラグインのバージョンもかみ合わない場合があるので、注意が必要です。
基本的にはインストール時点でそれぞれ最新版をインストールしておけば問題はないでしょう。

また、以下の依存関係も必要になることがあります。

<dependency>  
    <groupId>com.google.protobuf</groupId>  
    <artifactId>protobuf-java</artifactId>  
    <version>4.31.1</version>  
</dependency>

このライブラリのバージョン差異は、実行時にエラーメッセージとして出力されるので、メッセージを確認して導入してください。

バージョン差異による動作不具合は現状だとAIに聞いても解決が難しいため、状況を整理して試しながら解決していく必要があります。

自然言語でテストを実装することのメリット

今回はGaugeという、自動テストを自然言語で記述できるフレームワークについて紹介しました。
自然言語でテストシナリオを実装できるようになると、テストコードをテスト仕様書として活用しやすくなります。
非エンジニアの人にとっても認知しやすくなり、プロジェクトに新規参画するメンバーもテストコードによってシステムの動作を理解しやすくなります。

プロジェクトによってはテスト仕様書を顧客に提出することがお求められる場合もありますが、Gaugeを使って実装したテストは自然言語で、Markdown形式となっているため、ドキュメントとしても使用しやすいです。
仮にExcelなど、別のファイル形式での提出を求められたとしても、PythonのスクリプトなどでMarkdownの中身をExcel出力してしまえば、そのまま提出可能なドキュメントにも変換できます。

テストを自動化し、自然言語でテストシナリオを記述したい方は、Gaugeの導入を検討してみてはいかがでしょうか。


システム開発に関するご依頼・お問い合わせはこちらから。

株式会社テクノコア – Committing the Service

株式会社テクノコアは、1999年創業のIT教育・ITサービス企業です。未経験からでも成長できる環境で、新しい挑戦をしませんか?

https://www.techno-core.jp/system-contact

===========

新人研修に関するご依頼・お問い合わせはこちらから。

株式会社テクノコア – Committing the Service

株式会社テクノコアは、1999年創業のIT教育・ITサービス企業です。未経験からでも成長できる環境で、新しい挑戦をしませんか?

https://www.techno-core.jp/contact

============

採用に関するご応募はこちらから。

株式会社テクノコア – Committing the Service

株式会社テクノコアは、1999年創業のIT教育・ITサービス企業です。未経験からでも成長できる環境で、新しい挑戦をしませんか?

https://www.techno-core.jp/recruit