ブラウザのテストを自動化

テストを自動化できると色々と利点がありますね。
リグレッションテストが簡単にできます。それによりプログラムの改修も気軽に行えます。

もしテストコードが無く、毎回手動でテストを実施しているとどうなるか?
改修のたびにテストに時間を取られ、テストが面倒くさくなってきます。
そのうちテストが不十分な状態でリリースしてしまいます。

プログラムを改修すると、予想外の箇所に影響を与えていることがあります。
テストが不十分ですと、それらが漏れた状態でリリースしてしまい、本番環境でエラーが・・・

それを防ぐためにもテストコードは必要です。
今回はテストの中でもブラウザのテストをPlay frameworkで行います。

Play frameworkでは既にテスト用APIが準備されているので簡単です。

/test/controller/WebTestSpec.scala

package controllers

import org.specs2.mutable._

import play.api.test._
import play.api.test.Helpers._

class WebTestSpec extends Specification {

  "Application" should {
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) {
        browser =>
          browser.goTo("http://localhost:3333/submit/index")

          // Get the text in tag
          browser.$("title").getTexts().get(0) must equalTo("Multiple submit buttons")

          // Move next page
          browser.$("button[name='button1']").click

          browser.$(".alert-message strong").getTexts().get(0) must contain("Clicked the button 1")
      }
    }
  }
}

以上です。

あとはコンソールでテストを実行していきます。

コンソール

play-sample> play
[play-sample] $ test
→全テストを実施
[play-sample] $ test-only controllers.WebTestSpec
→WebTestSpecのみテスト

Sampleソース

GitHub patolie/play-sampleソースコードをあげています。