GitHub Flowでの高速なデリバリーをささえるテスト基盤について
by
kimkiyong
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
GitHub Flowでの高速なデリバ リーをささえるテスト基盤について
Slide 2
Slide 2 text
自己紹介 金 祺庸 ▪ 2022年2月 BuysellTechnologies入社 ▫ BE エンジニア ■ Go歴 2 ~ 3年 ▫ BST.go (社内go community)の立ち上げ・運 営 ▪ 趣味 ▫ 読書 ▫ ジム ▫ 冷水シャワー
Slide 3
Slide 3 text
Agenda ▪ 開発環境・手法の紹介 ▫ テスト基盤にこだわる理由 ▪ テストへのこだわり ▫ テストケース毎にDBをRollback ▫ 宣言的なFixture ▫ E2Eテスト
Slide 4
Slide 4 text
1 開発環境・手法の紹介
Slide 5
Slide 5 text
開発環境 ▪ Microservices
Slide 6
Slide 6 text
開発環境 ▪ Microservices この辺り開発 しています
Slide 7
Slide 7 text
開発環境 ▪ 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が集中しやすい
Slide 8
Slide 8 text
開発環境 ▪ ブランチ戦略 ▫ Github Flow ■ 運用するbranchはmainブランチとfeatureブランチのみ ● mainブランチへのPRがmergeされると即Production環境へDeploy ▫ Feature Flag ■ コードを書き換えずフラグを使って機能の有効/無効を切り替える ● Deploy後、Feature Flagを切り替えることで機能がReleaseされる ■ ブランチの状態をRelease作業を切り離せる
Slide 9
Slide 9 text
Testを書きたい
Slide 10
Slide 10 text
2 テストへのこだわり
Slide 11
Slide 11 text
テストケース毎にDBをRollback ▪ DBはmockしない ▪ DATA-DOG/go-txdbを活用 ▫ テストケース毎に Transactionをはる ▫ CloseするだけでRollback が可能
Slide 12
Slide 12 text
テストケース毎にDBをRollback ▪ DBはmockしない ▪ DATA-DOG/go-txdbを活用 ▫ テストケース毎に Transactionをはる ▫ CloseするだけでRollback が可能 宣言したdriverを 使うことで transactionがは れる
Slide 13
Slide 13 text
宣言的なFixture ▪ kyong0612/polluterを使用 ▫ Mysql,PostgreSQL,Redisに対応 ▫ yaml形式でFixtureを用意できる ■ 再利用性が高い ■ パターンを用意することで面 倒なFixtureの挿入作業を簡 略化できる
Slide 14
Slide 14 text
宣言的なFixture ▪ kyong0612/polluterを使用 ▫ Mysql,PostgreSQL,Redisに対応 ▫ yaml形式でFixtureを用意できる ■ 再利用性が高い ■ パターンを用意することで面 倒なFixtureの挿入作業を簡 略化できる Fixtureを適用
Slide 15
Slide 15 text
E2Eテスト ▪ ClientからのRequestを再現できるE2E の機構を用意 ▫ 99design/gqlgenのclinet pkgを活用 ▫ http.Handlerを引数にE2E Serverを立てる
Slide 16
Slide 16 text
E2Eテスト ▪ ClientからのRequestを再現できるE2E の機構を用意 ▫ 99design/gqlgenのclinet pkgを活用 ▫ http.Handlerを引数にE2E Serverを立てる Clientを生成
Slide 17
Slide 17 text
E2Eテスト ▪ ClientからのRequestを再現できるE2E の機構を用意 ▫ 99design/gqlgenのclinet pkgを活用 ▫ http.Handlerを引数にE2E Serverを立てる Requestを実行
Slide 18
Slide 18 text
他にも 18 ▪ stretchr/testify ▫ Test関係のutilsを提供 ▫ Testing pkgの学習コスト軽減 ▪ gostaticanalysis/skeleton + gqlgo/gqlanalysisでの自作linter ▫ graphQL schemaに対して独自の静的解析を実行 攻めのための守りを改善しています