Share
Embed
UIテスト結果の可視化を進めよう! 〜Allure導入〜 / Visualize ui-test results by allure
UIテスト結果の可視化の重要性とAllureの技術的なポイントにフォーカスしてお話します。
その狙いは、UIテストのデファクトレポートツールになりつつあるAllureについて、技術的なポイントを紹介することで利用者が増え、Allureがより活発なることです。
AHA_oretama
February 20, 2019
Transcript
42 slides
-
1 Confidential - Do Not Share UIテスト結果の可視化を進めよう! 〜Allure導入〜 メルカリ AQA
関根 康史 おれたま@AHA_oretama -
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 Confidential - Do Not Share 話すこと/話さないこと 今回話すこと • UIテスト結果の可視化の重要性
• Allureの技術的なポイント 今回話さないこと • Allure以外の技術要素 • チームへの導入事例や実際の効果など -
7 Confidential - Do Not Share テストピラミッド 上に行くほど • 忠実度が高い
• 不安定 • 実行時間がかかる -
8 Confidential - Do Not Share 特徴 問題点 不安定 メンテナンスコストが増える
実行時間 実行時間が長いため、実行頻度が少なくなりがち その間にアプリケーション、テストスクリプトに 複数の修正がされやすくなる → 作るよりも運用していくことが難しい UIテストの問題 -
10 Confidential - Do Not Share テスト結果の可視化の目的とその効果 • テスト結果を見やすくする ◦
テスト結果を見るだけで原因をつかみ、対策を打つことができ、 効率的にメンテナンスができる • 変化に気づけるようにする ◦ 変化に気づければ、新たな問題を早期にキャッチアップできる • 改善へのインスペクションを与える ◦ 表面化しにくい、さまざまな問題に気づいて 改善への第一歩が踏み出せる -
11 Confidential - Do Not Share UIテストの問題 特徴 問題点 不安定
メンテナンスコストが増える 実行時間 実行時間が長いため、実行頻度が少なくなりがち その間にアプリケーション、テストスクリプトに 複数の修正がされやすくなる → 作るよりも運用していくことが難しい -
12 Confidential - Do Not Share テスト結果を見やすくする テスト結果の可視化を進める 変化に気づけるようにする 改善へのインスペクションを与える
02 03 01 Allure Looker https://tech.mercari.com/entry/2019/02/12/080000 -
13 Confidential - Do Not Share テスト結果を見やすくする テスト結果の可視化を進める 変化に気づけるようにする 改善へのインスペクションを与える
02 03 01 Allure Looker https://tech.mercari.com/entry/2019/02/12/080000 -
15 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
16 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
17 Confidential - Do Not Share Allure 導入 ローカルインストール $
brew install allure $ allure serve {path} Allure Client Library • Allure Rspec Adaptor CI Integration • Jenkins Allure Plugin -
18 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
19 Confidential - Do Not Share 並列実行 高速化のためにテストの並列実行を行うことが多いが、 Allureに並列実行の機能はない。 ライブラリを組み合わせて実現する。
Jenkins • parallel steps • stash, unstash steps Ruby • Knapsack -
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 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 Confidential - Do Not Share 端末情報の付与 端末はそれぞれ異なる。 並列化して実施したときに 実施した端末情報が残しておく。
Allure Rspec Adaptor • host ラベルの付与 • feature ラベルの付与 -
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 -
26 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
27 Confidential - Do Not Share 失敗時情報の追加 失敗時の情報をなるべく多く残しておくことで、 失敗の原因を調査するのに役立てる。 •
スクリーンショット • スクリーンレコード • ログ • ページソース → appium-source-viewer Allure Rspec Adaptor • attach_file メソッド -
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 -
30 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
31 Confidential - Do Not Share 実行時情報の追加 どのような条件で実行されたか、を残しておくことで 同条件での再現確認や問題の切り分けができる。 •
Git情報(ブランチ、コミットハッシュ) • App情報(apkバージョン) • テスト管理情報 • (端末情報(前述済み)) etc. Allure • environment.properties -
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 -
34 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
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 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 -
38 Confidential - Do Not Share Allure 導入 Allureの導入と技術的なポイント 並列実行
/ 端末情報の付与 失敗時情報の追加 02 03 01 実行時情報の追加 04 Turnip対応 05 Retry対応 06 -
39 Confidential - Do Not Share Retry対応 UIテストでは、テストの安定化のため、 複数回の自動Retry機能を入れることがある。 複数回のRetryごとの結果を見ることは重要。
Allure • Retries ※ただし、Pytestのみ • Ruby はPR中 ◦ https://github.com/allure-framework/allure-cucumber/pull/78 -
41 Confidential - Do Not Share まとめ • UIテスト結果を可視化することは重要 可視化することでUIテストの問題を改善できる
• Allureをかしこく使えば、有効な情報を可視化できる これからAllureを使う人の役に立つと幸いです!