はじめに
C#でSelenium2を使用して主要ブラウザを動かしてみたから結構時間が経過してしまいました。
今回はUI自動テストツールを作成した際に感じた事を記載してみたいと思います。
どのようなものを作成したか
独自フォーマットのテストケースを作成し、
それを元に実行させて成功時、エラー時などスクリーンショットをとる。
また、失敗した祭にメッセージをチャットで通知する。
簡単に言ってしまえばSeleniumIDEを自前で作成してような形になります。
ちなみに開発環境はVisual Studio, C#です。
SeleniumIDEとは何が違うのか
- 独自のフォーマットのテストケースで記載できる
- ひとつの実行ファイルで各ブラウザに対応できる
- チャットツールとの連携
- 各種カスタマイズが可能
作成後感じたこと(今回の主題)
- クロスブラウザには対応したがWindowsに依存してしまった
- テストケースを完全に独自仕様にしてしまった
- ブラウザにより微妙にSelenium2の挙動が異なる
- UIテストに頼りがちになってしまう
- うまく周りを巻き込まないと破綻してしまう
- なにが原因で失敗したかの原因が特定しずらい
- 保守するのが難しい(後回しになってしまう)
- 確認対象のサイトのつくりに問題が...
上記についてひとつひとつ見ていきます。
クロスブラウザには対応したがWindowsに依存してしまった
いきなり大問題。
UIテストと言われるのだからマルチプラットフォームに対応すべき。
Windowsは自動でもMacでは結局ぽちぽちしないと行けないとか、、、
Xamarinで今は対応できるのかも。。。
テストケースを完全に独自仕様にしてしまった
HTMLをある程度知っている人なら誰でも作成できるようにしたフォーマットで作成したものの、
テストケースを作る際はブラウザでDOMを探してひとつひとつ操作を記載する必要がありとにかく作成するのが大変。
つ、つらすぎた、、、
テストケース作成時はSeleniumIDEを利用してある程度フォーマットを合わせるのをおすすめします。
ブラウザにより微妙にSelenium2の挙動が異なる
これは仕方ないのかもしれませんが、結構細かく問題になってくる。
テストツール作成時に気を付けないと結構はまります。うまく実装すれば回避できると思います。
ググれば問題の解決方法が出てくると思うので今回は細かくは触れません。
UIテストに頼りがちになってしまう
UIテストでなんでも解決できると思う輩が出現する。
とにかくUIテストでカバーできると思う人がいる。
違います。向き不向きがあるので何でもカバーできるわけではありません。
必ず単体テスト等も必要です。
うまく周りを巻き込まないと破綻してしまう
これは今回のことではなくすべてのことで言えると思います。
いくら自分が頑張ったとしても周りの人にも一緒になって動いてもらわないと確実に不可能です。
行ってくれるまで忍耐強く言い続けましょう。
なにが原因で失敗したかの原因が特定しずらい
これも何かいい方法がないか模索中。
基本問題があった際にチェックするものがテストした際のスクショになるため原因特定する際は、
スクショ確認→自動テストツールのログ確認→該当のサイトのログ確認といった手順になりなかなか解決が難しい。
結局もう一度テストケースを実行してみたらうまく実行できるとかも結構あったりしました。
ある程度の予測はできるが結局もう一度実行してみてどこで失敗したかを追っていくということになってしまい、
案外時間がかかってしまいます。
保守するのが難しい(後回しになってしまう)
私の知る限りテストに時間を使えないプロジェクトが一般的と言うのもわかっております。
テスト時間がとれず、頻繁に仕様が変わるようなサイトでの運用はなかなか厳しいものがあるように感じます。
確認対象のサイトのつくりに問題が...
これは論外の話になってしまうかもしれませんが、いち画面にIDが複数あったりそもそもの問題です。
作成した人に勉強し直してくださいと忠告しましょう。うそです。
この問題を発見できたことを良しとして修正しましょう。
まとめ
たしかにUIテストはとても便利で、当たり前の様に運用できる状態になればとても便利です。
ただ、やはり安定運用まで持っていくのはなかなか大変かと感じました。
また、個人的に感じた事は、UIテストとして目的を細い動作等のチェックは行わずに、
対象のサイトをクローリングしキャプチャを取得して、それは毎日チェックを行いレイアウト崩れ等の発見を目的に導入するのがいいと感じました。