“Turnip or RSpec” x Appium

過去、こちらにて、AppiumにおけるテストシナリオをTurnipとRSpecのそれぞれの記述で比較してみました。
当時からまたいろいろ試し、考えてみた結果、ひとまずこうかな、という結論に達したのでメモがてら。

Appiumはその性質上、いわゆるE2Eのテスト自動化に使います。そのため、例えばStory Testを行うためのツールとして使えるかなと思っています。

Agile Testingでは、Regression Testの一つとして多くはUser Storyをテストしますね。そこにつなげるわけです。テストがUser Storyと紐づくようになるのであれば、User Storyの共有をテストでできるようになるかもしれませんね。さらには、テストにUser Storyの共有という別の価値も生まれるわけです。

また、CodeとTestは近い位置で管理するほうがメンテしやすいと思うのですよね。そういう意味では同じリポジトリで管理したい。

この段階までは特に変わらず。RSpecとTurnipは同様です。

ここから差が出てくる所なのですが、テストの実装とシナリオを分離させたいなと思っています。これは、実現したいストーリーと、その実装箇所を分離することで振る舞いが変わっても、実現したいことを変えないように実装やテストをメンテナンスできる世界になるのではないかなと思っているからです。

これを実現するためには、RSpecよりもTurnipのほうが適しているのかなと思います。つまり、RSpecはdescribe, contextやitにて補足はできますが、それらの記述のすぐそばにコードが置かれることになるので、テストの実装とシナリオを整理して分けるには少し手間取りそう。

一方、TurnipはRailsアプリの検証でもE2E向けを意識しているだけあって、その用途としてシナリオを記述する箇所とその具体実装は別ファイルで分けられています。機構としてTurnipの実装箇所はRSpecなので、RSpecによる実装の柔軟性はTurnipは同様に教授できるわけですね。そうなれば、User Storyに紐づくシナリオをいかに同様な価値あるものとして保守していくか、になると思っています。

メンテナンスの側面を考えてみても、シナリオ自体も複雑にしなければ少ない共通な実装で多くのシナリオをカバーできるので、実装に対するメンテナンスコストはそれほどではないでしょう。また、User Storyがシナリオのおおもとになるので、ある程度の抽象度を持ったシナリオとその手順にわけて記述すれば、

シナリオを修正する = User Storyを見直す

ことに近くなり、テストの変更/メンテナンスはUser Storyの価値の見直しに近い状態になるので、シナリオと実装を区分するからメンテナンスコストが跳ね上がるとか、そういう世界にはならないでしょう。

というわけで、Appiumを使うレベルのテストを行うなら、TurnipのほうがAgileやLEANではより良いのかなと、個人的には思うのでした。

蛇足
Cucumber形式でE2Eのテストを管理していたけれど、思ったような結果が得られなかった、という話を聞いたことがあります。
Webアプリの、さらにはCucumber形式でブラウザ越しに操作し、画像キャプチャをして正誤性を確かめようとしたのかもしれません。何を試験したいか、によって大きくテスト効率が変わってくることもおおいのですが、現段階では表示要素の確認とか、明らかに正しいといえる場合以外は人が判断できるようにするとか、そういう所を考えた上で対応しなければいろいろ残念になりそうですよね。

Advertisements

One thought on ““Turnip or RSpec” x Appium

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s