Turnipによる
エンドツーエンドテスト
ことはじめ
第10回 長崎IT技術者会
2016/1/23(Sat) 氏田孝幸
自己紹介
 氏田孝幸(うじたたかゆき)
 ~2015年8月 某IT企業で、プログラマとか社内SEとか
 BtoBのWebアプリの開発メイン
 一番使ってた言語はJava(すべて独自FW!)
 Ruby On Railsは経験ゼロ
 2015年9月~ 第三者検証会社でテストエンジニア
 Webサービスのテスト実装、テスト実行
 最近の活動・参加コミュニティ
 JSTQB AL 試験対策勉強会主催
 長崎IT技術者会スタッフ など
参考資料
 るびま「エンドツーエンドテストの自動化は Cucumber から
Turnip へ」
http://magazine.rubyist.net/?0042-FromCucumberToTurnip
 スクラムの受け入れ条件と対応させてTurnipで自動テストを書く
http://dev.classmethod.jp/server-side/turnip-acceptance-
testing-2/
 受け入れテストとは、顧客(ユーザー目線)でのテストのこと。
http://morizyun.github.io/blog/the-rspec-book-review-rails/
このスライドは、主にるびまの影響を受けて作りました
今日の目的(ゴール)
 経験ゼロの自分がTurnipを動かすところまで
を紹介する
 Turnipをちょっとだけ理解してもらう
 何かできそうな気になってもらう
Turnipのその前に…
 Ruby on Rails が動く環境が必要です
 ホストOS:Windows10
 ゲストOS:CentOS6.7
 Ruby:2.2.4
 Rails:4.2.5
 MySQL:5.6.28
 この辺の話はQiitaにまとめてます
Turnipとは?
 Ruby on Railsの自動テストツール(RSpec)の
テストの手順などを定義するためのDSLです。
 分かりやすい日本語でテストの概要を書けます。
 そのため、プログラマでなくても自動テストが
何をしてるか理解しやすくなったりします
 でも実は、Turnipを使わずRSpecだけでも
自動化は実現できちゃいます。
RSpec
Steps
開発者
ユーザ/
第三者
よっしゃ
任せろ!
・・・
Turnipがなかったら・・・
RSpec
Steps
開発者
ユーザ/
第三者
協力
するお
一緒に
やるお
Turnipがあると
feature
自動化してみよう
自動化の手順
1. テストする内容(シナリオ)を決める
2. シナリオをもとにfeatureファイルを作る
3. stepsファイルを作る
4. テストを実行する
自動化の手順
1. テストする内容(シナリオ)を決める
2. シナリオをもとにfeatureファイルを作る
3. stepsファイルを作る
4. テストを実行する
テストする内容(シナリオ)を決める
 ①トップ画面に遷移する
テストする内容(シナリオ)を決める
 ②New Blogリンクを押して作成画面を開く
テストする内容(シナリオ)を決める
 ③タイトルと本文を入力する
テストする内容(シナリオ)を決める
 ④Create Blogボタンを押して投稿する
テストする内容(シナリオ)を決める
 ④タイトルと本文の内容をチェック
自動化の手順
1. テストする内容を決める
2. featureファイルを作る
3. stepsファイルを作る
4. テストを実行する
featureファイルを作る
 テストする内容を、
機能 / シナリオ / ステップ の構成で書く
 その時使うのがGherkin記法
 ファイル名はxx.featureとなります
featureファイルを作る
#encoding: utf-8
#language: ja
機能: ユーザはブログ記事を作成できる
ブログ投稿機能のテストを行います
@blog
シナリオ: タイトルと本文を入力して記事を作成できること
もし トップを訪問する
かつ Newリンクをクリックする
かつ タイトルと本文を入力して作成ボタンを押す
ならば 作成したタイトルが表示されていること
かつ 作成した本文が表示されていること
featureファイルを作る
#encoding: utf-8
#language: ja
機能: ユーザはブログ記事を作成できる
ブログ投稿機能のテストを行います
@blog
シナリオ: タイトルと本文を入力して記事を作成できること
もし トップを訪問する
かつ Newリンクをクリックする
かつ タイトルと本文を入力して作成ボタンを押す
ならば 作成したタイトルが表示されていること
かつ 作成した本文が表示されていること
Featureファイルを
日本語で書くためのおまじない
stepsファイルと連携する
ために書いておく
featureファイルを作る
#encoding: utf-8
#language: ja
機能: ユーザはブログ記事を作成できる
ブログ投稿機能のテストを行います
@blog
シナリオ: タイトルと本文を入力して記事を作成できること
もし トップを訪問する
かつ Newリンクをクリックする
かつ タイトルと本文を入力して作成ボタンを押す
ならば 作成したタイトルが表示されていること
かつ 作成した本文が表示されていること
テストしたい機能。
ユーザーストーリーとか、
「○○機能」とか。
featureファイルを作る
#encoding: utf-8
#language: ja
機能: ユーザはブログ記事を作成できる
ブログ投稿機能のテストを行います
@blog
シナリオ: タイトルと本文を入力して記事を作成できること
もし トップを訪問する
かつ Newリンクをクリックする
かつ タイトルと本文を入力して作成ボタンを押す
ならば 作成したタイトルが表示されていること
かつ 作成した本文が表示されていること
テストシナリオ
(テストしたいこと)の要約。
featureファイルを作る
#encoding: utf-8
#language: ja
機能: ユーザはブログ記事を作成できる
ブログ投稿機能のテストを行います
@blog
シナリオ: タイトルと本文を入力して記事を作成できること
もし トップを訪問する
かつ Newリンクをクリックする
かつ タイトルと本文を入力して作成ボタンを押す
ならば 作成したタイトルが表示されていること
かつ 作成した本文が表示されていること
テストシナリオの
画面操作と合格条件。
自動化の手順
1. テストする内容を決める
2. featureファイルを作る
3. stepsファイルを作る
4. テストを実行する
stepsファイルを作る
1. featureファイルのステップ
に対応する具体的な処理(スクリプト)を書く
2. スクリプトはRSpecを使って書いていきます
3. ファイル名はyy_steps.rbとなります
stepsファイルを作る
steps_for :blog do
step 'トップを訪問する' do
visit 'blogs'
end
step 'Newリンクをクリックする' do
click_link 'New Blog'
end
:以下略
stepsファイルを作る
steps_for :blog do
step 'トップを訪問する' do
visit 'blogs'
end
step 'Newリンクをクリックする' do
click_link 'New Blog'
end
:以下略
featureファイルの
@blog に対応する部分
stepsファイルを作る
steps_for :blog do
step 'トップを訪問する' do
visit 'blogs'
end
step 'Newリンクをクリックする' do
click_link 'New Blog'
end
:以下略
もし トップを訪問する
かつ Newリンクをクリックする
かつ タイトルと本文を入力して作成ボタンを押す
ならば 作成したタイトルが表示されていること
かつ 作成した本文が表示されていること
テスト自動化の手順
1. テストする内容を決める
2. featureファイルを作る
3. featureを満たすstepsファイルを作る
4. テストを実行する
実行する
$ bundle exec rspec -fd
※パラメータについて…
-[f]ormat Choose a formatter.
[p]rogress (default - dots)
[d]ocumentation (group and example names)
[h]tml
[j]son
custom formatter class name
実行する
$ bundle exec rspec -fd
実行する
$ bundle exec rspec -fd機能とシナリオの内容
実行する
$ bundle exec rspec -fdステップの内容
実行する(おまけ)
$ bundle exec rspec -fh > result.html
最後に
 Turnipを使うことで、プログラマでない第三
者やユーザにとって自動テストが理解しや
すいものになります
 Railsで自動化を推進している現場であれば、
比較的導入しやすいかと思います。
 そうでない方も、ぜひチャレンジしてみて
ください!

Turnipによるエンドツーエンドテストことはじめ