読者です 読者をやめる 読者になる 読者になる

@neiraza

2匹の怪獣が寝た後にプログラマーしてる、最近はサイバーエージェントでゼミ長もしてる僕のネタ帳

Appiumに手を出してみた

Appium Android

この記事は「Qiita Advent Calendar 2016 Android その2」の10日目の記事です。

自己紹介

私は、株式会社サイバーエージェント CA ProFit-X という広告プロダクトで、メディア様の収益を最大化することを目標にエンジニアをやってます。
CA ProFit-X は、モバイル向けネイティブ広告(主にインフィード広告)専業のSSP事業者なのです!
また個人的には、今年から 日本Androidの会 の運営メンバーにも入ってたり。

お題

今回はテスト自動化を目標に、 Appium に手を出し始めた話しをしたいと思います。

Appiumって?

Appiumとは、iOSおよびAndroidプラットフォーム上で動く - ネイティブアプリ - モバイウェブサービス - ハイブリッドアプリ 等を自動化するオープンソースのツールです。

実践 Appium

実践 Appium

実践 Appium

なぜ必要に?

現在、広告配信タグ(モバイウェブサービス用)のE2EテストにNightmareを使用しています。
しかし、 バイSafariでしか発生しない事象Mac Safariでも再現しない)にぶち当たり、実機(シミュレータ)を使用したE2Eテストの必要性が出てきました。
また、せっかくなら広告配信SDK(ネイティブアプリ用)のテストにも使っていきたいと思い。
そこで、SeleniumぽくてWebDriberの流れを組むやつをチームメンバーに紹介されたので試してみました。

GUI vs CUI

お試しくらいならGUIの方が分かりやすいかなと思い、今回はGUIで試しました。
結構、ハマった。。。
後から公式を読んでいて分かったのはGUIはバージョンが古く更新されてなかったので、Android/iOSの対応バージョンが古いのかも。

ウェブブラウザとネイティブアプリの起動

いちおう、両方ともやってみた。

環境準備

環境変数を定義する

GUIでAppium Doctorを立ち上げるbashが起動するので、~/.bashrcJAVA_HOMEANDROID_HOMEをかきました。
書かないとエラーが出て先に進めず・・・。

AVDで適当に用意する

実機より簡単かなと思い、適当に3端末分用意してみた。 f:id:redogu:20161210175004p:plain

Launch AVD

なぜかAVDで設定した3端末中2端末しか出てこない。意味分からん。 f:id:redogu:20161210175008p:plain

ウェブブラウザを起動してみる

Use Browser

なぜかChromeが起動できない。
Chromeがインストールされていない端末なら分かるけど、インストールされていても起動できない。
Browserならできた。意味分からん。

f:id:redogu:20161210175011p:plain

ブラウザ起動に失敗すると

手がかりすくな!

f:id:redogu:20161210175014p:plain

コンソールには・・・?

f:id:redogu:20161210175018p:plain

なるほど。ウェブブラウザ起動するだけなのに、アプリパスを指定しろと。なんでだよ!

f:id:redogu:20161210175021p:plain

たしかに置いていないので・・・

f:id:redogu:20161210175046p:plain

適当に置いた上でリトライすると・・・

f:id:redogu:20161210175025p:plain

キタ━━━━(゚∀゚)━━━━!!

ネイティブアプリを起動してみる

こんなかんじ。 f:id:redogu:20161210175050p:plain

広告配信SDKを開発する際のサンプルアプリが自動で起動した!!! f:id:redogu:20161210175053p:plain

ここまでの感想

GUIでやる意味がなかた。GUIだとAppium上に画面が出てきてそこにフォーカスをあてると、どのようなviewかわかる(インスペクタ機能)ものの、CUIでよかた。
iOSは最初からCUIでお試しに入ろうと思う。

最後に

E2Eテストが充実するとリリース前の確認はもちろんですが、リリース後に大きなメリットがあると思っています。
例えば、僕たち広告配信側としては僕らの知らないところで発生しているメディア様の変更に、追従していけると他事業者様との競争にも優位になれそうな気がしています。
なので、ウェブサービス/ネイティブアプリ問わず、同じ仕組みで全てのテスト自動化の仕組みを構築していくことが重要かなと思っており、今後もE2Eテストを充実させていこうと思っています。

実践 Appium

実践 Appium

次は、 Selenium Grid をかけ合わせてみたい。