GitHub Flowでの高速なデリバリーをささえるテスト基盤について
by
kimkiyong
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
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に対して独自の静的解析を実行 攻めのための守りを改善しています