Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
株式会社ユニラボLaravelShibuya#10LT資料 / laravel_shibuya_10_lt
unilabo
December 15, 2021
0
240
株式会社ユニラボLaravelShibuya#10LT資料 / laravel_shibuya_10_lt
2021/12/15 Laravel.shibuya 第10回目の発表資料になります。
https://laravel-shibuya.connpass.com/event/231357/
unilabo
December 15, 2021
Tweet
Share
More Decks by unilabo
See All by unilabo
株式会社ユニラボ会社概要
unilabo
0
2.8k
会社説明資料(新卒用)202202.pptx
unilabo
0
460
プロダクトのアジリティを高めるためにアイミツSaaSをリプレイスした話 / imitsu saas replace
unilabo
0
290
virtualofficetour
unilabo
1
1.4k
株式会社ユニラボエンジニア採用資料 / recruit-for-engineers
unilabo
3
3.2k
unilabo会社紹介資料/Now Hiring!
unilabo
0
14k
株式会社ユニラボ採用ピッチ資料
unilabo
0
28k
Featured
See All Featured
From Idea to $5000 a Month in 5 Months
shpigford
372
44k
Designing the Hi-DPI Web
ddemaree
272
32k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
315
19k
Three Pipe Problems
jasonvnalue
89
8.6k
What's in a price? How to price your products and services
michaelherold
229
9.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
236
1M
What’s in a name? Adding method to the madness
productmarketing
11
1.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
15k
Practical Orchestrator
shlominoach
178
8.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
237
19k
Bootstrapping a Software Product
garrettdimon
295
110k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
268
11k
Transcript
テスト実行時間を1/2 にしました@Laravel Laravel Shibuya #10
自己紹介 • 名前 末澤(Twitter @deliku0306) • 所属 株式会社ユニラボ • Output
https://qiita.com/suezawan https://note.com/deliku0306/
会社紹介
今日話すこと Laravelでテストコードを書いてみて、 得た知見と高速化した話
CI/CD の概要 Github Actions ローカルのDocker環境 で開発、リモートブランチ にpushし、PRを作成する ・CodeFactorによる規約チェック ・PHP FeatureTest
UnitTest実施 mergeして 自動deploy この処理時間を改善す ることで、deliveryまでの 時間を削減する
FeatureTest / UnitTest 1 migrateによる TestDB初期化 2 Seederによるデータ投入 3 test実行
テストデータをSeederで追加することで発生した課題 1 migrateによる TestDB初期化 2 Seederによるデータ投入 3 test実行 テストデータをSeederで追加する運用をしていたため下記 の課題がありました。
- あるテストデータを修正すると別のテストが失敗(特定 データに複数テストが依存関係にある) - テストケースが増える度にSeederデータを追加するこ とで、Seeder実行時間が増えていく
改善① Seeder依存のテストケースをFactory利用へ TestCode Factory
改善② RefreshDatabaseを利用しテスト開始初回時 migrate およびマスタデータSeederを実行する TestCase.php 最初のテストケース実行タイミングで、 migrate:freshと特定Seederを実行してくれ ます テストメソッド単位でトランザクション処理にな るため、他テストケースとのデータ依存がなく
なります テストに必要なマスタデータのTestSeederを 実行させます
結果 弊社のケースではボトルネックが、大量データを Seederで投入していたため、 この方法で実行時間を短縮することができました
テスト並列実行を試してみた テストケースが互いに依存関係がなくなったの で、並列処理も可能になりました。ローカル環 境で試してみたのですが、処理時間の改善に はつながりませんでした。 (むしろパフォーマンスが下がる結果になりまし た) 時間をみつけてボトルネックを調査したいなと 考えています。 ↓
並列数2 ↓ 並列数4
まとめ そもそもテストデータをSeederで追加していく手法が、 アンチパターンであることを実際に経験したことで、 標準的な方法がなぜ提供されているかの理解を深めることができました なお、今回お話したFactory / RefreshDatabase / テスト並列実行は、 データベーステスト章に記載されている内容になります
https://laravel.com/docs/8.x/database-testing#defining-model-factories https://readouble.com/laravel/8.x/ja/database-testing.html