Upgrade to Pro — share decks privately, control downloads, hide ads and more …

運用プロジェクトにおけるUITestの運用事例紹介

a_z_k
December 08, 2021

 運用プロジェクトにおけるUITestの運用事例紹介

a_z_k

December 08, 2021
Tweet

More Decks by a_z_k

Other Decks in Programming

Transcript

  1. ӡ༻ϓϩδΣΫτʹ͓͚Δ
    UITestͷӡ༻ࣄྫ঺հ

    View full-size slide

  2. ࣗݾ঺հ
    Speaker 紹介
    Twitter:Azukiidx (あんま技術的な話してないアカウント)


    所属:Gra
    ffi
    ty,Inc (一応リードエンジニア)


    過去登壇・記事など


    - Roppongi.Unity ( https://speakerdeck.com/azukizuki/roppongi-dot-unity-number-9-
    addressableassetsystemwopurodakutodeshi-tutemita )


    - 会社の技術ブログ ( https://note.com/gra
    ff i
    ty/m/m896f454ae562 )


    - 個人Qiita ( https://qiita.com/AzuQiita )

    View full-size slide

  3. What's Gra
    ff
    i
    ty, Inc
    Gra
    ffi
    tyについて
    USにてLeapTriggerというARシューティングゲームを運用/開発中!


    View full-size slide

  4. What's Gra
    ff
    i
    ty, Inc
    今回の話
    このタイトルのUITestを構築した話


    View full-size slide

  5. UITestͱ͸
    - ゲームのUIがちゃんと動くか確認する


    - 自動でUI操作を行い、動作チェックを行うもの
    Gra
    ff i
    tyでは現在UITestの拡充を行っています。


    View full-size slide

  6. Կނ΍Δͷʁ
    Gra
    ff i
    tyではアプリのアップデートを行う際、QA会社のデバッグとは別で本番ビルド作成前に


    全機能を触って正常に動作するかチェックするリリースチェックというものを実施しています
    これが超大変で、膨大な量のチェック項目を全てチェックするので


                         チームのエンジニアが丸一日余裕で拘束されます。

    View full-size slide

  7. Կނ΍Δͷʁ
    流石にしんどい!


    でもこれで見つかって事前に修正できたバグもある事実。。


    じゃあ自動化じゃね?
    インゲームはともかくアウトゲームはチェックを自動化したい!


    そこでAirTestさんの出番です

    View full-size slide

  8. AirTestͱ͸
    NetEaseが開発しているUITest開発IDE


    Pythonで画像ベースで処理が書けるのでとても直感的にテストが書ける
    詳細は日本語で記事書かれている先人たちがたくさんいらっしゃるので


    調べてみてね!

    View full-size slide

  9. Gra
    ff i
    tyͰͷࣄྫ
    弊社ではJenkinsを使用して毎日深夜0時頃にUITest用のAndroidアプリをビルドし、UITestを回す


    という仕組みを構築しています
    ↑成功したとき ↑何かしら問題が発生して失敗したとき
    結果はSlackに通知され、失敗したときは直ぐに気づける体制になっています。

    View full-size slide

  10. Gra
    ff i
    tyͰͷࣄྫ
    リンクをクリックすると
    GitLabPagesにテスト結果のhtmlがアップロードされます


    テスト中にクリックされた場所なども表示されてとっても見やすい!

    View full-size slide

  11. Jenkinsߏ੒
    ここからは実際にどういう実装をしているのか解説していきます


    Jenkinsジョブはこのような構成・処理になっています
    毎日0時にJenkinsおじさんが


    UITestジョブ始動
    最新の開発ブランチをビルド
    ビルドされたApkを


    元にUITestを全件実行


    リザルトページ作成
    リザルトのHTMLを


    GitlabPagesにデプロイ&Slackへ
    完了通知をポスト

    View full-size slide

  12. Jenkinsߏ੒
    今回紹介する実装事例はこの部分
    毎日0時にJenkinsおじさんが


    UITestジョブ始動
    最新の開発ブランチをビルド
    ビルドされたApkを


    元にUITestを全件実行


    リザルトページ作成
    リザルトのHTMLを


    GitlabPagesにデプロイ&Slackへ
    完了通知をポスト

    View full-size slide

  13. AirTestϓϩδΣΫτߏ੒
    それではまずAirTestプロジェクトの実装について紹介します


    LeapTriggerのUITestではまず、テスト用の基底クラスを用意し、


    それを継承し画面単位でテストを書く様にしています。
    ςετجఈΫϥε
    جఈΛܧঝͨ͠ը໘"ͷ
    ςετέʔεΫϥε
    جఈΛܧঝͨ͠ը໘#ͷ
    ςετέʔεΫϥε
    جఈΛܧঝͨ͠ը໘$ͷ
    ςετέʔεΫϥε
    アプリのインストールや
    Abstractメソッドなどの定義
    こっちはテストの中身だけ書く

    View full-size slide

  14. AirTestϓϩδΣΫτߏ੒
    基底クラスはこんな感じで、PythonのABCモジュールを使い、


    必ず実装しないといけないAbstractメソッドを定義しています
    アカウントが既にある場合・ない場合


    (新規インストールから実施する場合)のテスト
    を書くようにします。


    こうすることで画面Aだけテストを実行したい!
    という時に便利です

    View full-size slide

  15. AirTestϓϩδΣΫτߏ੒
    基底を継承し実装した例
    TestFromInstallはサインアップのテストを自動実行してから
    テストケースを実行するように書くことで、テストごとの


    実行順番の依存性が極力少なくなるようにしています

    View full-size slide

  16. AirTestϓϩδΣΫτߏ੒
    テストケースを全部実行するエントリーポイント
    テストケースをリストを作成し、forで回しな
    がら順番に実行していきます。
    例外が発生した(テストが止まった)際は


    失敗したテストのクラス名を出力するようにし、


    問題のあるテストケースがすぐにわかるようにしています

    View full-size slide

  17. ςετ࣮ߦ
    このテストケースを全部実行するエントリーポイントクラスをJenkins上で実行しています。
    —device android:/// でPCにつながってるAndroidデバイスでテストが走ります(2台以上繋いでる
    ときはちゃんと指定が必要)
    Recordingオプションをつけるとテスト中を録画してくれます


                   (後述のhtml生成したほうが良いと思う)

    View full-size slide

  18. ςετ࣮ߦ
    テストが完了した後、reportコマンドを叩くことでテスト結果のHTMLページを出力できます
    ログファイルを指定してやる必要があります。

    View full-size slide

  19. Ϧβϧτੜ੒
    最後に、生成されたHTMLファイルをGitLabPagesにアップロードします


    (GitLabPages用のリポジトリにコミット&プッシュする)
    何故gitlabかというと、GitLabPagesは特定ユーザーのみページを閲覧できる、という設定が可能
    だったから(流石にPublicにはできない情報ですし自前でサーバ用意も面倒だったので)


    現在はGithubPagesでも同様の設定があるらしいです。


    当時はなかったのでGitLabPages使ってます

    View full-size slide

  20. Slackϙετ
    そして最後にSlackにもポストしてやれば終了です🎉
    このような仕組みを構築し、毎日UITestを定期実行しています

    View full-size slide

  21. ಈ࡞͍ͯ͠Δ༷ࢠ
    最後に動作している様子(実機)
    毎日元気に動いてくれています🎉

    View full-size slide

  22. ࠓޙ
    今後の展望
    - 現状はまだ全画面を網羅できてないのでアウトゲーム全画面のUITest整備に向けてテスト実装を進
    めています


    - ARをフルに使うインゲームをテストしたいが、ジャイロセンサーの値などを制御しないといけない
    のでいい方法がないか検証中


    まだUITestはベストプラクティスが見つけれてない感じあるので今後も検証は続けていきます!

    View full-size slide

  23. Thanks!
    ご清聴ありがとうございました!


    質問などありましたらTwitterなどでメンションいただければ(分かる範囲で)お答えします!


    Twitter:@azukiidx

    View full-size slide