uiテスト@yidev

25
@kitasuke UI テテテテテテテ @yidev

Upload: yusuke-kita

Post on 16-Apr-2017

3.495 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Uiテスト@yidev

@kitasuke

UI テストの決定版@yidev

Page 2: Uiテスト@yidev

名前:北裕介所属: trippiece職種: iOS エンジニア趣味:海外旅行、スポーツ

自己紹介

Ref. http://cdn.arstechnica.net/wp-content/uploads/2014/09/iWatch-options-e1410300251456.jpg

Ref. http://www.imore.com/sites/imore.com/files/styles/xlarge_wm_blw/public/field/image/2014/09/apple_watch_sport_green_band_quick_reply_display.jpg?itok=7BMK23t5

Page 3: Uiテスト@yidev

さっそく UI テストの決定版ですが…

Page 4: Uiテスト@yidev

そんなもん無い !

Ref. http://blog-imgs-14-origin.fc2.com/m/a/d/madgamer/20070508094152.gif

Page 5: Uiテスト@yidev

そこまで工数かけられないどのライブラリが良いか分からないUI は常に変わるものなので利点が少なそう効果が分かりにくい画面数が多すぎて手をつけられない

UI テストの話を聞かない理由

Page 6: Uiテスト@yidev

UI テストの目的は?自分で担当した作業が原因で、思わぬところで起こる UI 関連の不具合を防ぐ

Page 7: Uiテスト@yidev

あまり UI が変わらないような段階(ローンチ後など)デバッグの際にあまり見ない画面(チュートリアルやサインアップや設定など)

想定される UI テスト対象

Page 8: Uiテスト@yidev

通常のデバッグ中に UI 関連の不具合を発見出来ると思うので、必要良いかなと思います

それ以外の画面は?

Page 9: Uiテスト@yidev

それでは実際にどのようにUI テストを行うかを説明します

Page 10: Uiテスト@yidev

UIAutomation -> JavaScript

KIF -> Objective-C

ライブラリ

← これ使います

Page 11: Uiテスト@yidev

Square 製のライブラリデモ動画公式ドキュメントhttps://github.com/kif-framework/KIF非公式日本語ドキュメントhttps://gist.github.com/kitasuke/ed6f90e83df3c0653cbf

KIF とは?

Page 12: Uiテスト@yidev

View のタップ 座標のタップ 長押し 文字入力・削除

Scroll Swipeテーブルビューのセル選択

コレクションビューのアイテム選択カメラロールから写真選択

ピッカーの選択 トグルのオン・オフポップオーバーを閉じる

KIF で出来ること

Page 13: Uiテスト@yidev

1. 対象の View に AccessibilityLabel とAccessibilityIdentifier とセットする( Storyboard 上 / コード上)

2. アクション実行メソッドをたたく

使い方

e.g. Accessibility e.g. User Defined Runtime Attributes

e.g. Method of KIF

Page 14: Uiテスト@yidev

1. beforeAll   → テストクラス実行時に 1 回実行2. beforeEach → 各テストケース実行前に実行3. testHoge   → テストケース4. afterEach  → 各テストケース終了後に実行5. afterAll   → テストクラス実行後に 1 回実行

フロー

Page 15: Uiテスト@yidev

サインアップ等では UI テスト用のダミートークンを返すようにするKIF + OHHTTPStubs

Page 16: Uiテスト@yidev

全画面遷移分のスクリーンショットを保存可能フォルダ名:テストケース名ファイル名:タイムスタンプ

KIF + Screenshot

Page 17: Uiテスト@yidev

全テストケース → ⌘ +U

各テストケース → ⌃ +⌥+⌘+U

* 実行前に iPhone シミュレーターが起動していないことを確認する

実行方法

Page 18: Uiテスト@yidev

デモ

Page 19: Uiテスト@yidev

テストケースが多くなると数分では終わらないそもそも全画像を目で見て確認するのは無理

前回のテスト結果との差異だけを検知したい

テストの自動化

Page 20: Uiテスト@yidev

PR の度に Travis で全テストケースをはしらせるGithub + Travis

e.g. .travis.yml

Page 21: Uiテスト@yidev

motage コマンドmontage –tile 2x2 –geometry 640x1136 1.png 2.png tile.png

複数の画像 → 1 枚の画像

e.g. 1.png e.g. 2.png e.g. tile.png

Page 22: Uiテスト@yidev

Composite コマンドcomposite –compose difference 1.png 2.png diff.png

画像の diff をとる

e.g. 1.png e.g. 2.png

e.g. diff.png

Page 23: Uiテスト@yidev

1. テスト実行2. 画像の 1 枚にまとめる3. 前回と今回のテスト画像の diff をとる

Travis の script

Page 24: Uiテスト@yidev

良い点運用コストが大幅に減る悪い点UI 実装者とテストケース実装者が異なると効率が下がる

まとめ

Page 25: Uiテスト@yidev

We’re hiring iOS & Android Engineers!!