20140212 develove テスト自動化のアプローチ拡張トレンド...
TRANSCRIPT
テスト自動化のアプローチ拡張トレンド ~e2eはExcel項目定義手動テスト
からTurnip自動テストへ~
2014.2.12 DevLove #157 福井修 @iR3
ルビールビールビーRuby大好き
福井修@iR3
2012 Rubykaja
sendagaya.rb
#七輪life
Ruby関西cofounder2009Ruby会議スタッフ
&スポンサー
2002年KOFにて Matzを囲む
エンドツーエンドにはTurnip
世間の動向
ドメイン特化言語
(DSL:Domain Specific Language)
DSLのLをLibraryと広義に解釈すると…
Rails,sinatraはWebのDSL
ChefはシステムアドミストレーションのDSL
Fluentdはマシン間配送のDSL
RSpecはテストのDSL
Gherkinは仕様記述DSL
Capybaraはe2e検証のDSL
結論を先に• Rubyの進んだテストツールを使うと自動テストも美味しくええとこ取りできる
•エンドツーエンド(e2e)テスト自動化には Gherkin+Capybara +Turnip ライブラリが有利
•外部テスト管理ツールもそろそろExcelからWebDBに
CucumberとTurnipを利用するメリットの
本質は Gherkinにあり
テスト自動化のうねり
時代の流れの背景
Andreas Spillner: “The W-MODEL – Strengthening the Bond Between Development and Test” STAREAST2002
http://www.ipa.go.jp/files/000005144.pdf
高信頼性ソフトウェアのための開発手法ハンドブックより
1.単体テスト、Unit-Test
2.結合テスト、Integration-Test,Component-Test
3.システムテスト、System-Test,e2e-Test
4.受け入れテスト、Acceptance-Test
(5.回帰テスト、regression-Test)
テストは、視点や範囲の違いでベタからメタ方向に
守備範囲の違いで区別があり
当然自動テストにもこの区別は該当
テストの種類
内部テストは「ホワイトボックステスト」
プログラマが意図したとおりにプログラムが動作することを確認するテストのこと
具体的には、プログラマが変数の値を変えながらコードを直接実行して、期待する結果が
得られるかどうかを検証
内部テスト
外部テスト外部テストは「ブラックボックステスト」
プログラムのコードに立ち入ることなくプログラムの外部インターフェース (画面 etc.) を介して評価
→ エンドツーエンドテスト
エンドツーエンドは略して e2e
開発 Dev
運用 Ops
検証 Ver
設計→実装→テスト↓↑
ここを俊敏に繰り返し
やるのがAgile,TDD/BDD
(回帰テスト) システムテスト 受け入れテスト
e2eテスト
経営 Biz
評価 リーン
2013.9.21toRuby「カジュアルにテストして、 フォーマルに検証する」に加筆
開発 Dev
運用 Ops
検証 Ver
設計→実装→テスト↓↑
ここを俊敏に 繰り返し
やるのがAgile
経営 Biz
評価 リーン
フォーマル に検証
カジュアル にテスト
『自動テストのニーズはベタからメタへ』
!
ベタ ←――――――――――――――→ メタ
Unit Test → Integration Test
→ System Test、e2eTest
→ 回帰テスト
るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」を編集
Unitテスト自動化 ↓
e2eテスト自動化
るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」より
『テストツールもベタからメタへ』
!
ベタ ←――――――――――――――→ メタ
!
Test::Unit → RSpec
→ Gherkin (Cucumber/Turnip)
CucumberとTurnip・featureファイルと step_definitionsファイルの構成 (Gherkin 書式) を 実行するのは同じ
・Cucumberは独立なプログラム(2本立て)
・TurnipはRSpec内で実行することができる (RSpec一本化)
・Cucumberは正規表現を使用(結構面倒)
・Turnipは代わりにプレースフォルダ
検証項目列挙方式
単体テスト項目積み上げ ボトムアップアプローチ
機能仕様書から掘り下げ トップダウンアプローチ
TDD/BDDの 成果物
Excelシート テスト設計
出典:るびま42号
gherkin書式
システムの振る舞いを記述するための自然言語に近い書式
Business Readable DSLとも呼ばれ、ベタなテストコードにメタな説明 (機能・シナリオ・ステップ) の層 (レイヤ) を付加し、プログラムの実装者でなく第三者や受け入れ者が記述し理解できる (日本語でも記述できる)
https://github.com/cucumber/cucumber/wiki/Gherkin
Gherkin書式の導入で プログラマ以外の 関係者による日本語 テストシナリオの記述
が可能に そこが画期的!!
Gerkin書式は 1.機能feature 2.シナリオ 3.ステップ
の3階層で記述
具体的な.featureファイルへ
# encoding: utf-8 # language: ja 機能: 1.画面表示確認
シナリオ: 1.トップページ確認
前提 対象ページを表示する
ならば 'ようこそ 関西Ruby会議05' が表示されていること
view01.feature
## encoding: utf-8 # language: ja 機能: 2.検索動作確認
シナリオ: 2.一覧確認
前提 対象ページを表示する
かつ 郵便番号一覧 をクリックする
ならば Zipcode が表示されていること
!
view02.feature
xx_steps.rbは featureファイルでステップ に記述した具体的な操作をRSpecとCapybaraの ライブラリの仕様にて Rubyスクリプトで実装
具体的なsteps.rbファイルへ
# encoding: utf-8 !require 'capybara/rspec' Capybara.javascript_driver = :webkit !step 'kanrk05サイトにアクセスする' do
Capybara.app_host = "http://kanrk05.ruby.iijgio.com/" Capybara.current_driver = :webkit end !step 'トップページを表示する' do
visit '/' end !step '対象ページを表示する' do
send 'kanrk05サイトにアクセスする'
send 'トップページを表示する'
end !step ":hoge が表示されていること" do |hoge|
expect(page).to have_content hoge end !
#encoding: utf-8 !
step '郵便番号一覧 をクリックする' do
#click_link '郵便番号一覧'
first(:link, '郵便番号一覧').click
end
view2_steps.rb
Excelテストケース .feature ファイル
xx_step.rb ファイル
Excelから文言を抜き出して.featureの骨組みを作るツールは作成可能
step.rbファイルを記述するにはCapybara,RspecのmatcherやWeb操作仕様の詳細を理解しておく必要があり習熟コストはかかる
自動化の肝は、.featureファイルとxx_step.rbファイルの作成
この2種類のファイルさえ作成すれば、ツール群で自動実行可能! ただしxx_step.rbに記述できない処理は当然実行できない
環境構築
Turnip入門 http://magazine.rubyist.net/?0042-FromCucumberToTurnip#l36
group :development, :test do
gem 'capybara-webkit'
gem 'headless'
gem 'rspec-rails'
gem 'spork', '~> 1.0.0rc4'
gem 'turnip'
end
Turnipインストール Gemfileでturnip..を組み込み指定 2014.2.12時点では
Turnipは1.2.0, capybaraは2.1.0, capybara-webkitは1.1.1, gherkinは2.12.2 (Rails4ではプレロードはsporkからspringに)
エンドツーエンド検証の実行
エンドツーエンド検証スクリプトを個別に実行
$ rspec -r turnip/rspec --drb spec/features/xxxxx.feature
demoサイト関西Ruby会議05用Rails4 demoサイト
高速郵便番号検索
http://kanrk05.ruby.iijgio.com/zipcodes
MOGOKは速い!
mogokでRails4は使える!(一部制約あり)
mogok無料枠美味しい!!!
テストコンテンツの 管理へ
次なるテーマ
再びまとめ• Rubyの進んだテストツールを使うと自動テストも美味しくええとこ取りできる
•エンドツーエンド(e2e)テスト自動化には Gherkin+Capybara +Turnip ライブラリが有利
•外部テスト管理ツールもそろそろExcelからWebDBに
おまけ
RSpec自体はテストを記述するためのドメイン特化言語(DSL:Domain Specific Language)を提供するフレームワークなので、まさに「言語」と
して広い範囲をカバー
feature spec、request specs、controller spec の使い分け
feature spec : システムテスト,e2eテスト
request specs : インテグレーションテスト
controller spec : ユニットテスト