SlideShare a Scribd company logo
1 of 31
ブラウザテスト自動化入門
テスト自動化の前に
テストの種類について
単体テスト
処理単位での仕様を満たしているかをテスト
機能テスト
機能単位での仕様を満たしているかをテスト
シナリオテスト
顧客の要求を満たしているかをテスト
非機能テスト
速度や使いやすさ、セキュリティなどをテスト
テストの自動化とは?
テストの自動化
テスト自動化(テストじどうか)とは、テスト支援ツール等を使うことにより、
ソフトウェアテストを自動化することである。
wikipedia内『テスト自動化』より引用
テスト自動化は簡単か?
テストのコスト
種類 テスト方法 コスパ 項目数
単体テスト CUIテスト ◯ 多い
機能テスト ブラウザテスト + 手動テスト △ 普通
シナリオテスト ブラウザテスト △ 少ない
非機能テスト 手動テスト X 少ない
自動化するメリットは?
メリット
テストから仕様を把握できる
不具合を恐れずにリファクタリングができる
クロスブラウザや回帰テストのコストを削減
一定の品質を保証
もちろんデメリットもある
デメリット
たまに正常なテストでも失敗する
レイアウトが少し変わっただけで失敗する
テストコードをメンテナンスするコストがかかる
テストコード自体が間違っている可能性がある
ブラウザテスト用の環境を作るコストが必要
ブラウザテストは重い
自動テストの立ち位置
自動テストの立ち位置
つまらない不具合は自動テストでふるいにかけて、手動テストで要求レベルの不
具合を見つける、ぐらいのスタンスがベスト
自動化でできること・できないこと
できること
スクリーンショット作成
FirefoxとChromeのみ、画面外は表示されない
cssセレクタを使ってクリック操作
画面遷移時の制限時間付きの待ち処理
DBの疎通確認
ログの疎通確認
メールの疎通確認
APIの疎通確認
できないこと
デザインの確認
DBの内容確認
ログの内容確認
メールの内容確認
APIの内容確認
別ベンダーやお客さんがDBをいじれる環境でのテスト
ツールの紹介
ツール
nodejs
nightwatchjs(パッケージ)
selenium-webdriver(パッケージ)
mocha(パッケージ)
Selenium Server
各種Web Driver
クロスブラウザのサーバ構成
ローカルテスト用サーバ構成
開発環境
テストコード
アプリケーション
サーバ
PhantomJs
仮想環境
検証環境でのテスト用サーバ構成
開発環境
テストコード
検証環境
アプリケーション
サーバ
モダンIE10(Seleniumサーバ)
IE10Edge同様
モダンEdge(Seleniumサーバ)
Chrome
Firefox
Edge
IE11WebDriver
Selenium
Server
モダンIE8(Seleniumサーバ)
IE8Edge同様
MacOSX(Seleniumサーバ)
SafariEdge同様
ブラウザ設定
ブラウザ設定
Chrome
Selenium Serverにchromedriverを紐付け(ブラウザのバージョンに依存)
Firefox
nightwatchにmarionetteの設定
Selenium Serverにgeckodriverを紐付け(ブラウザのバージョンに依存)
ブラウザ設定
IE
Selenium Serverにiedriverを紐付け(ブラウザのバージョンに依存)
インターネットオプションの保護設定を変更
IE11のみレジストリの変更
テストコードを一部IEのための書き方をしないと動かない場合がある
ウィンドウズから提供されているモダンIEで環境を作った場合、3ヶ月おきに環境作成と上記の
再設定が必要
Safari
Selenium Serverにsafaridriverを紐付け(ブラウザのバージョンに依存)
phantomjs
開発環境に日本語フォントを入れる
テストコード作成時のポイント
作成ポイント
DBを毎回初期化できる仕組みを作る
ボタン、リンク、入力項目のHTMLタグにIDを振る
単体テストでできるものは単体テストで行う
テスト項目の粒度は小さく保つ
開発時の流れ
開発フロー
シナリオテスト項目作成
機能テスト項目作成
実装
単体テスト項目作成
単体テストコード作成と実施
シナリオテストコード作成と実施
機能テストコード作成と実施
マージリクエスト
(GitLab)
CIで単体テスト
機能テストとシナリオテス
ト実施
マージ
(GitLab)
検証環境にデプロイコードレビュー
検証環境で自動化が
可能な場合
まとめ
まとめ
自動テストは基本的には大きな利益をもたらす
しかし、デメリットもそれなりに存在する
手動・単体・ブラウザのバランスが大事
ありがとうございました

More Related Content

What's hot

JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?Teppei Sato
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介Shinsuke Matsuki
 
異業種でのテスト自動化の実際
異業種でのテスト自動化の実際異業種でのテスト自動化の実際
異業種でのテスト自動化の実際Satsuki Urayama
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介Nozomi Ito
 
Azureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようAzureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようNaoya Kojima
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」Hiroko Tamagawa
 
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからテスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからKeizo Tatsumi
 
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告Osamu Shimoda
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前にbleis tift
 
Automation test.ssf alpha
Automation test.ssf alphaAutomation test.ssf alpha
Automation test.ssf alpharyuji koyama
 
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプラインkyon mm
 
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンスNozomi Ito
 
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015Kotaro Ogino
 
はじめてのTeam foundation server執筆裏話
はじめてのTeam foundation server執筆裏話はじめてのTeam foundation server執筆裏話
はじめてのTeam foundation server執筆裏話Kazushi Kamegawa
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンスNozomi Ito
 
手動テストからの移行大作戦
手動テストからの移行大作戦手動テストからの移行大作戦
手動テストからの移行大作戦Satsuki Urayama
 
20170704 Pitaliumの新機能
20170704 Pitaliumの新機能20170704 Pitaliumの新機能
20170704 Pitaliumの新機能Osamu Shimoda
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013Kinji Akemine
 
20150418 システムテスト自動化 第一章
20150418 システムテスト自動化 第一章20150418 システムテスト自動化 第一章
20150418 システムテスト自動化 第一章Yuki Fujisawa
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014Nozomi Ito
 

What's hot (20)

JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?
 
自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介自動テスト知識体系TABOKのご紹介
自動テスト知識体系TABOKのご紹介
 
異業種でのテスト自動化の実際
異業種でのテスト自動化の実際異業種でのテスト自動化の実際
異業種でのテスト自動化の実際
 
Selenium boot campの紹介
Selenium boot campの紹介Selenium boot campの紹介
Selenium boot campの紹介
 
Azureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようAzureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめよう
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
 
テスト自動化のこれまでとこれから
テスト自動化のこれまでとこれからテスト自動化のこれまでとこれから
テスト自動化のこれまでとこれから
 
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告
 
テストの自動化を考える前に
テストの自動化を考える前にテストの自動化を考える前に
テストの自動化を考える前に
 
Automation test.ssf alpha
Automation test.ssf alphaAutomation test.ssf alpha
Automation test.ssf alpha
 
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
#STAC2014 状態遷移を活用した自動テストのテスト戦略とデプロイメントパイプライン
 
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
 
はじめてのTeam foundation server執筆裏話
はじめてのTeam foundation server執筆裏話はじめてのTeam foundation server執筆裏話
はじめてのTeam foundation server執筆裏話
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
手動テストからの移行大作戦
手動テストからの移行大作戦手動テストからの移行大作戦
手動テストからの移行大作戦
 
20170704 Pitaliumの新機能
20170704 Pitaliumの新機能20170704 Pitaliumの新機能
20170704 Pitaliumの新機能
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
 
20150418 システムテスト自動化 第一章
20150418 システムテスト自動化 第一章20150418 システムテスト自動化 第一章
20150418 システムテスト自動化 第一章
 
海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014海外のSeleniumカンファレンスではどんな発表がされているのか2014
海外のSeleniumカンファレンスではどんな発表がされているのか2014
 

Similar to ブラウザテスト自動化入門

アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考えるyasuohosotani
 
アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。Dai FUJIHARA
 
SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」yasuohosotani
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストShuji Watanabe
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方Akira Suenami
 
Test Automation Journey 2023 useful knowledge to start test automation
Test Automation Journey  2023 useful knowledge to start test automationTest Automation Journey  2023 useful knowledge to start test automation
Test Automation Journey 2023 useful knowledge to start test automationSadaaki Emura
 
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか #rakutentech
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか  #rakutentech【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか  #rakutentech
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか #rakutentechKotaro Ogino
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門Satoshi Watanabe
 
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理慎一 古賀
 
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Naoto Kishino
 
Et west テスト自動化_公開版
Et west テスト自動化_公開版Et west テスト自動化_公開版
Et west テスト自動化_公開版Noriyuki Mizuno
 
失敗から学ぶテスト自動化導入で大切なこと
失敗から学ぶテスト自動化導入で大切なこと失敗から学ぶテスト自動化導入で大切なこと
失敗から学ぶテスト自動化導入で大切なことsono susumu
 
自動テストの品質とテストパターン
自動テストの品質とテストパターン自動テストの品質とテストパターン
自動テストの品質とテストパターンToru Koido
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上Tatsuya Ishikawa
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本Tsuyoshi Yumoto
 
テスト自動化の現場から~テスト自動化の保守の話~
テスト自動化の現場から~テスト自動化の保守の話~テスト自動化の現場から~テスト自動化の保守の話~
テスト自動化の現場から~テスト自動化の保守の話~Satsuki Urayama
 
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介slideshar0801
 
テスト自動化とアーキテクチャ
テスト自動化とアーキテクチャテスト自動化とアーキテクチャ
テスト自動化とアーキテクチャToru Koido
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説Kinji Akemine
 

Similar to ブラウザテスト自動化入門 (20)

アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
 
アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。
 
SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
テストとの上手な付き合い方
テストとの上手な付き合い方テストとの上手な付き合い方
テストとの上手な付き合い方
 
Test Automation Journey 2023 useful knowledge to start test automation
Test Automation Journey  2023 useful knowledge to start test automationTest Automation Journey  2023 useful knowledge to start test automation
Test Automation Journey 2023 useful knowledge to start test automation
 
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか #rakutentech
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか  #rakutentech【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか  #rakutentech
【楽天テックカンファ前夜祭2014】誰がテスト自動化をするべきか #rakutentech
 
テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門テスト初心者Androiderのためのソフトウェアテスト入門
テスト初心者Androiderのためのソフトウェアテスト入門
 
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
 
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
 
Et west テスト自動化_公開版
Et west テスト自動化_公開版Et west テスト自動化_公開版
Et west テスト自動化_公開版
 
失敗から学ぶテスト自動化導入で大切なこと
失敗から学ぶテスト自動化導入で大切なこと失敗から学ぶテスト自動化導入で大切なこと
失敗から学ぶテスト自動化導入で大切なこと
 
自動テストの品質とテストパターン
自動テストの品質とテストパターン自動テストの品質とテストパターン
自動テストの品質とテストパターン
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 
テスト自動化の現場から~テスト自動化の保守の話~
テスト自動化の現場から~テスト自動化の保守の話~テスト自動化の現場から~テスト自動化の保守の話~
テスト自動化の現場から~テスト自動化の保守の話~
 
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
スマホアプリ・サイトの実機検証・自動テストサービスーMovaTestingのご紹介
 
テスト自動化とアーキテクチャ
テスト自動化とアーキテクチャテスト自動化とアーキテクチャ
テスト自動化とアーキテクチャ
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 

ブラウザテスト自動化入門

Editor's Notes

  1. テストには大きく分けて4つあります。 単体テストは実装した処理が仕様を満たしているかをコードレベルでテストします。 機能テストはブラウザから操作して、その結果が仕様通りに表示されるか。DBに反映されているか。メールが送られているか。ログは書き込まれているか。などの外部装置との連携を含めたテストをします。 シナリオテストはお客さんとの間で決めた要求をみたしているかをユースケースを使ってテストします。 非機能テストは速度やセキュリティなど、機能に含めていない部分のテストをします。
  2. 単体テストはCUI上で完結します。ブラウザやDBなどを含まないので動作が軽く、作成方法もシンプルです。項目数は多いですが作成が簡単なのでコスパはいいです。 機能テストはブラウザで確認できる部分はブラウザテスト、メールなどは手動でテストします。HTMLのタグを調べながらテストを作るので単体よりも時間がかかります。項目自体も多いため一番コストがかかる部分です。 シナリオテストは機能テストと同じ内容です。項目数は少ないため作成は割と簡単にできると思います。 非機能テストは人の目での確認になるので自動化はほぼ出来ません。「何秒以内に表示される」のようなテストはシナリオテストなどで自動化は可能です。 これから説明するのは機能テスト、シナリオテストにあるブラウザテストについてです。
  3. テストから仕様を把握する:テストと仕様は1対1になるように作るので、アジャイル場合はテスト項目の一覧を仕様書代わりにしてたりします。 不具合を恐れずにリファクタリングができる:修正後にテストを回すことによって、不具合が出た場合に確認できるので安心感があります。 クロスブラウザや回帰テストのコストを削減:3回以上同じテストを繰り返す場合は自動化したほうがコストが下がります。 一定の品質を保証:自動テストが通ることで正しく実装されていることを保証できます。
  4. たまに正常なテストであっても、OSに負荷がかかってブラウザの立ち上がりが遅いなどでエラーになったりします。 要求や機能に変更がなくてもボタンの位置が変更になったり、divタグをpタグに変更するなどでエラーになります。 テストの自動化全般に言えることですが、定期的に実行してメンテナンスしていかないとすぐに使えなくなってしまいます。 テストコード自体がバグっている可能性があります。ほんとは失敗するべきところで成功をかえすなど。 この後、説明しますがテストコード通りにブラウザを操作するために色々と設定が必要になってきます。 単体テストに比べるとブラウザテストは重いです。ですが、手動で行うよりかは速いです。
  5. 先ほど述べた通り、メリットもあればデメリットもあるため、自動テストさえしていれば大丈夫というわけにはいきません。手動テストをなくすというよりも、手動テストから煩わしい部分をなるべく減らすために行うと考えたほうがいいです。
  6. スクリーンショットを取ることが可能ですが、FirefoxとChromeは画面外の部分は表示されません。テストコード上でスクロールする処理を書く必要があります。
  7. デザイン崩れなどはスクリーンショットを取って目視で確認する必要があります。 DBやログなどの内容は確認できません。 テスト時に毎回DBを初期の状態に戻す必要があるので、ほかの人がDBをいじる環境ではテストが失敗する可能性があります。
  8. 今回テストコードを書くためにnodejsを利用しましたが。JAVAやPHP、Rubyなどでも可能です。基本どのツールでも同じことができるのですがnightwatchjsが一番簡潔に書けました。 ローカル環境で実行する場合はSeleniumサーバは必須ではないですが、Macで仮想環境のIEで確認をする場合などに必要になります。 ブラウザごとにWebドライバを公式サイトからダウンロードしてくる必要があります。これがないとテストコードの内容をブラウザに伝えることができません。
  9. ローカルの場合、PhantomJsという見えないブラウザをインストールすることで簡単に環境を作ることができます。もし、Chromeなどでテストしたい場合は、この後に紹介する検証環境のサーバ構成を作ってテストする必要があります。
  10. クロスブラウザテストの構成です。 仮想環境にChrome、Firefox、IE系をインストールして、各仮想環境とMacにSeleniumサーバを立てて、各Webドライバと連携させています。
  11. IEの設定が一番煩雑です。また、モダンIEの場合、この煩雑な作業を3か月おきに各バージョンごとに行う必要があります。 phantomjsはCUIで動きます。なので、仮想の開発環境に一緒に入れておくことができるのですが、日本語フォントを入れておかないとスクリーンショットを取ったときに文字化けします。
  12. ボタンやリンクにIDを振ることで、デザインが変わってもテストコードをなるべく修正する必要がなくなります。 ブラウザテストはコストパフォーマンスが悪いので、単体テストでできる内容までブラウザテストに回すとコストが高くつきます。 一つのテスト項目に複数のテスト結果を含めることができるのですが、エラーになったときに原因の特定が大変になります。項目はなるべく原因を特定しやすい単位まで小さくする必要があります。
  13. テスト項目作成はテストコードの中身は書かずに項目部分だけをコーディングします。 実装と単体テストを繰り返します。 実装完了後に機能テストとシナリオテストを書きます。 マージリクエスト後にレビュアーは実装とテストコードのレビューをします。 実際にテストコードを動かしてみます。 自身で軽く操作もしてみる。 問題がなければマージします。