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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
KAKEHASHI
PRO
October 18, 2023
Business
2.7k
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
Sync と Async ─ useSyncExternalStore を使う者の岐路
kakehashi
PRO
1
460
React Compiler導入の効果と運用の工夫
kakehashi
PRO
3
420
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
5
2.4k
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
4.8k
プロダクトを育てるように生成AIによる開発プロセスを育てよう
kakehashi
PRO
2
2k
チームのモメンタムに投資せよ! 不確実性と共存しながら勢いを生み出す3つの実践
kakehashi
PRO
1
370
FAXが現役の業界でマルチモーダルAIプロダクトを作る
kakehashi
PRO
1
310
EMからVPoEを経てCTOへ:マネジメントキャリアパスにおける葛藤と成長
kakehashi
PRO
9
3.6k
器用貧乏が強みになるまで ~「なんでもやる」が導いたエンジニアとしての現在地~
kakehashi
PRO
7
6.3k
Other Decks in Business
See All in Business
CEOの価値観を言語化することでメンバーの心を動かすマネジメントを体得するワークショップ
nagam3618
1
260
会社紹介資料
nipap
0
170
メンバーズ会社紹介資料/Members company brochure
members_recruiting
0
37k
プリザンターの紹介 - OpenSourceConference 2026 SENDAI
s_pochi
0
170
How SureSmile Clear Aligners Work Step-by-Step Guide for Beginners
burtonadvancedentalmi
0
150
jpax-introduction
jpax
0
1.2k
ITが何の略なのかも知らないままエンジニアになっちゃったのでインターネットに生き恥を晒してみた話
m_k__77
1
280
自分のハンドルを握る〜AI時代だからこそ求められるセルフマネジメントの技術/Self-Management Skills Needed More Than Ever in the AI Era
ikuodanaka
1
420
コーポレートストーリー(新規投資家様向け会社説明資料)
gatechnologies
2
19k
kakaopiccoma_engineer_recruitingguide
kakaojapan
2
190
エイターリンク株式会社 会社紹介資料
aeterelink
0
43k
三井物産グループのデジタル証券~イオン大宮~徹底解説セミナー
c0rp_mdm
PRO
0
1.8k
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
13k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Design in an AI World
tapps
1
240
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
620
Statistics for Hackers
jakevdp
799
230k
RailsConf 2023
tenderlove
30
1.5k
How STYLIGHT went responsive
nonsquared
100
6.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
The SEO Collaboration Effect
kristinabergwall1
1
480
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
240
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
190
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化 ▪ テストコードと結果の一覧性を重視し、インラインに保存 ▪ 不要な行・列はテスト前に削除 ▪ 結果の行数が増えないようにテストのケースを分割