Appiumに手を出してみた
この記事は「Qiita Advent Calendar 2016 Android その2」の10日目の記事です。
自己紹介
私は、株式会社サイバーエージェント CA ProFit-X という広告プロダクトで、メディア様の収益を最大化することを目標にエンジニアをやってます。 CA ProFit-X は、モバイル向けネイティブ広告(主にインフィード広告)専業のSSP事業者なのです! また個人的には、今年から 日本Androidの会 の運営メンバーにも入ってたり。
お題
今回はテスト自動化を目標に、 Appium に手を出し始めた話しをしたいと思います。
Appiumって?
Appiumとは、iOSおよびAndroidプラットフォーム上で動く - ネイティブアプリ - モバイルウェブサービス - ハイブリッドアプリ 等を自動化するオープンソースのツールです。
- 作者: Manoj Hans,太田健一郎,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/11/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
なぜ必要に?
現在、広告配信タグ(モバイルウェブサービス用)のE2EテストにNightmareを使用しています。 しかし、 モバイルSafariでしか発生しない事象 (Mac Safariでも再現しない)にぶち当たり、実機(シミュレータ)を使用したE2Eテストの必要性が出てきました。 また、せっかくなら広告配信SDK(ネイティブアプリ用)のテストにも使っていきたいと思い。 そこで、SeleniumぽくてWebDriberの流れを組むやつをチームメンバーに紹介されたので試してみました。
GUI vs CUI
お試しくらいならGUIの方が分かりやすいかなと思い、今回はGUIで試しました。 結構、ハマった。。。 後から公式を読んでいて分かったのはGUIはバージョンが古く更新されてなかったので、Android/iOSの対応バージョンが古いのかも。
ウェブブラウザとネイティブアプリの起動
いちおう、両方ともやってみた。
環境準備
環境変数を定義する
GUIでAppium Doctorを立ち上げるbash
が起動するので、~/.bashrc
にJAVA_HOME
とANDROID_HOME
をかきました。
書かないとエラーが出て先に進めず・・・。
AVDで適当に用意する
実機より簡単かなと思い、適当に3端末分用意してみた。
Launch AVD
なぜかAVDで設定した3端末中2端末しか出てこない。意味分からん。
ウェブブラウザを起動してみる
Use Browser
なぜかChromeが起動できない。 Chromeがインストールされていない端末なら分かるけど、インストールされていても起動できない。 Browserならできた。意味分からん。
ブラウザ起動に失敗すると
手がかりすくな!
コンソールには・・・?
なるほど。ウェブブラウザ起動するだけなのに、アプリパスを指定しろと。なんでだよ!
たしかに置いていないので・・・
適当に置いた上でリトライすると・・・
キタ━━━━(゚∀゚)━━━━!!
ネイティブアプリを起動してみる
こんなかんじ。
広告配信SDKを開発する際のサンプルアプリが自動で起動した!!!
ここまでの感想
GUIでやる意味がなかた。GUIだとAppium上に画面が出てきてそこにフォーカスをあてると、どのようなviewかわかる(インスペクタ機能)ものの、CUIでよかた。 iOSは最初からCUIでお試しに入ろうと思う。
最後に
E2Eテストが充実するとリリース前の確認はもちろんですが、リリース後に大きなメリットがあると思っています。 例えば、僕たち広告配信側としては僕らの知らないところで発生しているメディア様の変更に、追従していけると他事業者様との競争にも優位になれそうな気がしています。 なので、ウェブサービス/ネイティブアプリ問わず、同じ仕組みで全てのテスト自動化の仕組みを構築していくことが重要かなと思っており、今後もE2Eテストを充実させていこうと思っています。
次は、 Selenium Grid をかけ合わせてみたい。
『HARD THINGS』
2015年に流行った書籍(たぶん)で、他の書籍に浮気しつつ半年かけて読了しました。 購入時、6月のサンフランシスコ出張時に読み切ろうと思っていたのが、気づくともう11月に・・・(笑)
※以下、書籍の内容を紹介しており、ネタバレあるよ
書籍の内容構成
ベン・ホロウィッツという起業家、CEOを経てベンチャーキャピタリストを努めている方の半生?を、 ビジネスシーンにおける窮地に陥った時(ほとんど窮地)、それを乗り越えた時の経験について教訓と共に描かれている。
総括
僕自身がテクノロジー・ビジネスに携わっているため、
- 魔術的に素晴らしい製品を創造すること
- 製品を開発する為に必要なチームを維持し続けること(お金を稼ぐこと)
の狭間で揺れることがあり、どこかに良い答えがあるんじゃないかと思うことがある。
「 その幻想をぶち殺す!! 」ばりに、本書は「 困難な問題を解決する答えなどない 」ということを教えてくれる。 しかし、ネガティブな事象を乗り越えるための助言を貰えるし、 結局のところ考えに考え抜いた上で「 やってやんよ 」しかねーなという結論にいたれたので、読み終わりは満足な一冊だった。
章ごとの振り返り
以下、目次ベースに簡単に振り返りってみる。
第1章 妻のフェリシア、パートナーのマーク・アンドリーセンと出会う
ベン・ホロウィッツという人物について、高校時代、奥さんとの出会いを紹介されいていくうちに、話しに引き込まれていった。
特に高校のフットボール監督の最初の訓示、
「お前らの中には、いい加減な気持ちでここへ来た者がいるはずだ。そういうヤツらは、べらべらと愚にもつかんクソな無駄話をして、クソな時間を潰し、まともなことはやらん。フットボールのユニフォームを着ればかっこよく見えるだろうなんて思っている。そんなヤツらはどうなるか知っているか? 辞めちまえ!」
監督が受け入れられない行動について詳しく説明している場面、
「練習に遅れて来る? 辞めちまえ! ぶつかり合いが嫌だ? 辞めちまえ! 全力で走らない? 辞めちまえ! オレをチコと呼ぶ? 辞めちまえ!」
など、ウダウダ言ってるくらいなら「辞めちまえ!」て思うことあるよなーとか思いつつ(笑)
また、そのちょっと乱暴な表現(原著もかな!?)も第2章以降のタイトルも自然と受け入れられていく感じ。
第2章 生き残ってやる 第3章 直感を信じる
ネットスケープ創業者 マーク・アンドリーセンと立ち上げたラウドクラウドが紆余曲折を経て倒産が視野に入った後、
「会社の方向性に関する提言はいらなかった。今は戦時なのだ。」
平時のCEOから戦時のCEOへ変わった様が、とても臨場感に溢れていた。
「勝てる製品を持たない限り、生き残る道はない。...(略)... 銃には一発だけ弾が残っていて、標的に命中させなくてはならない」
とか、僕自身も過去に「結構大きな投資をして貰っていたプロダクトをお蔵入り」にしたり「会社ごと消えてなくなる」などの経験があり、ベンの思惑通り? 感情移入し読めました。まぁ、ベンに比べたら僕なんて(笑)。
第4章 物事がうまくいかなくなるとき 第5章 人、製品、利益を大切にする ー この順番で 第6章 事業継続に必須な要素 第7章 やるべきことに全力で集中する 第8章 起業家のための第一法則 ー 困難な問題を解決する法則はない
ベンの実体験からくるアドバイスに真剣に耳を傾ける章です。 僕個人的には、第5章と第7章が好きでした。プロダクトを作るには!?ってことを真剣に考えることができたし、1点に集中していたく感じは好きです。
第9章 我が人生の始まりの終わり
テクノロジー・ビジネスでは、事前によそうができることは非常に少なく、凡庸な製品と魔術的に素晴らしい製品との差は、社員に厳しく責任を求める会社運営と、社員が創造性を発揮するためなら必要なリスクを取ることを許す経営との差にある。
最後に
この内容で、1,800円はお得だと思う。
- 作者: ベン・ホロウィッツ,小澤隆生,滑川海彦、高橋信夫
- 出版社/メーカー: 日経BP社
- 発売日: 2015/04/17
- メディア: 単行本
- この商品を含むブログ (10件) を見る
攻略!お風呂をピカピカに掃除する
祝日である今日、子供たちを近所に住んでいる妻の実家に預け、夫婦で思い思いの場所を掃除することにした(自然発生)。
僕は前々からやってみたかった(悲願)、お風呂ピカピカ構想に着手することにした。
かれこれ、今のお風呂ユニットを入れてから8年。これが失敗したら、お風呂のユニット毎かえてやろう。
用意するもの
cf. 愛用のバスクロスとは?
毎年、1−2枚は購入しているやつで、こいつと水だけで毎日洗っているので大抵の汚れは問題ない。 aisen バスクロス トレピカ グリーン BF823
- 出版社/メーカー: アイセン
- メディア: ホーム&キッチン
- この商品を含むブログを見る
ただし、今回は午前中の1時間ほどしか使いたくないので、次の週末も含めて工程を数回に分けることにした。
攻略 初日
排水溝
重曹をふりまき、お酢をたらしシュワシュワさせる。 いまいちコツがつかめず、お酢がドボドボと排水溝に流れていった。 重曹もシュワシュワしてるけど、この酸性の存在は役に立ってんのかな。
浴槽
酸性からのアルカリ性で撃退がかっこいいと思い、重曹で全体を洗った後よく洗い流してからアルカリ性でトドメを刺すことにした。 酸性とかアルカリ性とか勉強しないと分からんな。
重曹が残りわずかだったのでダーッと水にいれて溶かしてゴシゴシ、その後、クエン酸も同様にゴシゴシ。
いつもより、ピカピカしている気がする。 物足りないので、今夜はお風呂の湯を捨てずに、重曹をぶっこんで色んなものを漬け置きしてみよう。
と思ったら重曹を使い切ってしまったので、冷蔵庫にあった重曹を奪取した。今夜が楽しみ。
鏡
水垢があんましないので、浸けるパターンではなく、クエン酸を水で溶かしで磨いてみた。 もともと、キレイなので違いが分からん。
蛇口
最近、顔が映らなくなってきたので、クエン酸を水で溶かしゴシゴシした。 顔が映るようになったので満足した。
天井
あまった、クエン酸の水で天井もまんべんなくゴシゴシ。
感想
次回は、ゴムパッキンとかをハイター&片栗粉でペタペタしてやっつけたい。
Cycript入門 〜アプリをハックしてデバッグしてみよう〜
はじめに
この記事は、 僕が主宰する 『スマートデバイス向けアプリのマネタイズ研究と実践開発』ゼミの 活動記録です。
ゼミについて
株式会社サイバーエージェント アドテク本部 アドテクスタジオ内の活動です。
詳しくは、ゼミ『スマートデバイス向けアプリのマネタイズ研究と実践開発』まとめをご参照ください。
用意するもの
- ジェイルブレイク済みのiOS端末
- Cydiaがインストールされている
下記のドキュメントはCydiaを前提としています。
目的
Cycriptは、既存のアプリにコードを突っ込むことができるので、リリース後のアプリに対してもデバックに使えるかなと思っています。
このツールは、Objective-CとJavaScriptのハイブリッドのツールらしく、ターミナルにObjective-Cのコードを入力するだけでそのアプリ内で実行することができるらしい。
目標
参加者全員が 適当なアプリのボタンやラベルの内容を外から変更する を達成する
Cycript入門
以下の操作について、ジェイルブレイク前提であり、自己責任でお願いします。
参考になったサイト
Cycript公式 http://www.cycript.org/
Realmのサイトを参考に進める https://realm.io/jp/news/conrad-kramer-reverse-engineering-ios-apps-lyft/
Cycript Tricks http://iphonedevwiki.net/index.php/Cycript_Tricks
主なオペレーション
- Cydiaを使う
- Cycriptをインストールする
- OpenSSHをインストールする
- iPhoneにMacからSSHでログインする
- Cycriptでアプリを操作する
- Process Injection
- アプリの画面構成をハックする
- ボタンの色やテキストをハックする
- ボタンイベントをハックする
Cydiaを使う
CycriptやOpenSSHをインストールするのに使用します。僕の脱獄方法の場合です。
Cycriptをインストールする
今回のお題でもあるこいつをインスールします。
OpenSSHをインストールする
ついでにOpenSSHもインスールします。
iPhoneにSSHでログインする
自分のMacのターミナルから、iPhoneのIPアドレスを指定してsshログインします。初期パスワードは、alpine
です。
$ ssh root@[IPアドレス] root@IPアドレス password:[alpine] root#
Cycriptでアプリを操作する
操作したいアプリのプロセスをチェックし、cycriptで指定して起動する。
下記では、UBER
を題材にすすめます。
重要 下記作業前にUBERをインストール&起動しておきます。
起動直後の画面はこんな感じ。
Process Injection
cycript -p
を使って、プロセスにアタッチします。
root# ps aux | grep UberClient mobile 1660 0.0 4.4 815456 90912 ?? Us 6:49PM 0:02.64 /var/containers/Bundle/Application/E3330-CBE5-40AC-8365-66E075C6C04C/UberClient.app/UberClient root# cycript -p 1660 cy#
アプリの画面構成をハックする
cy# UIApp.keyWindow.recursiveDescription() @"....現在表示中の画面構成を再帰的に表示されます、結果はキャプチャのみで"
ダーッとでます
中央の UBER 画像をハックする
こんな感じで、オブジェクトを取得するには、画面構成からIDを探してインスタンスを生成したります。
cy# var imageView = new Instance(0x151101f30); cy# var droidUrl = [NSURL URLWithString:@"https://andropp.jp/webapp/wp-content/uploads/2014/11/android-wallpaper5_2560x1600_1.jpg"]; cy# var droidData = [NSData dataWithContentsOfURL:droidUrl]; cy# var droidImage = [UIImage imageWithData:droidData]; cy# imageView.image = droidImage;
UBERアイコン画像が消えて、droidくんになってもーたw
登録ボタンをハックする
var signupButton = new Instance(0x14fe47730); [signupButton setTitle:@"hogeeee" forState:UIControlStateNormal];
と入力すると 登録
という文字が....
....hogeeee
になってるw
ちなみに、登録ボタンを端末に触らずに押しちゃうには....
cy# [signupButton sendActionsForControlEvents:UIControlEventTouchUpInside];
これで、起動!
まとめ
iOS端末をジェイルブレイクしないといけないので、少し敷居が高い。
Cycriptを使ったハックは、既存アプリの研究を目的とした活用に向いてそう。
また、アプリ側にバックドアを意識した仕掛けを用意しておけば、強力なデバッグができそう(そんな仕掛け、怖くてアレだけど)。
iOS10でIDFAを取得できるか!?
オプトアウトした端末のIDFAは取得できない?
iOS10 アップデート以降、オプトアウトした端末のIDFAは取得できない
といった情報が、巷でまことしかやに囁かれている。
僕自身の iOS10 に端末をアップデートし、検証を試みた。
検証しみてる
iOS9 まではユーザが自身の端末上でオプトアウトしても、IDFAの取得自体は可能だった。
しかし、 iOS10 アップデート(2016年9月14日 日本時間2時)以降、有効なIDFAが取得できない。
もう少し詳細に書くと、 文字列は取得できるが、一意のユーザーを表すものではない。
実際に、オプトアウトした後に取得した値は、00000000-0000-0000-0000-000000000000
というゼロパディングされた文字列が返ってきてた。
cf. ASIdentifierManager Overview 3. Get the advertising identifier using the advertisingIdentifier property (note that when ad tracking is limited, the value of the advertising identifier is 00000000-0000-0000-0000-000000000000). https://developer.apple.com/reference/adsupport/asidentifiermanager
iOS端末でオプトアウトするための方法
[設定] - [プライバシー] - [広告] - 「追跡型広告を制限」 をオンにする
まとめ
大抵の広告事業者は端末側でIDFAとオプトアウトフラグの両方を取得して、広告配信サーバへ投げているはず。 CV計測目的の場合、広告配信という目的の延長線上としてオプトアウトフラグの状態に関わらずIDFAを使用していると思われる。 たぶん、問題の焦点はこの世の中でオプトアウトしているユーザが何人いるのかによって、影響度合いが大きく変わるところだと思う。
サンフランシスコビギナーでも安心!? ~旅行準備~
CA ProFit-X(CyberAgent,Inc.)というSSP事業でエンジニアをやっている @neiraza です。
初めてのサンフランシスコ! AltConf(2016/06/13 Mon - 2016/06/16 Thu)に参加してきました!!
WWDC2016の抽選に外れ途方にくれていましたが、なんとかお祭りの片隅に参加してきました。 僕をサンフランシスコに送り出してくれた会社とチームに感謝です。
AltConfの会場は、WWDCのメイン会場であるモスコーニの隣にあるAMCという映画館のスクリーンを借りて行われました。
英語も怪しく、日常生活の常識に疎い僕が初めてのサンフランシスコ、初めての海外カンファレンス参加について、下記数回に分けて記事を書いてみようと思います。
- サンフランシスコビギナーでも安心!? ~旅行準備~
- サンフランシスコビギナーでも安心!? ~観光~
- AltConfって何? WWDCとどう違うの?
僕の旅行レベルは初めてのおつかいレベル
国内旅行であれば年に5,6回は行きますが、海外旅行は7年ぶりくらいです。 旅行の用意とか、めんどくて前日までしない派です。
しかし、今回は観光メインではないのでそれなりに準備したので、自分なりに良かった事を紹介しようと思います。
慣れている人には当たり前なんでしょうけど。
圧縮袋が最強すぎる
初めて旅行で使ったのですが、最強です。
今回は4泊したので1日1セット毎に圧縮袋につめて小さくしただけで、4日分がすげー小さく!
しかも、1セット空けたら前日着た分を圧縮袋につめてしまえば、帰りの準備も完璧です!
僕はもともと荷物が少ないのですが、機内持ち込み荷物だけで足りました。
【Amazon.co.jp限定】 衣類圧縮袋 M・L 各5枚 10枚組 (Bon Voyage Go Goセット)日本製
- 出版社/メーカー: ホームクオリティ
- メディア: ホーム&キッチン
- この商品を含むブログを見る
Uberが便利すぎる
現地ではバス&徒歩を駆使していましたが、どうしても車が必要な場面で、簡単に呼び出せるUberは便利です。
初回登録時にカード登録をしてしまうので、使い方も簡単で配車時は現在地と目的地を入力するだけ。乗車後はボーッとするだけ。
Uber登録時に2000円分無料になるプロモーションコード
vdrvm92mue
ANKERの充電地が最高でした
会社で貰ったANKER を今まで使う機会がなかったのですが、こいつすごいです。
僕の海外旅行ではiPhoneが生命線だったので、電池が少なくなってきたら、こいつに指しっぱでOK。
他にポータブルWiFiも借りていたので、そいつも充電できる状況を確保したのは旅の安心につながりました。
ユニクロのウルトラライトダウンがすごすぎる
僕は荷物を最低限しか持たないので、旅行行くのにパジャマとか持って行きません。酔いつぶれたら着ないしね。
ですが、サンフランシスコ市内は寒いと聞いていたので、先駆者のアドバイス通りに持っていきました。当然、圧縮袋でぺっちゃんこにして。
日中は、やや厚手パーカ&長袖シャツ&デニムのパンツ&キャップで大丈夫でした。
問題は宿泊したホテルの夜が寒くて、長袖シャツ&下着パンツだけでは生きていけず、酒を飲んでも寒く・・・。
そこで登場したのが、ウルトラライトダウン。こいつを着て寝れば、途中で変な汗をかくので、脱いだり着たりしながら夜を過ごしました。
すごく快適でした!
ちなみにユニクロはパウエル駅やユニオン・スクエアから近く、ケーブルカーが走っているパウエルストリートにあります!
しめ
だいたい、こんなもんでしょうか。 次回は、サンフランシスコビギナーでも安心!? ~観光~を書く予定です。 その前に、便利だったサービス・アプリ編も書こうかな。
その間に、AltConfとWWDCの情報を整理したり、コード書いたりして準備しなきゃ。。。
『アドテクノロジーの教科書』を読んだよ
この数週間、お風呂で読んでいた『アドテクノロジーの教科書』を簡単に紹介します。
- 作者: 広瀬信輔
- 出版社/メーカー: 翔泳社
- 発売日: 2016/03/11
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
僕はSSP事業をやっているチームで広告配信SDKをつくったり、チームのアプリ戦略を一緒に考えたり推進したりしてます。
一応、アドテク絡みのエンジニアに分類されています。
広告配信SDK自体はアドテクの主役ではなく、モバイルアプリエンジニアの派生くらいかなと思っています。
「SSP事業をつくる」、「プロダクトをつくる」という積み重ねの中で、アドテクの事をもっと知りたくなり、この本を読みました。
本の概要
アドテクの歴史、紹介から始まり、「オーディエンスターゲティング」、「リワード広告」、「DSP/SSP」、「インフィード広告、イン◯◯広告」、「PMP」などの解説、「効果測定」の解説と事例紹介、プレイヤーやマーケットの話しとインタビューのおまけつき。
全体的に導入レベルですが、初学者には分かりやすい表現で解説されていると思います。
気にいった部分を紹介
『Chapter3 Measurement 03 リサーチと購買データを活用した効果測定の事例』
とある会社のキャンペーン効果を分析するという話しなのですが、おそらく「DSP」や「DMP」に関わるデータ分析を専門にしている人にとっては、当然な話しなのでしょうが、可視化をこんな風にしているんだなと思い、勉強になりました。
メディア(広告枠を提供する側)のお客様と「ブランディング広告」を「ネイティブ広告」として、どの様に表現したらメディアの価値を下げずに収益化を図れるか、アイデア出しをしたりする機会があるので、とても参考になりました。
(どの様に表現したらというアイデアに対し、データから推測した結果とかを提示できると、もっといいかも)
というわけで、息抜きには調度良い安価な値段で薄くて軽いので、連休中の移動時に読むには最適な本かなと思います。
次はこれらの本を読もうかな。
- 作者: 横山隆治,楳田良輝
- 出版社/メーカー: 日経BP社
- 発売日: 2015/12/03
- メディア: 単行本
- この商品を含むブログ (1件) を見る
運用型広告 プロの思考回路 AdWords/Yahoo!/Facebook広告の効果を最大化するベストプラクティス (WEB PROFESSIONAL)
- 作者: 佐藤康夫,杉原剛,有園雄一,岡田吉弘,高崎青史,坂萩馨,西原元一,清水一樹,和泉晴之,中川雄大,畑秀一郎,渡辺晃大,杉本晃一
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2016/03/29
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
全部薄くて風呂とか移動時に読みやすいし。