Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
170
デザイナーとPdMが自分でデプロイする ― Amplify Hosting の PR プレビューで回す仮説検証
kakehashi
PRO
2
140
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
570
クラウド上のデータ復旧で見落としがちな制約: 医療系 SaaS の BCP 設計から得た教訓
kakehashi
PRO
0
5.4k
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
5.6k
「軸足」は 固定しなくていい - 熱量と強みで描く、しなやかなキャリアの形
kakehashi
PRO
2
620
Sync と Async ─ useSyncExternalStore を使う者の岐路
kakehashi
PRO
1
820
React Compiler導入の効果と運用の工夫
kakehashi
PRO
3
680
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
5
2.8k
Other Decks in Business
See All in Business
エスキュービズム 会社紹介資料
human_resources
2
27k
Corporate Story (GA technologies Co., Ltd.)
gatechnologies
0
1.2k
【全資料公開】AIとアイデアソン:思考の盲点を突く「人機共想」のプロセスと実践手法
ishiirikie
1
370
KEEBHOLIC NAGOYA Vol.2
shakupan
0
170
会社紹介資料/Idein株式会社
ideininc
0
1.2k
パーソルビジネスプロセスデザイン株式会社 会社説明資料
persolcareer
0
150
どうせなら「楽しい仕事」をする
kozotaira
0
350
会社説明資料(新卒採用)
witsjp
0
120
増え続ける運用を、 Skill化する"型"でさばく
morimori3
0
300
01_全社_FLUX採用ピッチ資料_Ver.5.7
flux
12
230k
kintone-ai-first-steps.pdf
kintonepapers
0
130
自分が "コントロールできる" と思い込んで "引き出しを増やす"
konifar
15
6.3k
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Test your architecture with Archunit
thirion
2
2.4k
Designing Experiences People Love
moore
143
24k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
550
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
My Coaching Mixtape
mlcsv
0
320
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
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化 ▪ テストコードと結果の一覧性を重視し、インラインに保存 ▪ 不要な行・列はテスト前に削除 ▪ 結果の行数が増えないようにテストのケースを分割