SlideShare a Scribd company logo
テスト自動化のアプローチ拡張トレンド
∼e2eはExcel項目定義手動テスト
からTurnip自動テストへ∼

2014.2.12 DevLove #157
福井修 @iR3
ルビールビールビー
Ruby大好き
福井修@iR3
2012 Rubykaja
sendagaya.rb
#七輪life

Ruby関西cofounder

2009Ruby会議スタッフ

&スポンサー
2002年KOFにて Matzを囲む
エンドツーエンドにはTurnip
from 2009.11
刻言道場「まいトレ」
http://maitore.net/
販売管理・在庫管理システム

株式会社 iRubySystems
世間の動向
ドメイン特化言語
(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にあり
時代の流れの背景

テスト自動化のうねり
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
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
経営


評価

リーン

Biz
開発


検証


運用


Dev

Ver

Ops

設計→実装→テスト
↓
↑
ここを俊敏に繰り返し

やるのがAgile,TDD/BDD

(回帰テスト)

システムテスト

受け入れテスト

e2eテスト

2013.9.21toRuby「カジュアルにテストして、 フォーマルに検証する」に加筆
経営


評価

リーン

Biz
開発


検証


運用


Dev

Ver

Ops

設計→実装→テスト
↓
↑
ここを俊敏に

繰り返し

やるのがAgile

フォーマル

に検証

カジュアル

にテスト
『自動テストのニーズはベタからメタへ』
!

 ベタ ←――――――――――――――→ メタ
Unit Test → Integration Test       
         → System Test、e2eTest
→ 回帰テスト
るびま42号 「エンドツーエンドテストの自動化は Cucumber から Turnip へ」を編集
Unitテスト自動化
↓
e2eテスト自動化
『テストツールもベタからメタへ』
!

 ベタ ←――――――――――――――→ メタ
!

 Test::Unit → RSpec
→ Gherkin (Cucumber/Turnip)
るびま42号 「エンドツーエンドテストの自動化は 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ファイルへ
view01.feature
# encoding: utf-8

# language: ja

機能: 1.画面表示確認

シナリオ: 1.トップページ確認

前提 対象ページを表示する

ならば 'ようこそ 関西Ruby会議05' が表示されて
いること
view02.feature
## encoding: utf-8

# language: ja

機能: 2.検索動作確認

シナリオ: 2.一覧確認

前提 対象ページを表示する

かつ 郵便番号一覧 をクリックする

ならば Zipcode が表示されていること

!
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
view2_steps.rb

#encoding: utf-8

!

step '郵便番号一覧 をクリックする' do

#click_link '郵便番号一覧'

first(:link, '郵便番号一覧').click

end
自動化の肝は、.featureファイルとxx_step.rbファイルの作成
この2種類のファイルさえ作成すれば、ツール群で自動実行可能!
ただしxx_step.rbに記述できない処理は当然実行できない

Excelテストケース

.feature
ファイル

xx_step.rb
ファイル

Excelから文言を抜き出
して.featureの骨組みを
作るツールは作成可能

step.rbファイルを記述するには
Capybara,Rspecのmatcherや
Web操作仕様の詳細を理解し
ておく必要があり習熟コストは
かかる
環境構築
Turnip入門
http://magazine.rubyist.net/?0042-FromCucumberToTurnip#l36
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に)

group :development, :test do
gem 'capybara-webkit'
gem 'headless'
gem 'rspec-rails'
gem 'spork', ' > 1.0.0rc4'
gem 'turnip'
end
エンドツーエンド検証の実行
エンドツーエンド検証スクリプトを個別に実行

$ rspec -r turnip/rspec --drb
spec/features/xxxxx.feature
demoサイト
関西Ruby会議05用Rails4 demoサイト

高速郵便番号検索 

http:/
/kanrk05.ruby.iijgio.com/zipcodes
MOGOKは速い!
mogokでRails4は使える!(一部制約あり)

mogok無料枠美味しい!!!
Turnip入門のソースコード
https:/
/github.com/ir3/e2etest
次なるテーマ

テストコンテンツの
管理へ
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜
再びまとめ
• 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 : ユニットテスト

More Related Content

20140212 develove テスト自動化のアプローチ拡張トレンド 〜Excel項目定義手動テストから自動テストへ〜