LoginSignup
4
14

More than 5 years have passed since last update.

テスト!テスト!テスト!〜Seleniumの役割を明確にしてちょうどいいテスト自動化を実現〜

Last updated at Posted at 2017-10-21

テストって?

優しいIT亀井です^ ^
みなさーんテストしていますか?テストするのは当たり前ですよね?
ここでいう「テスト」は自動化されたテストです。テスト自動化はもはや当たり前です。2005年から「テストコードがないコードはレガシーコードだ!(レガシーコード改善ガイドより)」といわれています。
下記のような弊害あります。

テスト自動化しないと

  1. コスト高 テストにかかるコストが増える
  2. 品質低下 リリース後にバグが発見される
  3. テストは面倒臭い
  4. プログラマが改修をしたがらなくなる

管理者(マネジメント)の観点から、テストにかかるコストは頭が痛いのではないでしょうか?
横軸:工程
縦軸:コスト(設計に対し、リリース後は100倍のコストともいわれる!!!)
chart.png

プログラマの視点でいうと、「バグがあるかも」という心理的負担は非常にストレスがかかります。

さすがに、「テスト自動化しているよ」という声も多くなってきました。
しかし、テストコードを書き始めると次のような問題が発生します。

テスト自動化の課題

  1. テストコードを書く負荷が増える
  2. テスト実行に時間がかかる
  3. 属人化する
  4. 人的リソースが少ない

課題1. テストコードを書く負荷が増える

本来、プログラマの負担を経験する目的があるのに、テストコードのメンテナンスコストが増えるのは本末転倒です。

課題2. テスト実行に時間がかかる

後述しますが、テストコードが肥大化し、テスト実行に時間がかかってしまうとCIが回らなくなります。

課題3. 属人化する

回帰テスト(リグレッションテスト)をする際に、Seleniumなどのツールを使う時に、仕様が独特なので、属人化しがちです。
誰でも改修できるプログラムであることが重要です。

課題4. 人的リソースが少ない

どこの現場も(私たちの現場も 笑)リソースが少ないので、最低限の労力で最大の価値を出すのが理想です。

テスト自動化のメリットを生かしつつ、課題を解決する方法を紹介します^ ^

テストレイヤーを明確にする

回帰テスト(リグレッションテスト)のツールにSeleniumがあります。非常に便利なツールで、できることも多く、全世界で使われています。

Seleniumの強み
1. クロスブラウザ・クロスハードウェアのテスト
2. ユースケースごとのテスト
3. 画面遷移など動作のテスト

1. クロスブラウザ・クロスハードウェアのテスト

  • Chrome
  • FireFox
  • Safari
  • IE
  • Edge など様々なブラウザでテスト可能です。また、異なるOSやハードウェアでもテスト可能です。

OS
- Windows
- macOS
- iOS
- Android

ハードウェア
- PC
- Mac
- Android

2. ユースケースごとのテスト

  • ログイン前
  • ログイン後
  • ステータス違い

ログイン前後で画面が変わったり、その利用者のステータスで画面が変わるなど、様々なユースケースがある場合、ユースケースごとにテストすることが可能です。

3. 画面遷移など動作のテスト

しかし、ブラウザごとの仕様が異なったり、Selenium特有のテクニックがあるので、属人化しがちです。
また、テスト項目が増えると非常に遅くなります。

Seleniumの役割を明確にするために、テストレイヤーを明確にすることで、Seleniumにしかできないこと、Seleniumが得意なことだけを実行します。

テストレイヤー

一般的なMVCのシステム構成図は下記の通りです。4つのポイントでテスト自動化が可能です。
autodraw 2017-10-21 12-36-21.png

テストレイヤーは下記の通りとします。
テストレイヤー

このように、テストレイヤーごとに役割を明確にします。
ユニットテストと、インテグレーションテストはバックエンド。
ビューユニットテストとリグレッションテストはフロントエンド。
と分けます。※バックエンドは後日記事にします。

上記を踏まえると、リグレッションテストとビューユニットテストの役割を明確にします。
ビューユニットテストは項目ごとの表示をテスト(文字の修飾など)します。リグレッションテストでも可能ですが、速度はビューユニットテストの方が速いです。
例えば、セレクトボックスに値がセットされるなどもビューユニットテストで行います。

上記より、リグレッションテスト対象は
1. 画面遷移
2. モーダル表示
3. 何かしらの動作とその結果
をテストします。

まとめ

Seleniumでは、画面遷移やモーダル表示などを伴うテストをクロスブラウザ・クロスハードウェアでテストすると役割を明確にすることで、テストコード負荷や属人化などの課題を解決しつつ、効果を最大化することができると考えます。

次回からは、実際のソースコードを参考にSeleniumのプラクティスを紹介します。

参考書

レガシーコード改善ガイド
Selenium実践入門

関連記事

いまこれ テスト!テスト!テスト!〜Seleniumの役割を明確にしてちょうどいいテスト自動化を実現〜
Seleniumの要素を特定する(ベスト?)プラクティス xpath記法とdata属性の合わせ技

4
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
14