Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GitHub Flowでの高速なデリバリーをささえるテスト基盤について
Search
kimkiyong
December 15, 2022
Programming
760
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
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
940
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
550
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
220
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
360
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
260
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
160
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
6
13k
The Rails Doctrine Decade
koic
2
390
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
340
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
390
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
520
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
270
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
300
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
370
Accessibility Awareness
sabderemane
1
220
Exploring anti-patterns in Rails
aemeredith
4
510
The Cult of Friendly URLs
andyhume
79
7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Six Lessons from altMBA
skipperchong
29
4.5k
Embracing the Ebb and Flow
colly
88
5.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
250
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に対して独自の静的解析を実行 攻めのための守りを改善しています