プログラム修正してデプロイするたびに、ブラウザをポチポチして動作確認すんのめんどくせー!!ってことで テストを自動化してみようと思いました。
今回はそれぞれ複数のID・PWでログインするテストを想定しています。
(下記のような感じ)
No | ID | PASS |
---|---|---|
1 | hoge1 | fuga1 |
2 | hoge2 | fuga2 |
3 | hoge3 | fuga3 |
htmlは、こんな感じ(超かんたんですが。。。)
- ログインページ
- /login.html
<form action="/auth">
ID:<input type="text" name="id">
PW:<input type="text" name="pw">
<input type="submit" value="ログイン">
</form>
- ログイン成功
- /success.html
ログイン成功しました!
- ログイン失敗
- /fail.html
ログイン失敗しました・・・
3通りの組み合わせのテストをSelenium IDEをつかって、ループ処理をします。
成功した場合は、"ログイン成功しました!"という文字列が存在すること、
失敗した場合は、"ログイン失敗しました・・・"という文字列が存在することを確認します。
通常のSelenium IDEでも出来るのですが、メンテナンスしづらいと思ったので
Selenium WebDriverを使ってJavaとJUnitで実装しました。
環境
$ sw_vers ProductName: Mac OS X ProductVersion: 10.9.2 BuildVersion: 13C1021
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Selenium Web Driver
- Language
- Client Version
- 2.41.0
- Release Date
- 2014-03-27
-
- Version: Kepler Service Release 1
- Build id: 20130919-0819
Selenium Web Driverをインストール
ダウンロードページから、zipをダウンロード
- http://docs.seleniumhq.org/download/
- Selenium Client & WebDriver Language Bindingsのとこ
- http://docs.seleniumhq.org/download/
eclipseで適当にプロジェクトを作成して、ビルドパスに追加
テストを作成する
- setUp()で、Firefoxドライバを初期化
- authTest()で、実際にIDとPWを入力して結果を確認
- testFinally()で、ブラウザを閉じる
package test; import static org.junit.Assert.assertTrue; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; /** * ログインのテスト */ public class TestLogin { private WebDriver driver; /** * ID,PWのマップを取得する * @return */ private Map<String, String> getAuthMap() { Map<String, String> map =new LinkedHashMap<String, String>(); map.put("hoge1", "fuga1"); map.put("hoge2", "fuga2"); map.put("hoge3", "fuga3"); return map; } /** * ログイン判定 * @param driver * @return */ private boolean isLogin(WebDriver driver) { WebElement element = driver.findElement(By.xpath("/html/body/h1")); System.out.println(String.format("%s", element.getText())); return StringUtils.equals(element.getText(), "ログイン成功しました!"); } @Before public void setUp() throws Exception { driver =new FirefoxDriver(); } @Test public void authTest() { Map<String, String> map = getAuthMap(); for (Entry<String, String> entry : map.entrySet()) { // ログインページを表示 driver.get("http://127.0.0.1:8080/html/login.html"); //IDとPWを入力する driver.findElement(By.name("id")).sendKeys(entry.getKey());; driver.findElement(By.name("pw")).sendKeys(entry.getValue());; //Submitボタンを押す driver.findElement(By.xpath("/html/body/form")).submit(); // ログイン判定 if (isLogin(driver)) { assertTrue(String.format("ログイン成功 ID = %s, PW = %s", entry.getKey(), entry.getValue()), true); } else { assertTrue(String.format("ログイン失敗 ID = %s, PW = %s", entry.getKey(), entry.getValue()), false); } } } @After public void testFinally() { driver.quit(); } }
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (62件) を見る