Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
短期間での 新規プロダクト開発における 「コスパの良い」 Goのテスト戦略 GMOペパボ株式会社 大浦優太郎
Slide 2
Slide 2 text
自己紹介 大浦優太郎 ユーキャン GMOペパボ株式会社 for Gamersチーム エンジニア Go歴 1年半 X: @yukyan_p
Slide 3
Slide 3 text
はじめに 今年のGoの思い出...
Slide 4
Slide 4 text
はじめに
Slide 5
Slide 5 text
はじめに バックエンドサーバーが Goで実装されてます!
Slide 6
Slide 6 text
はじめに 開発開始から13営業日で ユーザーへの提供を開始!!!
Slide 7
Slide 7 text
なぜ短期間でのリリースを実現できたか? いろいろある・・・ ・親しんだ言語で開発 ・実装の力があるエンジニアが集まっていた ・バックエンドのテスト戦略
Slide 8
Slide 8 text
なぜ短期間でのリリースを実現できたか? いろいろある・・・ ・親しんだ言語で開発 ・実装の力があるエンジニアが集まっていた ・バックエンドのテスト戦略
Slide 9
Slide 9 text
https://speakerdeck.com/takumakume/lolipop-for-gamers-infrastructure?slide=9
Slide 10
Slide 10 text
テスト戦略
Slide 11
Slide 11 text
テスト戦略 定義したシナリオ(「ログインできる」、「サー バーを立ち上げる」など)に沿って、 実際にちゃんと動くのか を主軸にテストする。
Slide 12
Slide 12 text
テスト戦略 「実際にちゃんと動くのか」 =忠実性の高いテストをやっていきたい
Slide 13
Slide 13 text
テスト戦略 忠実性という観点であれば.... 単体テスト < 統合テスト 統合テスト < E2Eテスト
Slide 14
Slide 14 text
テスト戦略 忠実性という観点であれば.... 単体テスト < 統合テスト 統合テスト < E2Eテスト 外部サービスへの 疎通により... 実行速度が遅い! 安定性が低い! = コストが高い
Slide 15
Slide 15 text
https://levtech.jp/media/article/column/detail_496/
Slide 16
Slide 16 text
テスト戦略 「実際にちゃんと動くのか」 =忠実性の高いテストをやっていきたい 単体テスト < 統合テスト 統合テスト < E2Eテスト 実行速度が遅い! 安定性が低い! = コストが高い
Slide 17
Slide 17 text
テスト戦略 そこで!! httpstub, grpcstubを活用し スタブサーバーを実装!!
Slide 18
Slide 18 text
httpstub、grpcstubとは httptest.Serverを使ったスタブサーバーを簡単に実装できる https://github.com/k1LoW/httpstub
Slide 19
Slide 19 text
https://github.com/k1LoW/httpstub
Slide 20
Slide 20 text
httptest.Serverを使うと何が嬉しいか httptest.NewServerで立ち上げたサーバーはgoroutineで実行される Go Runtimeが構成要素を管理するため、 軽量で安定した運用が可能
Slide 21
Slide 21 text
https://speakerdeck.com/k1low/go-conference-2023?slide=8
Slide 22
Slide 22 text
テスト戦略 これらを使うことで、 統合テストやE2Eテストをミディアムテスト として実現 また、goroutineで実行されるサーバーを用いることで安定感がある https://testing.googleblog.com/2010/12/test-sizes.html
Slide 23
Slide 23 text
https://levtech.jp/media/article/column/detail_496/
Slide 24
Slide 24 text
テスト戦略 あとは... コスパ良く楽にシナリオテストを書きたい...
Slide 25
Slide 25 text
テスト戦略 あとは... コスパ良く楽にシナリオテストを書きたい... runnを活用!!
Slide 26
Slide 26 text
runnとは https://github.com/k1LoW/runn
Slide 27
Slide 27 text
runnとは YAMLで書いたシナリオテストを実行できる! GitHub ActionsやKubernetesのマニフェストを書 いたことがあれば簡単!
Slide 28
Slide 28 text
https://github.com/k1LoW/runn
Slide 29
Slide 29 text
runnとは そして... Goのテストに組み込めます!!!! 組み込んだらいつも通り go test を実行すればOK!
Slide 30
Slide 30 text
https://github.com/k1LoW/runn
Slide 31
Slide 31 text
テスト戦略 ● httpstub, grpcstubを使ったスタブサーバをテストに使用 ● シナリオテストツール runn を使用
Slide 32
Slide 32 text
テスト戦略 ● httpstub, grpcstubを使ったスタブサーバをテストに使用 ● シナリオテストツール runn を使用 ● goroutineの仕組みを使った安定性のあるミディアムテスト ● すぐにGoテストに組み込める書き心地のいいシナリオテスト
Slide 33
Slide 33 text
テスト戦略 ● httpstub, grpcstubを使ったスタブサーバをテストに使用 ● シナリオテストツール runn を使用 ● goroutineの仕組みを使った安定性のあるミディアムテスト ● すぐにGoテストに組み込める書き心地のいいシナリオテスト
Slide 34
Slide 34 text
結果...
Slide 35
Slide 35 text
一方で現在は課題もある ・実行時間増加 ・Flaky Test 5分では話しきれないので、会社の技術ブログ書きます!
Slide 36
Slide 36 text
おわりに ぜひこれらのツールを活用して 「コスパの良い」テストを実装してみてください!