20140212 develove テスト自動化のアプローチ拡張トレンド...

Post on 31-May-2015

3.139 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

テスト自動化のアプローチ拡張トレンド ~e2eはExcel項目定義手動テスト

からTurnip自動テストへ~

2014.2.12 DevLove #157 福井修 @iR3

ルビールビールビーRuby大好き

福井修@iR3

2012 Rubykaja

sendagaya.rb

#七輪life

Ruby関西cofounder2009Ruby会議スタッフ

&スポンサー

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にあり

テスト自動化のうねり

時代の流れの背景

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無料枠美味しい!!!

Turnip入門のソースコード

https://github.com/ir3/e2etest

テストコンテンツの 管理へ

次なるテーマ

再びまとめ• 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 : ユニットテスト

top related