UZABASE Tech Blog

株式会社ユーザベースの技術チームブログです。 主に週次の持ち回りLTやセミナー・イベント情報について書きます。

Gauge Test Automation Toolとアジャイル開発

こんにちはSPEEDAのQAチームの工藤です。
最近ではテスト自動化周りのツールが数多く存在していますが、英語でのみ提供されていて日本で多くの人に知られていないサービスも多いと思います。
そんな中、Gaugeという自動化のツールがイケてるという情報を発見したので実際に調べてみました。

はじめに

GaugeとはThoughtWorks社が開発しているオープンソースのテスト自動化ツールです(2017年7月現在でベータ版)。
もっと具体的に言うと様々なロールのメンバーが自動テストのスクリプトを理解できるようにするためのspecificationツール(恐らく立ち位置的にはCucumber/Gherkinの代替)になります。
ざっくりGaugeの良いところを挙げると下記になります。

  • Selenium Webdriverと一緒に使える
  • マークダウン形式で記述できる
  • ビジネス言語でテスト仕様を記述できる(実行可能な仕様書の概念をサポート)
  • 多言語、マルチプラットフォームをサポート
  • 外部データソースからテストデータを読み込める
  • 拡張可能(自分でpluginを開発できる)
  • IDEのサポートが充実している

Gaugeで使う用語

下記がGaugeで使用する基本的な用語(概念)です。
使い始めるのに最低限必要そうなものをピックアップしているので、当然他にもあります。

  • Specifications(spec)
  • Scenarios
  • Steps
  • Tags

もう少し詳しく説明していきます。

Specification(spec)

テスト対象アプリケーションの特定の機能の仕様を説明しています。

Scenarios

各Scenarioは、特定の仕様の1つのフローを表しています。仕様には少なくとも1つのScenarioが含まれている必要があります。

Steps

仕様を実行可能なコンポーネントに分けたものがStepになります。マークダウン形式のunordered list items(bulleted points)として記述されます。
(大きくContext Steps、Tear Down Steps、Scenarioやconcepts内のStepsに分けられますが、今回はそこらへんの説明は割愛します)。

Tags

TagはspecやScenarioを関連付けするために使用します。タグを用いてspecやScenarioをフィルタリングすることができ、後々便利になります。

Gaugeのインストール

下記ページからダウンロードできます。インストール方法も簡単で、下記ページに書いてある通りに進めていけば5分もかからずにGauge自体はインストールできます。
https://getgauge.io/get-started.html

サンプルコードを見てみる

下記ページから自分の好みの言語のSampleコードのGithubリンクへ飛ぶことができます。
https://docs.getgauge.io/examples.html

私はWeb app using SeleniumのJavaのSampleコードを選択しました。
https://github.com/getgauge/gauge-example-java

下記がSpecificationのファイルになります。
上記で説明した用語はこんな形で使われます。

user.spec(自然言語でテストケースを記述していくファイル)

Signup   //Specification
======

Register a customer  //Scenario
-------------------
tags: user, signup, high, final, smoke  //Tags

* Sign up a new customer                  //Step1
* On the customer page                    //Step2
* Just registered customer is listed      //Step3

上記のSpecファイルはIDEでタブ切り替えでHTML Previewを閲覧できます。Specファイルがそのまま仕様書として使えます。 (自分の場合はIntelliJを使いました。IDE側でプラグインをインストールしてやる必要があります)   f:id:kudogen:20170718122930p:plain

下記がSeleniumのテストコードになります。 各Stepに対してのテストコードが@Stepという形で実装されているのが分かります。
UserSpec.java

public class UserSpec {
    private final WebDriver driver;

    public UserSpec() {
        this.driver = DriverFactory.getDriver();
    }

    public String localPart() {
        // Creating a random local part of an email address also used as username
        return UUID.randomUUID().toString();
    }

    @Step("On signup page")    //Stepsの実装部分
    public void navigateToSignUpPage() {
        driver.get(SignUpPage.SignUpUrl);
    }

レポート機能

プラグインをインストールしてやるだけで、テスト流す度にHTMLのテストレポートを吐き出してくれます(下記画像参照)
実行したテストをSpecificationやTagで検索できて、Spec毎、Scenario毎、Step毎にどれくらい実行時間がかかったかも簡単にわかります。
f:id:kudogen:20170718123453p:plain

今回カバーしていない機能

これまでに紹介したのはあくまでも超基本的なTerminologyです。 他にも下記のようなものがあるのですが、今回は触れられていません。

  • Concepts
  • Parameters
  • Stepの種類(Contexts, Tear Down Steps)

またかなり役立ちそうな下記機能もありますが、今回はカバーしていません。

  • Data driven execution
  • Parallel Execution

まとめ

弊社ではテストケース=仕様書という考え方から、ほぼすべてのプロジェクトでUATを書いています。
元々上記のような取り組みをしていたのですが、もっといいやり方がないか探していたところに見つけたのがGaugeでした。
Gaugeは実行可能なドキュメントという概念("the concept of executable documentation")をサポートしています。
また自動テストのケースを誰でも読めるようにするという考え方も弊社の開発チームが今まで取り組んできていたことですが、Gaugeを使えばよりスマートに実現できそうです。
今後は様々なプロジェクトでGaugeを導入していこうと考えています。

次回は今回カバーできなかったGaugeのAdvancedな機能を中心に取り上げたブログ記事を執筆予定です。


株式会社ユーザベースでは、より良い開発プロセスを共に作り上げていきたいエンジニアを大募集中です!