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
kimkiyong
December 15, 2022
Programming
750
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
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
8k
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
280
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
240
T3DD26: From RAGs to Riches
martinhelmich
0
130
源内ハンズオン概要編
hideg
0
230
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
480
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
480
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
250
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.4k
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.3k
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
850
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
770
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
510
Speed Design
sergeychernyshev
33
2.1k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
The Curious Case for Waylosing
cassininazir
1
490
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Automating Front-end Workflow
addyosmani
1369
210k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
680
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
Facilitating Awesome Meetings
lara
57
7.1k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
460
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に対して独自の静的解析を実行 攻めのための守りを改善しています