Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonで スナップショットテスト/ pyconjp2023
Search
KAKEHASHI
PRO
October 18, 2023
Business
2.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonで スナップショットテスト/ pyconjp2023
KAKEHASHI
PRO
October 18, 2023
More Decks by KAKEHASHI
See All by KAKEHASHI
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
420
クラウド上のデータ復旧で見落としがちな制約: 医療系 SaaS の BCP 設計から得た教訓
kakehashi
PRO
0
4.9k
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
5.1k
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
1
490
Sync と Async ─ useSyncExternalStore を使う者の岐路
kakehashi
PRO
1
700
React Compiler導入の効果と運用の工夫
kakehashi
PRO
3
590
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
5
2.7k
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
5.4k
プロダクトを育てるように生成AIによる開発プロセスを育てよう
kakehashi
PRO
3
2.5k
Other Decks in Business
See All in Business
顧客理解レースでAIの一歩先を行く / Know customers better than AI
hirokiyamamoto14
PRO
1
380
WHITEGLASSES BRAND BOOK | デジタル時代に勝てるキャリアを
whiteglasses2021
1
540
ビジネスプロセスから始めるデータモデリング ファクトとディメンションの前に考えること
tenajima
4
980
プレイド概要説明資料_2026/08
plaid
PRO
1
3.3k
<DevLOVE関西>関係性が育つ前にフィードバックを届ける ~関係性が育つのを待てないとき、どう渡すのか~
emi0726
4
250
松岡会計事務所・合同説明会
wf714201
0
150
Global Vascular株式会社_会社紹介資料
globalvascular
0
210
つばさロジスティクス面接資料
tsubasalogistics
0
11k
スマサテ 会社紹介資料
sumasate
0
2.9k
2026_1H_TransparencyReport_EN.pdf
mercari_inc
0
380
malna-recruiting-pitch
malna
0
24k
ゲームにおけるメディアミックス展開との向き合い方 -ヘブンバーンズレッドのメディアミックス企画の立て方-
gree_tech
PRO
0
340
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
11
39k
Claude Code のすすめ
schroneko
67
230k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
350
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
660
YesSQL, Process and Tooling at Scale
rocio
174
15k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
270
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
660
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Transcript
2023/10/28 1 Pythonで スナップショットテスト 株式会社カケハシ 横田 直彦
Copyright © KAKEHASHI Inc. All Rights Reserved. 2 お前、誰よ
• 横田 直彦 • エンジニア歴9年 • 株式会社カケハシでTLをしています ◦ 薬局業界でのシステム開発 • 普段使いの言語がPythonです ◦ 仕事: バックエンド・ETL処理・業務スクリプトなど ◦ プライベート: Pythonista3(iPadアプリ)・LLMで遊ぶ
Copyright © KAKEHASHI Inc. All Rights Reserved. 3 テストのメンテナンスの悩み
• 関数の修正時にテストを変更する • テストがない関数のテストを作る • 返り値が複雑な関数のテストを作る
4 スナップショットテストで解決!
Copyright © KAKEHASHI Inc. All Rights Reserved. 5 スナップショットテストとは?
• 前回成功時の結果との一致を確認するテスト
Copyright © KAKEHASHI Inc. All Rights Reserved. 6 具体例
Copyright © KAKEHASHI Inc. All Rights Reserved. 7 コスト
忠実性 スナップショットテストをいつ使うか • メリット ◦ 簡単にテストの作成・更新ができる • デメリット ◦ 誤ったテストを作りがち ◦ 日付など実行毎に値が変化する場合に書きづらい • いつ使うのが良い? ◦ 仕様が頻繁に変わる関数の回帰テスト ◦ テストがない関数のリファクタリングしたい時 ◦ 関数のレスポンスが複雑な時 ◦ -> 主に統合テストで有効 • 具体例 ◦ APIのレスポンスのテスト ▪ レスポンスのjson ◦ ETL処理の集計関数のテスト ▪ 行列データのcsv 単体 統合 E2E テストケース数 テストピラミッド 実行速度 決定性 統合テストの 工数削減 に使える
Copyright © KAKEHASHI Inc. All Rights Reserved. 8 Pythonのライブラリを紹介
• snapshottest • syrupy • pytest-snapshot (今回紹介) • inline-snapshot (今回紹介)
Copyright © KAKEHASHI Inc. All Rights Reserved. 9 pytest-snapshot
• スナップショットをファイルに保存し、それとの比較でテスト • おすすめポイント ◦ pytestのプラグインがある。snapshotというfixtureが提供される • スナップショットの更新 ◦ pytest --snapshot-update
Copyright © KAKEHASHI Inc. All Rights Reserved. 10 inline-snapshot
• スナップショットをテストコード上に保存 し、それとの比較でテスト • おすすめポイント ◦ pytestのプラグインがある。parametrizedテストでも使える • スナップショットの更新 pytest --inline-snapshot=create で自動的にテストコードが修正される
Copyright © KAKEHASHI Inc. All Rights Reserved. 11 スナップショットテストの保存場所による使い分け
スナップショットの場所 ファイル インライン(テストコード) メリット テストコードがシンプルになる 結果の差分をgit diffで確認できる 余計なファイルが増えない デメリット assertごとにファイルが生成 テストコードが難読化 使い所 関数の結果が大きい場合 関数の結果が小さい場合
Copyright © KAKEHASHI Inc. All Rights Reserved. 12 スナップショットテストで
簡単に システムの品質を改善しよう!
Copyright © KAKEHASHI Inc. All Rights Reserved. 13 開発メンバーを募集しています!
Copyright © KAKEHASHI Inc. All Rights Reserved. 13 • バックエンドエンジニア ◦ 新規事業 ◦ PocketMusubi • データエンジニア 絶賛募集中!
Copyright © KAKEHASHI Inc. All Rights Reserved. 14 Appendix:
スナップショットテストのTips • 動的に変わる値に対処する ◦ パッチで日付の生成関数の返り値を固定する ◦ 乱数のシードを固定する ◦ スナップショット直前に部分的に削除する • 失敗時の調査のし易さを改善する ◦ ローカルでは失敗させず、とりあえず更新してからdiffを見る • 具体例 ◦ ETL処理のテスト ▪ PySparkの処理結果をCSVに変換しスナップショット化 ▪ 分散処理なので毎回行順が変わるので、ソートしてからcsv化 ▪ テストコードと結果の一覧性を重視し、インラインに保存 ▪ 不要な行・列はテスト前に削除 ▪ 結果の行数が増えないようにテストのケースを分割