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
GitHub Flowでの高速なデリバリーをささえるテスト基盤について
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kimkiyong
December 15, 2022
Programming
730
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub Flowでの高速なデリバリーをささえるテスト基盤について
kimkiyong
December 15, 2022
Other Decks in Programming
See All in Programming
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
0
1.7k
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
830
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
4.8k
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
150
Vite+ Unified Toolchain for the Web
naokihaba
0
710
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
500
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
180
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
480
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
360
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
240
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Optimizing for Happiness
mojombo
378
71k
Mind Mapping
helmedeiros
PRO
1
280
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
310
Crafting Experiences
bethany
1
210
Side Projects
sachag
455
43k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
260
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Six Lessons from altMBA
skipperchong
29
4.3k
Done Done
chrislema
186
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
GitHub Flowでの高速なデリバ リーをささえるテスト基盤について
自己紹介 金 祺庸 ▪ 2022年2月 BuysellTechnologies入社 ▫ BE エンジニア ▪
Go歴 2 ~ 3年 ▫ BST.go (社内go community)の立ち上げ・運 営 ▪ 趣味 ▫ 読書 ▫ ジム ▫ 冷水シャワー
Agenda ▪ 開発環境・手法の紹介 ▫ テスト基盤にこだわる理由 ▪ テストへのこだわり ▫ テストケース毎にDBをRollback ▫
宣言的なFixture ▫ E2Eテスト
1 開発環境・手法の紹介
開発環境 ▪ Microservices
開発環境 ▪ Microservices この辺り開発 しています
開発環境 ▪ BEの構成 ▫ Hasura + Go API Server(Sidecar) ▪
主にGraphQLで通信 ▪ MSが提唱するSidecar Pattern ▪ Hasura(Primary Application) • DBのschemaからGraphQL APIを自動生成してくれる • 認可制御・基本的なCRUD操作が可能 ▪ Go API Server(Sidecar) • Hasura APIでは対応しきれない副作用的な処理を実行する • 他Serviceとの通信部分 • メインは99designs/gqlgen ◦ RESTも使う(Pub/Sub) • 複雑なLogicが集中しやすい
開発環境 ▪ ブランチ戦略 ▫ Github Flow ▪ 運用するbranchはmainブランチとfeatureブランチのみ • mainブランチへのPRがmergeされると即Production環境へDeploy
▫ Feature Flag ▪ コードを書き換えずフラグを使って機能の有効/無効を切り替える • Deploy後、Feature Flagを切り替えることで機能がReleaseされる ▪ ブランチの状態をRelease作業を切り離せる
Testを書きたい
2 テストへのこだわり
テストケース毎にDBをRollback ▪ DBはmockしない ▪ DATA-DOG/go-txdbを活用 ▫ テストケース毎に Transactionをはる ▫ CloseするだけでRollback
が可能
テストケース毎にDBをRollback ▪ DBはmockしない ▪ DATA-DOG/go-txdbを活用 ▫ テストケース毎に Transactionをはる ▫ CloseするだけでRollback
が可能 宣言したdriverを 使うことで transactionがは れる
宣言的なFixture ▪ kyong0612/polluterを使用 ▫ Mysql,PostgreSQL,Redisに対応 ▫ yaml形式でFixtureを用意できる ▪ 再利用性が高い ▪
パターンを用意することで面 倒なFixtureの挿入作業を簡 略化できる
宣言的なFixture ▪ kyong0612/polluterを使用 ▫ Mysql,PostgreSQL,Redisに対応 ▫ yaml形式でFixtureを用意できる ▪ 再利用性が高い ▪
パターンを用意することで面 倒なFixtureの挿入作業を簡 略化できる Fixtureを適用
E2Eテスト ▪ ClientからのRequestを再現できるE2E の機構を用意 ▫ 99design/gqlgenのclinet pkgを活用 ▫ http.Handlerを引数にE2E Serverを立てる
E2Eテスト ▪ ClientからのRequestを再現できるE2E の機構を用意 ▫ 99design/gqlgenのclinet pkgを活用 ▫ http.Handlerを引数にE2E Serverを立てる
Clientを生成
E2Eテスト ▪ ClientからのRequestを再現できるE2E の機構を用意 ▫ 99design/gqlgenのclinet pkgを活用 ▫ http.Handlerを引数にE2E Serverを立てる
Requestを実行
他にも 18 ▪ stretchr/testify ▫ Test関係のutilsを提供 ▫ Testing pkgの学習コスト軽減 ▪
gostaticanalysis/skeleton + gqlgo/gqlanalysisでの自作linter ▫ graphQL schemaに対して独自の静的解析を実行 攻めのための守りを改善しています