20161203 selenium adventcalender

11
テストランナーの選び⽅

Transcript of 20161203 selenium adventcalender

Page 1: 20161203 selenium adventcalender

テストランナーの選び⽅

Page 2: 20161203 selenium adventcalender

テストランナーとは1

u ⽤語の意味u テストコードの実⾏を制御するコンポーネント

u ⼀般的に、下記機能を有する他のコンポーネントと協調して構成されるu テストケースの収集u テストの検証u 検証結果の出⼒

u しかし、上記はこれまでの経験に基づく個⼈的な⾒解に過ぎません

Page 3: 20161203 selenium adventcalender

テストランナーとは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

Page 4: 20161203 selenium adventcalender

テストランナーとは3

u テストツールの構成図u 相当抽象化してる為、詳細はJavaDocまたはGitHubご覧くださいu JUnit4.13 を例に挙げていますが、他のツールはこの限りでない場合があります

テスト TestClass

処理対象の識別FrameworkMembers

テスト実⾏順の整理役Statement

テストケース TestClassのメソッド

処理対象の識別FrameworkMembers

テストの検証役 Assert

テストケースの実⾏役 Runner

テストで発⽣したイベントの通知役 RunNotifier

テストで発⽣したイベントの取得役 RunListener

Page 5: 20161203 selenium adventcalender

テストツールの⽐較に基づく必要機能

u ⽐較結果から共通するコンポーネントを必要な機能として抽出します

コンポーネント JUnit4.13 TestNG6.9.12 その他テスト ○ ○処理対象の識別 ○ ○テスト実⾏順の整理役 ○ ?テストケース ○ ○処理対象の識別 (メソッド) ○ ○テストの検証役 ○ ○テストケースの実⾏役 ○ ○テストで発⽣したイベントの通知役 ○ ○テストで発⽣したイベントの取得役 ○ ○

Page 6: 20161203 selenium adventcalender

テストツールのユースケース

u 処理対象を識別するu 処理対象をテストと事前事後処理に区別するu 区別した処理対象のうち、テストケースの実⾏順を決定するu 決定した順番にテストケースを実⾏するu テストケース毎に想定結果と実⾏結果を検証するu テストケース毎に検証結果を通知する

u 補⾜の確認事項u 利⽤する組織の要求を、上記ユースケースで踏襲出来るか確認します

u 想定する範囲とツールを活⽤して⾃動化できる範囲に差異がないかu ツールの利⽤、カスタマイズ、⾃作の何れになるか、⽬処を⽴てましょう

Page 7: 20161203 selenium adventcalender

テストランナーの役割

u テストランナーの名前に相応しいユースケースの選択

u 決定した順番にテストケースを実⾏するu ≒ 「テストコードの実⾏を制御するコンポーネント」

u 以上から、テストランナーとは何か?を明らかにすることが出来た

u 同時にツールの⽐較結果から、テストランナーの役割に差異がないことも明らかになった

Page 8: 20161203 selenium adventcalender

テストランナーの選択⽅法

u ポイント

u テストランナーをどのように実⾏したいかを決定することu 「どのようにしたいか」を、テストシステムに対する要求として明らかにすること

u つまり、どのように⾃動テストを実⾏したいか、決めればよい

Page 9: 20161203 selenium adventcalender

具体例で⾒るテスト実⾏⽅法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系以前のテストケースの記法を踏襲する為のランナー

Page 10: 20161203 selenium adventcalender

具体例で⾒るテスト実⾏⽅法2

u TestNGの場合u クラス前、メソッド前、テスト、メソッド後、クラス後の順にテストを実⾏したい

u BeforeClass、BeforeMethod、Test、AfterMethod、AfterClass

Page 11: 20161203 selenium adventcalender

具体例で⾒るテスト実⾏⽅法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 テストクラス実⾏毎に、テスト結果の収集・出⼒を⾏う