Selenium による Web アプリの自動テスト

その1

概要

  • Selenium(日本語)で Web アプリのテストを自動化する。ここでは上記の「半角数字を漢数字に変換」をテストする。
  • テストする値はローカルの設定ファイルから読み込む。(D:\_temp\TestNumStr.json)
  • テスト結果はローカルのファイルに保存する。(D:\_temp\Result.txt)
  • Firefox 3.6.3にて動作確認。(2010/04/16, Selenium IDE 1.0.6)

ダウンロード

  • fileTestNumStr.zip
  • 「D:\_temp\」に展開したときに動作するように作成しています。別の場所に配置する場合は適宜書き換えて下さい。
  • LocalFileIO.js, isGood.js は Selenium の「オプション - 設定」から「Selenium IDE拡張スクリプトのパス」に登録して下さい。

Selenium テストケース

テスト値設定ファイル TestNumStr.json

{
	'BaseURL':		'file:///D:/_temp/NumberString.html',
	'PageTitle':	'NumberString',

	'input1':		'123456789',
	'output1':		'一二三四五六七八九',

	'input2':		'999999',
	'output2':		'九九九九九九',

	'input3':		'987654321',
	'output3':		'九八七六五四三二一'
}

ユーザー拡張スクリプト LocalFileIO.js

  • File I/O - MDN
  • CMLog :: Firefoxのjavascriptでローカルファイルにアクセスする方法まとめ
  • Selenium IDEで1つ1つのテストの処理時間を計測 (悪戦苦闘) - bonlife
    すべてを展開すべてを収束
      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
    
     
     
     
     
     
    -
    |
    -
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    -
    |
    !
    |
    -
    |
    !
    |
    !
     
    -
    -
    |
    |
    |
    -
    |
    !
    |
    |
    |
    |
    |
    |
    |
    |
    |
    |
    -
    |
    !
    !
     
     
    
     // ローカルファイルの読み書き
     // Firefox専用
     // http://cyprus.ex.nii.ac.jp/~kameda/blog/KMKM/KMKM0711030805.htm
     // modified by TakeAsh, 2010/04/16
     
     function readFromFile( filePath ){
         var data = "";
         try {
             netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
             var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
             file.initWithPath(filePath);
             var fInStream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
             fInStream.init(file, -1, 0, 0);
             var charset = "UTF-8";
             const replacementChar = Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER;
             var cvtInStream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].createInstance(Components.interfaces.nsIConverterInputStream);
             cvtInStream.init(fInStream, charset, 1024, replacementChar);
             var str = {};
             while ( cvtInStream.readString(4096, str) ){
                 data += str.value;
             }
             cvtInStream.close();
         } catch(e){
             throw e;
         }
         return data;
     }
     
     function writeToFile( filePath, content, append ){
         try {
             netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
             var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
             file.initWithPath(filePath);
             if (!file.exists()){
                 file.create(0, 0666);
             }
             var fOutStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
             // https://developer.mozilla.org/ja/Code_snippets/File_I//O
             // 0x02:PR_WRONLY 0x10:PR_APPEND 0x20:PR_TRUNCATE
             var flag = 0x02 | ( (append) ? 0x10 : 0x20);
             fOutStream.init(file, flag, 0666, null);
             var charset = "UTF-8";
             var cvtOutStream = Components.classes["\@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream);
             cvtOutStream.init(fOutStream, charset, 0, 0x0000);
             cvtOutStream.writeString(content);
             cvtOutStream.close();
         } catch(e){
             throw e;
         }
     }
     
     // EOF
    

ユーザー拡張スクリプト isGood.js

すべてを展開すべてを収束
  1
  2
  3
-
|
!
 function isGood( cond ){
     return ( cond ) ? 'Good' : 'NG';
 }

その2

概要

  • Selenium(日本語)で Web アプリのテストを自動化する。ここではテスト項目の繰り返し、ドロップダウンリスト、チェックボックスをテストする。
  • テストする値はローカルの設定ファイルから読み込む。(D:\_temp\testSelenium.json)
  • テスト結果はローカルのファイルに保存する。(D:\_temp\resultSelenium.log)
  • Firefox 3.6.3にて動作確認。(2010/04/26, Selenium IDE 1.0.6)

ダウンロード

  • fileSeleniumTest.zip
  • 「D:\_temp\」に展開したときに動作するように作成しています。別の場所に配置する場合は適宜書き換えて下さい。
  • LocalFileIO.js, isGood.js は Selenium の「オプション - 設定」から「Selenium IDE拡張スクリプトのパス」に登録して下さい。

Selenium テストケース

  • filetestSelenium.html
  • Headerの出力はループさせなくてもjoin('\t')でできるが、出力結果が複数箇所の場合に取り込んだ結果をループでまとめて出力させたいのでその雛形としてループを使っている。

テスト値設定ファイル testSelenium.json

{
	'BaseURL':		'file:///D:/_temp/SeleniumTest.html',
	'PageTitle':	'Seleniumテストサンプル',

	'JobCondition':	[
		//	Src1	Operation	Src2	chkKanji	Result
		[	3,		'+',		4,		'off',		7,	],
		[	3,		'+',		4,		'on',		'七',	],
		[	3,		'−',		4,		'off',		-1,	],
		[	3,		'−',		4,		'on',		'−一',	],
		[	3,		'×',		4,		'off',		12,	],
		[	3,		'×',		4,		'on',		'一二',	],
		[	3,		'÷',		4,		'off',		0.75,	],
		[	3,		'÷',		4,		'on',		'〇.七五',	],
		[	1,		'+',		0,		'off',		1,	],
		[	1,		'+',		0,		'on',		'一',	],
		[	1,		'−',		0,		'off',		1,	],
		[	1,		'−',		0,		'on',		'一',	],
		[	1,		'×',		0,		'off',		0,	],
		[	1,		'×',		0,		'on',		'〇',	],
		[	1,		'÷',		0,		'off',		'Infinity',	],
		[	1,		'÷',		0,		'on',		'無限大',	],
		[	1,		'+',		'a',	'off',		'NaN',	],
		[	1,		'+',		'a',	'on',		'非数値',	],
	],
}

テスト結果 resultSelenium.log

PageTitle:	Seleniumテストサンプル
BaseURL:	file:///D:/_temp/SeleniumTest.html
TestDate:	Tue Apr 27 2010 00:51:25 GMT+0900

Src1	Op	Src2	Kanji	Correct	Actual	Result
3	+	4	off	7	7	Good
3	+	4	on	七	七	Good
3	−	4	off	-1	-1	Good
3	−	4	on	−一	−一	Good
3	×	4	off	12	12	Good
3	×	4	on	一二	一二	Good
3	÷	4	off	0.75	0.75	Good
3	÷	4	on	〇.七五	〇.七五	Good
1	+	0	off	1	1	Good
1	+	0	on	一	一	Good
1	−	0	off	1	1	Good
1	−	0	on	一	一	Good
1	×	0	off	0	0	Good
1	×	0	on	〇	〇	Good
1	÷	0	off	Infinity	Infinity	Good
1	÷	0	on	無限大	無限大	Good
1	+	a	off	NaN	NaN	Good
1	+	a	on	非数値	非数値	Good

添付ファイル: filetestSelenium.html 1135件 [詳細] filetestNumStr.html 1183件 [詳細] fileTestNumStr.zip 932件 [詳細] fileSeleniumTest.zip 631件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Thu, 14 Nov 2013 11:08:30 JST (1741d)