UIテスト結果の可視化を進めよう! 〜Allure導入〜 / Visualize ui-test results by allure

9168d92e156ef9d537d38f4a071e5c5e?s=47 AHA_oretama
February 20, 2019

UIテスト結果の可視化を進めよう! 〜Allure導入〜 / Visualize ui-test results by allure

UIテスト結果の可視化の重要性とAllureの技術的なポイントにフォーカスしてお話します。
その狙いは、UIテストのデファクトレポートツールになりつつあるAllureについて、技術的なポイントを紹介することで利用者が増え、Allureがより活発なることです。

9168d92e156ef9d537d38f4a071e5c5e?s=128

AHA_oretama

February 20, 2019
Tweet

Transcript

  1. 1 Confidential - Do Not Share UIテスト結果の可視化を進めよう! 〜Allure導入〜 メルカリ AQA

    関根 康史 おれたま@AHA_oretama
  2. 2 Confidential - Do Not Share Automation&QA Group(通称AQA) • 半年前にジョイン

    • テスト自動化 ◦ Appium, WebdriverIO, Espresso… ◦ CI/CD Links • https://github.com/aha-oretama • https://www.slideshare.net/aha_oretama • https://speakerdeck.com/ahaoretama 関根 康史 おれたま@AHA_oretama
  3. 3 Confidential - Do Not Share 話すこと/話さないこと 今回話すこと • UIテスト結果の可視化の重要性

    • Allureの技術的なポイント 今回話さないこと • Allure以外の技術要素 • チームへの導入事例や実際の効果など
  4. 4 Confidential - Do Not Share 狙い UIテストのデファクトレポートツールになりつつある Allureについて、技術的なポイントを紹介することで 利用者が増え、情報交換できるようになりたい

  5. 5 Confidential - Do Not Share UIテスト結果の可視化の重要性について アジェンダ Allureの導入と技術的なポイント まとめ

    02 03 01
  6. 6 Confidential - Do Not Share UIテスト結果の可視化の重要性について アジェンダ Allureの導入と技術的なポイント まとめ

    02 03 01
  7. 7 Confidential - Do Not Share テストピラミッド 上に行くほど • 忠実度が高い

    • 不安定 • 実行時間がかかる
  8. 8 Confidential - Do Not Share 特徴 問題点 不安定 メンテナンスコストが増える

    実行時間 実行時間が長いため、実行頻度が少なくなりがち その間にアプリケーション、テストスクリプトに 複数の修正がされやすくなる → 作るよりも運用していくことが難しい UIテストの問題
  9. 9 Confidential - Do Not Share 可視化することで改善できる!

  10. 10 Confidential - Do Not Share テスト結果の可視化の目的とその効果 • テスト結果を見やすくする ◦

    テスト結果を見るだけで原因をつかみ、対策を打つことができ、 効率的にメンテナンスができる • 変化に気づけるようにする ◦ 変化に気づければ、新たな問題を早期にキャッチアップできる • 改善へのインスペクションを与える ◦ 表面化しにくい、さまざまな問題に気づいて 改善への第一歩が踏み出せる
  11. 11 Confidential - Do Not Share UIテストの問題 特徴 問題点 不安定

    メンテナンスコストが増える 実行時間 実行時間が長いため、実行頻度が少なくなりがち その間にアプリケーション、テストスクリプトに 複数の修正がされやすくなる → 作るよりも運用していくことが難しい
  12. 12 Confidential - Do Not Share テスト結果を見やすくする テスト結果の可視化を進める 変化に気づけるようにする 改善へのインスペクションを与える

    02 03 01 Allure Looker https://tech.mercari.com/entry/2019/02/12/080000
  13. 13 Confidential - Do Not Share テスト結果を見やすくする テスト結果の可視化を進める 変化に気づけるようにする 改善へのインスペクションを与える

    02 03 01 Allure Looker https://tech.mercari.com/entry/2019/02/12/080000
  14. 14 Confidential - Do Not Share UIテスト結果の可視化の重要性について アジェンダ Allureの導入と技術的なポイント まとめ

    02 03 01
  15. 15 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  16. 16 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  17. 17 Confidential - Do Not Share Allure 導入 ローカルインストール $

    brew install allure $ allure serve {path} Allure Client Library • Allure Rspec Adaptor CI Integration • Jenkins Allure Plugin
  18. 18 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  19. 19 Confidential - Do Not Share 並列実行 高速化のためにテストの並列実行を行うことが多いが、 Allureに並列実行の機能はない。 ライブラリを組み合わせて実現する。

    Jenkins • parallel steps • stash, unstash steps Ruby • Knapsack
  20. 20 Confidential - Do Not Share step { script {

    def parallels = createNodes(config) // 端末ごとテスト、結果を stash(config:端末情報) parallel parallels // 並列実行 sh 'mkdir gather' config.keySet().each { unstash it // 端末ごとの結果を取得 sh "mv allure/* gather/ | true" // テスト結果を一箇所に } allure([ // Allure 表示 jdk : "${JAVA_HOME}", results: [[path: 'gather']] ]) } }
  21. 21 Confidential - Do Not Share def createNodes(config) { def

    keys = config.keySet() def ciNodeTotal = keys.size() def nodes = [:] for(int i = 0; i < ciNodeTotal; i++) { def index = i; nodes["ci_node_${i}"] = { withEnv([ "CI_NODE_INDEX=$index", "CI_NODE_TOTAL=$ciNodeTotal"]) { sh 'bundle exec rake knapsack:rspec | true' // Knapsackで並列化 stash name:keys[index], includes: "allure/*", allowEmpty: true // テスト結果をStash } } } return nodes; }
  22. 22 Confidential - Do Not Share 端末情報の付与 端末はそれぞれ異なる。 並列化して実施したときに 実施した端末情報が残しておく。

    Allure Rspec Adaptor • host ラベルの付与 • feature ラベルの付与
  23. 23 Confidential - Do Not Share module AllureRSpec class Formatter

    < RSpec::Core::Formatters::BaseFormatter alias original_example_group_started example_group_started def example_group_started(notification) notification.group.metadata[:feature] = ENV['RUN_MOBILE'] // featureラベルの付与 notification.group.metadata[:host] = ENV['RUN_MOBILE'] // host ラベルの付与 original_example_group_started(notification) end end end
  24. 24 Confidential - Do Not Share

  25. 25 Confidential - Do Not Share

  26. 26 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  27. 27 Confidential - Do Not Share 失敗時情報の追加 失敗時の情報をなるべく多く残しておくことで、 失敗の原因を調査するのに役立てる。 •

    スクリーンショット • スクリーンレコード • ログ • ページソース → appium-source-viewer Allure Rspec Adaptor • attach_file メソッド
  28. 28 Confidential - Do Not Share RSpec.configure do |config| config.after

    do |example| if example.exception example.attach_file("failed_screenshot", take_screen_shot) // スクリーンショットの付加 example.attach_file("failed_record", take_screen_record) // スクリーンレコードの付加 example.attach_file("failed_page_source", take_page_source) // ページソースの付加 end end end
  29. 29 Confidential - Do Not Share

  30. 30 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  31. 31 Confidential - Do Not Share 実行時情報の追加 どのような条件で実行されたか、を残しておくことで 同条件での再現確認や問題の切り分けができる。 •

    Git情報(ブランチ、コミットハッシュ) • App情報(apkバージョン) • テスト管理情報 • (端末情報(前述済み)) etc. Allure • environment.properties
  32. 32 Confidential - Do Not Share def take_device_environment(allure_report_path, app_path) File.open("#{allure_report_path}/environment.properties",

    'w') do |f| // environment.propertiesの作成&書き込み f.puts "UiTest.GitUrl = #{ENV['GIT_URL']}" // Git情報の追加 f.puts "UiTest.GitCommit = #{ENV['GIT_COMMIT']}" // Git情報は環境変数から f.puts "UiTest.GitBranch = #{ENV['GIT_BRANCH']}" f.puts "Apkfile = #{get_apk_number(app_path)}" // apkのバージョン情報 f.puts "TestMg.Url = https://XXX?/#{ENV['TEST_RUN_ID']}" // テスト管理システム end end
  33. 33 Confidential - Do Not Share

  34. 34 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  35. 35 Confidential - Do Not Share Turnip対応 AllureはTurnipをサポートしていない。 Allure Rspec

    Adaptorを使用できるが、 見づらい点と一部機能が使えない(使いにくい)。 Allure Turnip • Turnip’s feature, step → Allure’s Suites, step • Issue管理システム連携 • Test管理システム連携 Jenkinsプラグイン • Issue, Test管理システム連携部分 ◦ https://docs.qameta.io/allure/#_jenkins
  36. 36 Confidential - Do Not Share Feature: Timeline @Test-C6095 Scenario:

    "おすすめ"タブが表示されることを確認 When 10回以上商品を検索しているユーザーでログインする Then [ホーム] "おすすめ" タブが表示されていること And [ホーム] 商品が表示されていること allure([ jdk : "${JAVA_HOME}", reportBuildPolicy: 'ALWAYS', results : [[path: 'gather']], properties: [[key: 'allure.tests.management.pattern', value: 'https://xxx?case=%s']] ]) Feature Jenkins pipeline
  37. 37 Confidential - Do Not Share

  38. 38 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  39. 39 Confidential - Do Not Share Retry対応 UIテストでは、テストの安定化のため、 複数回の自動Retry機能を入れることがある。 複数回のRetryごとの結果を見ることは重要。

    Allure • Retries ※ただし、Pytestのみ • Ruby はPR中 ◦ https://github.com/allure-framework/allure-cucumber/pull/78
  40. 40 Confidential - Do Not Share UIテスト結果の可視化の重要性について アジェンダ Allureの導入と技術的なポイント まとめ

    02 03 01
  41. 41 Confidential - Do Not Share まとめ • UIテスト結果を可視化することは重要 可視化することでUIテストの問題を改善できる

    • Allureをかしこく使えば、有効な情報を可視化できる これからAllureを使う人の役に立つと幸いです!
  42. 42 Confidential - Do Not Share ご清聴ありがとうございました。