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

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

AHA_oretama
February 20, 2019

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

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

AHA_oretama

February 20, 2019
Tweet

More Decks by AHA_oretama

Other Decks in Programming

Transcript

  1. 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
  2. 3 Confidential - Do Not Share 話すこと/話さないこと 今回話すこと • UIテスト結果の可視化の重要性

    • Allureの技術的なポイント 今回話さないこと • Allure以外の技術要素 • チームへの導入事例や実際の効果など
  3. 8 Confidential - Do Not Share 特徴 問題点 不安定 メンテナンスコストが増える

    実行時間 実行時間が長いため、実行頻度が少なくなりがち その間にアプリケーション、テストスクリプトに 複数の修正がされやすくなる → 作るよりも運用していくことが難しい UIテストの問題
  4. 10 Confidential - Do Not Share テスト結果の可視化の目的とその効果 • テスト結果を見やすくする ◦

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

    メンテナンスコストが増える 実行時間 実行時間が長いため、実行頻度が少なくなりがち その間にアプリケーション、テストスクリプトに 複数の修正がされやすくなる → 作るよりも運用していくことが難しい
  6. 15 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

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

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

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

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  10. 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']] ]) } }
  11. 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; }
  12. 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
  13. 26 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

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

    スクリーンショット • スクリーンレコード • ログ • ページソース → appium-source-viewer Allure Rspec Adaptor • attach_file メソッド
  15. 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
  16. 30 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

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

    Git情報(ブランチ、コミットハッシュ) • App情報(apkバージョン) • テスト管理情報 • (端末情報(前述済み)) etc. Allure • environment.properties
  18. 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
  19. 34 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  20. 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
  21. 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
  22. 38 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行

    / 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06
  23. 41 Confidential - Do Not Share まとめ • UIテスト結果を可視化することは重要 可視化することでUIテストの問題を改善できる

    • Allureをかしこく使えば、有効な情報を可視化できる これからAllureを使う人の役に立つと幸いです!