@neiraza

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

Appiumに手を出してみた

この記事は「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 をかけ合わせてみたい。

ABC2016Springにブースを出展してきました

こんにちは!

 

去年のAB2015Summerに引き続き今年もVRネタを引っさげ、

abc.android-group.jp

ABC 2016 Springにブースを出展してきました!!

 

今年のポスターは社内のデザファクで作成して頂いたきました!

カラーはドロイド君を意識して、緑に。すげー、良いでき!!

ゼミ紹介もこれさえあれば、簡単です(笑) 

f:id:redogu:20160313203949p:plain

 

今回、ゼミ活動と共に一緒に紹介したいのはこれ!

CA Profit-X のアプリチームで企画しているセミナーイベント。

今回は「メディアの効果的な画像の選び方」です。僕達が新たにつくった広告商品も紹介する予定です。

f:id:redogu:20160313204345p:plain

 

上記イベントは下記リンクから申し込めます!

キュレーションメディア運営あるあるが聞けるかも!?

 

connpass.com 

 

さて、今回のABCの会場は青山学院大学(青山キャンパス)でした。

会社から荷物をもって直接行ったのですが、どこの校舎か迷う迷う・・・。

f:id:redogu:20160313203854j:plain

 

会場についたら、みんなで設営。

ポスターを貼り、チラシを準備し、ダンボールで作成した自作パネルを置き、ノベルティのGoogle CardBoard(簡易的なVR用のHMD)を組み立て。

f:id:redogu:20160313203900j:plain

 

今回のVRゲームは『GEARCLOPS』の展示は、Unity VR Expo Shibuyaにブースを出していたバッカム株式会社 の黒川社長のご協力のもと実現しました!

f:id:redogu:20160313204804j:plain

 

その黒川社長がイベント前日夜に、急ぎ描いた力作。

時間なくて、ぜんぶ手描きです。

f:id:redogu:20160313204821j:plain

 

今回のノベルティは後々、自分たちの手元に何かが残るように、名刺と交換とさせて頂きました。

それでも、30個が余裕でなくなる・・・。

f:id:redogu:20160313203903j:plain

 

日本Androidの会 理事 長谷川さんに、

「CAの小栗さんの力を借りたい」とノセられてしまい、急遽、学生部のアカデミックな発表の寸評役をやることに。

1人だと不安なのでメンバにも寸評をやってもらうなど。

f:id:redogu:20160313203905j:plain

 

うちの息子が大ハマリしていたウ◯コ。

f:id:redogu:20160313203909j:plain

 

ABC開催前に、実行委員長の石塚宏紀さんがオフィスに来てくださり、

今回のABCはいつもと違う、色んな人達とIoTの橋渡し・結びつきを作っていけるのは僕たちだけだ!と仰っていた通り、今回のABCは登壇される方と内容が、いつも以上に締まっていた気がします。

 

でも、やっぱりABC好きとしては、いつもどおりの混沌とした世界(ペッパーくんがウロウロして喋っていたり、床を何かのマシンが走っていたり、Android以外の人達がいたり、ウ◯コがいたり)。

 

今回も楽しかったです。

ABC 2016 Spring のスタッフ皆々様、ステキなイベントをありがとうございました!

JSON作成時に特定の機種のみでハマったこと

ざつだん1

長男の保育園卒園式で、ジバニャンのコスプレして、これを踊ることになりました。

【妖怪ウォッチ】ようかい体操第一 - YouTube

ほんだい

件名の内容をQiitaに投稿しました

JSON作成時に特定の機種のみでハマったこと - Qiita

ざつだん2

最近、この本が会社の本棚に追加されていたので読んでます。

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

今まで一度も読んでなかたし。

Androidでインストール検知をしてみた

本題前にクリスマスネタ。

うちには保育園児の子供が二人いるのですが、
クリスマスプレゼントに何を買いました?

長男はこれ

ウルトラマンギンガS DXストリウムブレス

ウルトラマンギンガS DXストリウムブレス

次男はこれ

次はお年玉に誕生日か。。。

Androidでインストール検知をしてみた

BroadcastReceiverを使って、インストール検知してみた。


Android - 端末に新規アプリがインストールされたらログを吐く - Qiita

Service & AIDLを復習してみた

  • インストール検知したアプリをServiceでゴニョゴニョしたい
  • 複数アプリで1つのServiceを使いまわしたい


Android - ServiceをAIDLを使って弄ぶ練習 - Qiita


と思って復習してみたんだけど、途中でIntentServiceの方がいいかなと思って、それがこれ。

結局、複数アプリから1つのServiceを起動するのはやめた。

BroadcastReceiverはインストール検知時に起動する。こいつはメインスレッドで動くけど、onReceiveの処理が終了したら終了してくれる。

BroadcastReceiverからIntentServiceを起動してゴニョゴニョする。IntentServiceはキューが全部終了したら、勝手に終了してくれるから、後片付けが楽。


Android - アプリが新規にインストールされたら、IntentServiceを呼んでログを吐く - Qiita

おしまい

Android Advent Calendar 2014

今週のお題「2014年のお別れ」〈2014年をふりかえる 3〉

今年のAdvent Calendar当番日も今日で最後になりました。

今回のネタ以外だと、僕が今よくわかってなくて、知りたい事と言えば、
AndroidでActivityを修正せずに、AOPみたいな感じでログを吐く処理を突っ込む仕組みをライブラリとして配布する。
そんなネタをやりたかったけど、良い方法が思いつきませんでした。

下記以外で、何か良い案があったら教えてください。

  • Application#registerActivityLifecycleCallbacks
  • コンパイル時に動的に突っ込む

というわけで、Advento Calendarのお題は↓にしました

広告 - ネイティブアドのすゝめ(Android) - Qiita

Android Studio 1.Xの起動時に「Java not found」?

Android Studioを起動した際に「Java not found」って出た時の対応について

Qiitaにまとめたので、みてやってください。
間違った対処をしないように、お互いに気をつけていきましょう。


AndroidStudio - Android Studio 1.Xの起動時に「Java not found」? - Qiita

保育園の出し物で、コスプレ?出し物を2つほど頼まれた。

  • アナ雪か妖怪ウオッチのコスプレ

  • パンストを被る

前者はママ友で、後者はパパ友。
絶対にスベるよねパンストって、受けたことないもん。

Android de Go !

Go 1.4 でAndroidを公式サポートするって、随分前からあれこれ試している方は多かったわけですが、正式リリースされると反響はやっぱり大きいですね。

Go 1.4 is released - The Go Blog

今後、このシャツにドロイド君とのコラボシャツとかが出てくるんですかね?

僕はNDKとかサパーリなので環境構築に苦労するわけですが、しばらくは先人たちのリンクを集めながら、あれこれ試してみようと思ってます。


go.mobile を使った Android 開発のまとめ - Qiita

とか


golang - go.mobileを動かしてみた。 - Qiita


golangをサーバ側でガンガン使っている会社さんもあるので、
Mobileでも使えるようになると、幸せになれる人が増えそうですね。


おまけ 
先日、保育園の家族個別行事で、普段の生活姿をこっそり覗くというやつなんですが、
子供の中に「しろくまちゃんのほっとけーきTシャツ」を着ている子がいて、
その場で妻とAmazonで探して購入してしまいました。

大人用を・・・。

これスカジャンの下に着てたらカッコよくないすかね。