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

Merpay Tech Fest 2021_リグレッションテストの自動化を段階的に実装した話 / The story of a step-by-step implementation of regression test automation

Merpay Tech Fest 2021_リグレッションテストの自動化を段階的に実装した話 / The story of a step-by-step implementation of regression test automation

Merpay Tech Fest 2021は5日間のオンライン技術カンファレンスです。

IT企業で働くソフトウェアエンジニアおよびメルペイの技術スタックに興味がある方々を対象に2021年7月26日(月)から7月30日(金)までの5日間、開催します。 Merpay Tech Festは事業との関わりから技術への興味を深め、プロダクトやサービスを支えるエンジニアリングを知れるお祭りです。 セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチを紹介予定です。お楽しみに!

■イベント関連情報
- 公式ウェブサイト:https://events.merpay.com/techfest-2021/
- 申し込みページ:https://mercari.connpass.com/event/215035/
- Twitterハッシュタグ: #MerpayTechFest

■リンク集
- メルカリ・メルペイイベント一覧:https://mercari.connpass.com/
- メルカリキャリアサイト:https://careers.mercari.com/
- メルカリエンジニアリングブログ:https://engineering.mercari.com/blog/
- メルカリエンジニア向けTwitterアカウント:https://twitter.com/mercaridevjp
- 株式会社メルペイ:https://jp.merpay.com/

92cdcff298e89e2fcd2fb705155c2d4b?s=128

mercari
PRO

July 30, 2021
Tweet

Transcript

  1. #MerpayTechFest Session Title リグレッションテスト 自動化を 段階的に実装した話 Masatomo Takano 株式会社メルペイ QA

    Engineer
  2. #MerpayTechFest 株式会社メルペイ QA Engineer Masatomo Takano • 金融系システム QA経験約5年 •

    スマホ向けゲーム クライアント開発経験約 4年 • スマホ向けゲーム バックエンド開発経験約 1年 • メルペイにてQA Engineerとして参画 • 興味ある領域 テスト 自動化 • 趣味 ゲーム開発(今 スマホ向けアプリ)
  3. #MerpayTechFest 前置き • 担当マイクロサービスにおけるQAチーム 課題感 ◦ QA方法が難しい ▪ バックエンドに閉じたサービスで、 ツールを駆使してQAする必要がある

    ▪ QA時にミスがあって、手戻りが度々発生していた ▪ 機能単位で属人化していく傾向があった ◦ 仕様が複雑 ▪ QA方法と相まって、キャッチアップに時間がかかる ▪ 人が足りない!となった時に、単純な増員が難しい
  4. #MerpayTechFest 前置き • 課題感に対し取り組んだこと ◦ せめてQA方法 簡略化したい! ▪ 手間 かかる手順

    なるべく機械化 • QAEngineerで簡単なスクリプトを作成 • 開発チームに協力をあおぐ → 段階的に取組みをしていったら、  コマンド1つで、リグレッションテストができる状態になった!  という話をさせていただきます。
  5. #MerpayTechFest 担当するマイクロサービスについて(概要) • お客さま 与信情報を取り扱うサービス • メルカリや、指定信用情報機関(CIC)から信用情報を取得 • 取得した信用情報にも基づき、メルペイ側で定額払い 審査を実施

    信用情報照会 定額払い申込み 信用情報 審査結果 お客さま 担当 マイクロサービス
  6. #MerpayTechFest 担当するマイクロサービスについて(概要) • お客さま 与信情報を取り扱うサービス • 月一でメルペイ 利用情報を登録する機能 利用情報登録 →

    今回 こちら 機能について 取組みを紹介します! お客さま 担当 マイクロサービス
  7. #MerpayTechFest 担当するマイクロサービスについて(月次登録) 個人情報 利用情報 ①情報取得 ②ファイル作成 ③ファイル送信 他 マイクロサービス

  8. #MerpayTechFest 担当するマイクロサービスについて(月次登録) ④ファイル受信 ⑤データ反映 結果 Spanner (DB)

  9. #MerpayTechFest 担当するマイクロサービスについて(QA方法) • QA実施時に 、内製 QAツールを利用 • 内製 QAツール 初期版

    DB 初期化、ジョブ実行くらい 機能 (新規 マイクロサービスだったため) • 確認対象(全て目視確認だった) ◦ DB 出力データ ◦ 作成したファイル ◦ GCS(Cloud Strage) 出力ファイル ◦ スタブサーバへ出力された送信ファイル
  10. #MerpayTechFest ファイル作成部分をシーケンス図に表すと 個人情報 利用情報 ①情報取得 ②ファイル作成 ③ファイル送信 他 マイクロサービス

  11. #MerpayTechFest 昔 The Go gopher was designed by Renée French.

  12. #MerpayTechFest 今 shell The Go gopher was designed by Renée

    French.
  13. #MerpayTechFest 全自動化に至るまで • 一気に全自動化を目指したわけで ない (そんな時間もなかった) • 手間 かかる作業を細かい単位で順次機械化 ◦

    QAEngineerで簡単なスクリプトを作成 (shellスクリプト& python) ◦ 開発チームに協力をあおいだ (全員品質!) → 時系列順に取組み 内容を、簡単に一部紹介させていただきます
  14. #MerpayTechFest 取組み1:内製ツール 改修依頼 • 内容 ◦ 以下 ように、内製 QAツールに対して、 Assert処理が書けるように機能拡張をお願いした

    • 効果 ◦ テスト結果を機械的にチェックできるようになった The Go gopher was designed by Renée French.
  15. #MerpayTechFest 取組み2:イメージ タグ名取得スクリプト 作成 • 内容 ◦ gcloud コマンドで、 一覧

    取得&フィルタリングまで できた ◦ さらにタグ名をパースする形で、 特定 タグ名を取得 ◦ さらにpbcopyコマンドを使い、 クリップボード コピーまで実施 • 効果 ◦ コマンド一つで、 特定 タグ名をクリップボードにコピーできるようになった shell
  16. #MerpayTechFest 取組み3:GCS ファイル有無チェックをスクリプト化 • 内容 ◦ ブラウザで5クリックくらいし、 ファイル 有無を目視確認していたが地味に辛かった ◦

    gsutilツールを用いて、特定 ファイルがDLできるかどうかを 判定するスクリプトをpythonで作成 • 効果 ◦ ブラウザ操作がなくなり、コマンド実行 みで GCS ファイル有無をチェックできるようになった
  17. #MerpayTechFest 取組み4:取組み3 スクリプト 移植依頼 • 内容 ◦ pythonで自作したスクリプト 処理を 内製

    QAツール(Golang)に移植してもらった ◦ リリース後 フェーズで、開発チームにも少し余裕が出た タイミングであった • 効果 ◦ 別途python スクリプトを実行して確認していたが、 内製ツール シナリオに組み込めたため、 別途実行する手間がなくなった The Go gopher was designed by Renée French.
  18. #MerpayTechFest 取組み5:機能単位でリグレッションテスト 自動化 • 内容 ◦ 取組みで作成したスクリプト、及び内製 QAツール 実行を 順次実行するようなshellスクリプトを作成

    • 効果 ◦ 1コマンドで、機能単位で リグレッションテスト実行が可能に shell
  19. #MerpayTechFest 再掲(月次登録について) 個人情報 利用情報 ①情報取得 ②ファイル作成 ③ファイル送信 他 マイクロサービス

  20. #MerpayTechFest 再掲(昔) The Go gopher was designed by Renée French.

  21. #MerpayTechFest 再掲(今) shell The Go gopher was designed by Renée

    French.
  22. #MerpayTechFest 取組み6:全機能に対するリグレッションテスト自動化 • 内容 ◦ 機能単位で リグレッションテストを 全て呼び出すシェルスクリプトを作成 • 効果

    ◦ 全機能に対し、1コマンドで リグレッションテスト実行が可能に shell
  23. #MerpayTechFest 再掲(月次登録について) 個人情報 利用情報 ①情報取得 ②ファイル作成 ③ファイル送信 他 マイクロサービス

  24. #MerpayTechFest 再掲(月次登録について) ④ファイル受信 ⑤データ反映 結果 Spanner (DB)

  25. #MerpayTechFest 全実行(一部省略) shell The Go gopher was designed by Renée

    French.
  26. #MerpayTechFest 取組み一覧 1. 内製ツールでAssertを書けるように依頼 2. イメージ タグ名取得スクリプト 作成 3. GCS

    ファイル有無チェックスクリプト 作成 4. 3 スクリプトを内製ツールへ移植依頼 5. 機能単位で、リグレッションテストを実行するスクリプト 作成 6. 全機能に対し、リグレッションテストを実行するスクリプト 作成 shell shell shell
  27. #MerpayTechFest 自動化 効果 • 実行時 ミス(手戻り)も0に! • 誰でも再実行可能に! • 全リグレッションテスト実行時

    コスト ◦ before ▪ 約270分(4.5時間) ◦ after ▪ 約90分(1.5時間)+基本放置 約1/3!
  28. #MerpayTechFest 保守性について • 半年くらい経つが、1,2回 修正で済んでいる • スクリプト 単位が小さいため、 ◦ マイクロサービス

    プログラム改修に対する影響もほぼなし ◦ キャッチアップする際も、 スクリプト書けるレベルであれ 容易に読める量 • 何かしら 原因でスクリプトが動かなくなっても、 元々マニュアルで実行していたも をスクリプト化している で、 一部マニュアルで実行することで、QAが止まること ない
  29. #MerpayTechFest おわりに • 少しずつQA作業を機械化することで、 最終的に全自動化できるケースがあった • 自動化することで、QAコストを大幅に下げ、 実行に対する属人化が解消することができた • 今回構築した自動化基盤が次

    プロジェクトでも活用できている • まだまだやりたいこと たくさん! ◦ 環境未セットアップな人でもリモートで実行できるようにしたい ◦ Slack bot経由で実行したい ◦ 内製 QAツール(Golang)をQAEでも修正できるようにしたい → 常にGo Boldに色々な挑戦を引き続きしていきたい思いです
  30. #MerpayTechFest ご清聴いただきありがとうございました