SauceLabsを使ってAndroid/iOSの自動テストを外に出してみた

最近、いくつかCI環境のサービスを調べているのですが、どうせならモバイルアプリのテストも外サービスに出して、サービス開発に力を注げるような環境を構築できたらなと思いSauceLabsを使ってみました。

SauceLabsを使った理由としては、Appiumの開発に強く関わっているところだからなだけです。

良い点

  • 各々の操作時にスクリーンショットをSauceLab側でキャプチャしてくれるので、シナリオの中でどこでキャプチャをとるとかをいちいち考えなくてよい
    • この操作起因でAppium Serverが不安定になる懸念を除ける!
  • ビデオも撮ってくれる
    • 不具合発生時の再現画面をみることができる
  • 実行環境のメンテナンスを外に任せることができる
    • iOSもAndroidも同時実行できる環境を用意するのは結構面倒。
    • Appium + Seleniium Gridや、少し頑張れば自前でも分散環境作れるけれど
      • 自前で少し作ったことありますが、保守する所を外に出せるって、テストに集中できるのであり互いのですよね。
  • AppiumをOSSとして提供しているので、シナリオ自体の動作確認を手元でできる(料金体系の外でできる)のは良い

懸念点

  • Pricingの体系が、月々の価格によっている
    • E2Eのテストは多くの場合実行に時間がかかるので、優先度をつけての良い取捨選択を結構シビアにする必要がでてきそう
    • DailyやWeeklyというような間隔で実行する形でないと、例えばコミット毎とかは時間の縛り上無理そう

では、内容。
Androidに関しては、実際に試用したコードも載せてます。

続きを読む »

Appiumを使ってRSpecの記述とTurnipの記述とで、結局はどちらが受け入れとして使えそうか

比較的、ぱっと見て操作を想像できることが受け入れ試験では大事だと思います。
そう考えると、RSpecはshared_exampleなんかで操作をまとめることができるのですが、Turnip/Cucumber形式のシナリオアウトラインを使った方が綺麗にかけそう。

一方、capybaraのように、RSpecの拡張としてFeature specを使うこともできる形があります。なら、Appiumを使って同様に受け入れ試験の形を模倣するならば、CapybaraのFeature specを参考に類似した記述を模倣すれば、RSpecのみである程度読みやすい受け入れ試験もかけるかもと思い、以下をまとめてみた。

続きを読む »

EveryDayRailsSpecを復習がてらやった、Cucumberは白痴?

https://leanpub.com/everydayrailsrspec
https://github.com/everydayrails/rspec_rails_4

これは、RailアプリをSpec含めてまるっと学ぶために良い知見を与えてくれます。
Code School もやってみようかな。

続きを読む »

QuickCheck on RSpec

CIで何回も回すから味の出てくるテストケースを考えてみる にも書いたように、同値に区分されるテストデータの集合に対してテストを実施する場合、ランダムな値でテストデータのバリエーションを増やすことは現実的な選択肢としてありと思う。また、全網羅が難しいテスト対象の領域に対してこのようにランダムな値を適用することは現実的な選択肢になる。
※ランダム性は議論の範囲外

ここでは、以前から知られているQuickCheckを以下でRubyのコードを使ってためしていく。
また、先日書いた RSpecによるテストコードでパラメタライズドテストを記述していく と少し比較もしてみる。

続きを読む »

RSpecによるテストコードでパラメタライズドテストを記述していく

以前、FitNesseなどによるSpecification By Exampleで少し示した keyword driven testingは、入力値とその操作まで変数としてテストコードに与えることができていました。

このような形式で記述するテストは、「テストしたい対象のメソッドの入力とその期待値が異なる組み合わでいくつも存在するが、それらのテストを可読性の高い状態、簡潔な表現で保ちたい」というような場合に使えます。実際、開発速度が速い場合、仕様書を別ドキュメントとして厚く保つことは難しいと思います。その対策として、可読性の高いテストで低レベル(メソッドの入出力レベル)のテストはテストを仕様書に見立てていく、というアプローチが重要な一手となります。

以下は、パラメタライズドテストと呼ばれます。rspec-parameterized’というgemを使ってます。

続きを読む »

“Turnip or RSpec” x Appium

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

続きを読む »

受け入れ試験レベルの抽象度のシナリオを、Appium x “RSpec or Turnip”で比較してみた

最近、スマホアプリの受け入れテストの機能的側面を自動化する場合、どのような手段が妥当なのか?ということを考える。
それを、Appiumを基本に、RSpecとTurnipの2つを中心に比較して考えてみる。

どちらを選択したら良いのかなということに対して結論からいうと、何がよいのかという判断自体は
– 誰が受け入れ試験のシナリオを記述するか
– 誰が自動化コードをメンテするか
– どのような開発スタイルか

に大きく依存しますかね。

続きを読む »