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_10_lt
Search
unilabo
December 15, 2021
0
430
株式会社ユニラボ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
1k
わたしたちにIaCはまだ早かったのかもしれない
unilabo
15
13k
プロダクトのアジリティを高めるためにアイミツSaaSをリプレイスした話 / imitsu saas replace
unilabo
0
550
株式会社ユニラボエンジニア採用資料 / recruit-for-engineers
unilabo
3
19k
Featured
See All Featured
Clear Off the Table
cherdarchuk
84
310k
Designing Experiences People Love
moore
136
23k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Automating Front-end Workflow
addyosmani
1356
200k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
78
42k
Optimizing for Happiness
mojombo
370
69k
Optimising Largest Contentful Paint
csswizardry
8
2.4k
The Art of Programming - Codeland 2020
erikaheidi
42
12k
Producing Creativity
orderedlist
PRO
337
39k
The Power of CSS Pseudo Elements
geoffreycrofte
60
5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
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