DBを使ったテストで詰まった点とその対策
by
sontixyou
×
Copy
Open
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
2024/09/11 RustのWebアプリ開発 LT道場 〜テスト編〜 DBを使ったテストで詰まった点とその対策 01 1
Slide 2
Slide 2 text
02 2 西村 憲悟 [にしむら けんご] ファインディ株式会社 / バックエンド @sontixyou
Slide 3
Slide 3 text
● Webアプリケーションのテストで直面した課題 ● 問題に対しての解決アプローチ ● まとめ 今日話すこと 03 3
Slide 4
Slide 4 text
今日話さないこと 04 ● テストデータの作成を楽にする方法 ● どこの月見バーガーがうまいのか 4
Slide 5
Slide 5 text
● 実行を短時間で終わらせたい ● テストケース間で干渉しないようにテス トしたい テストに対してのモチベーション 05 5
Slide 6
Slide 6 text
アプリケーションの構成 06 6 アプリケーション DB ORM: sea-orm https://github.com/SeaQL/sea-orm
Slide 7
Slide 7 text
アプリケーションコード 07 7 DBコネクションしてから postテーブルにレコードを作成 DBコネクションしてから postテーブルにあるレコードを更新
Slide 8
Slide 8 text
テストコード 08 8
Slide 9
Slide 9 text
各テストがひとつのDBを使う状態で cargo testするとどうなるのか? テストの問題点 09 9
Slide 10
Slide 10 text
● 複数のテストが同じDBにデータを読み書きすると、 テスト同士で影響が出る ○ テストが失敗したり、flakyになる テストの問題点 10 10
Slide 11
Slide 11 text
ユニーク制約ぐぬぬ DBのユニーク制約にひっかかり、自分が作りたいデータ を作成できない テストの問題点 11 11
Slide 12
Slide 12 text
● △ 実行を短時間で終わらせたい ● ✗ テストケース間で干渉する テストの問題点 12 12
Slide 13
Slide 13 text
cargo testをすると並列でテストが実行されるため https://doc.rust-lang.org/book/ch11-02-running-tests.html#running-tests-in-parallel-or-consecutively DBへCRUDする場合での難しさ 13 13
Slide 14
Slide 14 text
● テストケースごとにDBを分ける ● 並列数を1にする ○ cargo testのオプションで可能 ● モックDBを使う ○ sea-ormでサポートされている 対応方法候補 14 14
Slide 15
Slide 15 text
● テストケースごとにDBを分ける ● 並列数を1にする ● モックDBを使う 対応方法候補 15 15
Slide 16
Slide 16 text
テスト実行前にDBを作成。 実行後にDBを削除する。 ↓ test_contextを使用することで実現可能になる。 https://docs.rs/test-context/latest/test_context/ テストケースごとにDBを分ける 準備編 16 16
Slide 17
Slide 17 text
テストケースごとにDBを分ける 実装編 17 17
Slide 18
Slide 18 text
テストケースごとにDBを分ける 実装編 18 18 setupとteardown関数を呼び出す下準備
Slide 19
Slide 19 text
テストケースごとにDBを分ける 実装編 19 19 テストに対してのモチベーション ● ✅ テスト実行を短時間で終わる ● ✅ テストケース間で干渉しない
Slide 20
Slide 20 text
テストケースごとにDBを分ける 実装編 20 20 実装の詳細はこちらを見てほしい🦀 https://github.com/sontixyou/sea_orm_practice_db2024
Slide 21
Slide 21 text
まとめ 21 21 ● 並列でテスト実行をするときはDBの接続先に気 をつけよう ● sea-ormを使う際は一工夫が必要 ○ 自前実装が手間ならsqlxを使うのも手
Slide 22
Slide 22 text
宣伝 開催日時: 10月 8日 (火曜日) 19:30~ ↓詳細はこちら↓ 22 22 🦀Rust地域コミュニティ🦀 Osaki.rs はじめました!!