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
株式会社ユニラボLaravelShibuya#10LT資料 / laravel_shibuya...
Search
unilabo
December 15, 2021
0
450
株式会社ユニラボ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
2
1.2k
わたしたちにIaCはまだ早かったのかもしれない
unilabo
16
14k
プロダクトのアジリティを高めるためにアイミツSaaSをリプレイスした話 / imitsu saas replace
unilabo
0
570
株式会社ユニラボエンジニア採用資料 / recruit-for-engineers
unilabo
3
22k
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
508
110k
How to Ace a Technical Interview
jacobian
274
23k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
36
2.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
103
48k
4 Signs Your Business is Dying
shpigford
179
21k
Bash Introduction
62gerente
608
210k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
1
48
The Brand Is Dead. Long Live the Brand.
mthomps
53
38k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
Faster Mobile Websites
deanohume
304
30k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Writing Fast Ruby
sferik
623
60k
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