20161203 selenium adventcalender
-
Upload
naoya-kojima -
Category
Technology
-
view
240 -
download
2
Transcript of 20161203 selenium adventcalender
テストランナーの選び⽅
テストランナーとは1
u ⽤語の意味u テストコードの実⾏を制御するコンポーネント
u ⼀般的に、下記機能を有する他のコンポーネントと協調して構成されるu テストケースの収集u テストの検証u 検証結果の出⼒
u しかし、上記はこれまでの経験に基づく個⼈的な⾒解に過ぎません
テストランナーとは2
u テストツールの機能概要(JUnit4.13より)u 処理対象の識別 FrameworkMembers、FrameworkMethod
u テスト TestClass
u テストケース TestClassのメソッド(FrameworkMethodで識別出来る)u テスト実⾏順の整理役 Statement
u テストケースの実⾏役 Runner
u 例u org.junit.runners.BlockJUnit4ClassRunner
u org.junit.internal.runners.JUnit38ClassRunner
u テストの検証役 Assert
u テストで発⽣したイベントの通知役 RunNotifier
u テストで発⽣したイベントの取得役 RunListener
テストランナーとは3
u テストツールの構成図u 相当抽象化してる為、詳細はJavaDocまたはGitHubご覧くださいu JUnit4.13 を例に挙げていますが、他のツールはこの限りでない場合があります
テスト TestClass
処理対象の識別FrameworkMembers
テスト実⾏順の整理役Statement
テストケース TestClassのメソッド
処理対象の識別FrameworkMembers
テストの検証役 Assert
テストケースの実⾏役 Runner
テストで発⽣したイベントの通知役 RunNotifier
テストで発⽣したイベントの取得役 RunListener
テストツールの⽐較に基づく必要機能
u ⽐較結果から共通するコンポーネントを必要な機能として抽出します
コンポーネント JUnit4.13 TestNG6.9.12 その他テスト ○ ○処理対象の識別 ○ ○テスト実⾏順の整理役 ○ ?テストケース ○ ○処理対象の識別 (メソッド) ○ ○テストの検証役 ○ ○テストケースの実⾏役 ○ ○テストで発⽣したイベントの通知役 ○ ○テストで発⽣したイベントの取得役 ○ ○
テストツールのユースケース
u 処理対象を識別するu 処理対象をテストと事前事後処理に区別するu 区別した処理対象のうち、テストケースの実⾏順を決定するu 決定した順番にテストケースを実⾏するu テストケース毎に想定結果と実⾏結果を検証するu テストケース毎に検証結果を通知する
u 補⾜の確認事項u 利⽤する組織の要求を、上記ユースケースで踏襲出来るか確認します
u 想定する範囲とツールを活⽤して⾃動化できる範囲に差異がないかu ツールの利⽤、カスタマイズ、⾃作の何れになるか、⽬処を⽴てましょう
テストランナーの役割
u テストランナーの名前に相応しいユースケースの選択
u 決定した順番にテストケースを実⾏するu ≒ 「テストコードの実⾏を制御するコンポーネント」
u 以上から、テストランナーとは何か?を明らかにすることが出来た
u 同時にツールの⽐較結果から、テストランナーの役割に差異がないことも明らかになった
テストランナーの選択⽅法
u ポイント
u テストランナーをどのように実⾏したいかを決定することu 「どのようにしたいか」を、テストシステムに対する要求として明らかにすること
u つまり、どのように⾃動テストを実⾏したいか、決めればよい
具体例で⾒るテスト実⾏⽅法1
u JUnit4.13の場合u org.junit.runner.Runner
u org.junit.runners.ParentRunner
u org.junit.runners.BlockJUnit4ClassRunner
u Chain Of Responsibility パターンを取り⼊れたcustomizable なランナー
u org.junit.internal.runners.JUnit38ClassRunner
u JUnit3系以前のテストケースの記法を踏襲する為のランナー
具体例で⾒るテスト実⾏⽅法2
u TestNGの場合u クラス前、メソッド前、テスト、メソッド後、クラス後の順にテストを実⾏したい
u BeforeClass、BeforeMethod、Test、AfterMethod、AfterClass
具体例で⾒るテスト実⾏⽅法3
u Pitalium の場合u テストをマルチスレッドで実⾏したい
u com.htmlhifive.pitalium.core.ParameterizedThreads
u 独⾃の処理を追加してテストを実⾏したいu com.htmlhifive.pitalium.junit.PtlBlockJUnit4ClassRunnerWithParameters
u テストに共通する処理をテスト(TestClass)毎に実⾏したいu org.junit.rules.TestWatcherを継承した
u テストケース(TestClassのメソッド)毎に以下の共通処理を⾏うu com.htmlhifive.pitalium.core.rules.AssertionView
u テスト成功時:期待結果IDの更新
u テスト終了時:WebDriverのquit
u com.htmlhifive.pitalium.core.rules.ResultCollector
u テストクラス実⾏毎に、テスト結果の収集・出⼒を⾏う