Database dan server CI

8

Saya memiliki server CI (Hudson) yang dengan riang membangun, menjalankan tes unit dan menyebarkan ke lingkungan pengembangan, tetapi sekarang saya ingin membuatnya menjalankan tes integrasi.

Tes integrasi akan mengenai basis data dan basis data tersebut akan secara konsisten diubah untuk berisi data yang relevan dengan pengujian yang dimaksud. Namun ini mengarah ke masalah - bagaimana saya memastikan database tidak disebarkan dengan data untuk satu tes dan kemudian data tersebut ditimpa oleh proyek kedua sebelum set tes pertama selesai?

Saya saat ini menggunakan metode "harapan", yang tidak bekerja terlalu buruk saat ini, tetapi sebagian besar karena kenyataan bahwa kami hanya memiliki sejumlah kecil tes integrasi yang diatur pada CI.

Seperti yang saya lihat, saya memiliki opsi berikut:

  • Basis data uji-lokal (dalam memori)
    Saya tidak yakin apakah ada basis data di dalam memori yang menangani semua ketakutan pemicu dan paket Oracle, dll, dan apa pun yang kurang saya rasa tidak akan bernilai saat pengujian.
  • Basis data pelaksana CI-lokal
    Sejumlah pekerjaan yang wajar diperlukan untuk mengatur ini dan tetap mengikuti perkembangannya, tetapi merupakan pilihan (sebagian besar pekerjaan sudah dilakukan untuk menjaga agar basis data CI saat ini tetap mutakhir).
  • Eksekutor "uji integrasi" tunggal
    Kemungkinan yang paling mudah untuk diterapkan, tetapi akan berarti tes integrasi bisa jauh di belakang.
  • Mengunci basis data (atau set tabel)

Saya yakin saya telah melewatkan beberapa cara (tolong tambahkan mereka). Bagaimana Anda menjalankan tes integrasi berbasis database di server CI? Masalah apa yang Anda miliki dan metode apa yang Anda rekomendasikan? (Catatan: Saat saya menggunakan Hudson, saya senang menerima jawaban untuk server CI apa pun, ide-ide yang saya yakin akan portabel, meskipun detailnya tidak).

Cheers,
     Mlk

mlk
sumber
1
Pertanyaan stackoverflow ini mungkin membantu Anda.
Michael K

Jawaban:

1

Hanya sebuah ide, karena saya belum pernah benar-benar melakukan ini, tetapi Anda dapat mengatur tugas untuk mendapatkan DDL untuk skema database yang Anda uji, dan membuatnya kembali dalam memori atau pada database lain. Sepertinya itu cukup sederhana di Oracle. Kemudian Anda dapat secara otomatis membuat database baru setiap kali ada perubahan.

Sepertinya Oracle memiliki basis data dalam memori yang disebut TimesTen . Mungkin layak untuk dilihat. Saya pasti lebih suka menggunakan basis data dalam memori jika memungkinkan, karena biasanya lebih cepat daripada penyimpanan keras.

Michael K.
sumber
Saya mencoba dbs dalam memori beberapa tahun yang lalu, tetapi saya menemukan itu jauh lebih lambat daripada menggunakan DB nyata (saya senang mencobanya lagi). Db nyata ada dengan skema (tetapi tidak ada konten). Memori dalam harus dimulai dan skema dibuat untuk setiap tes / uji coba. Saya akan memberikan TimeTen permainan dan melihat apakah saya dapat menautkannya ke sistem kloning dan pembaruan skema database kami yang ada.
mlk
Mungkin Anda bisa membuat singleton yang memegang referensi ke database, dan hanya membersihkan tabel setelah setiap tes? Saya kira pengalaman saya belum dengan set data yang cukup besar.
Michael K
Telah menggunakan Apache Derby untuk ini, berfungsi.
Tim Williscroft
1

Kami menjalankan tes integrasi berbasis basis data dengan menjalankan server database untuk bekerja dengan kotak CI dan meng-host instance CI. Seperti bagaimana pementasan dan produksi masing-masing memiliki server database sendiri.

Wyatt Barnett
sumber
Bagaimana Anda menangani proyek-proyek pengujian multiplikasi yang mengenai database yang sama pada saat yang sama, atau apakah Anda memiliki database per pelaksana?
mlk
2
Semua orang mendapatkan database mereka sendiri (atau database sesuai kebutuhan) dalam istilah SQL server, tidak yakin bagaimana itu diterjemahkan ke Oracle-land.
Wyatt Barnett
Dengan asumsi saya membaca ini dengan benar, setiap pelaksana CI mendapatkan database sendiri? Bagaimana Anda mengkonfigurasi ulang app.config (/ namun konfigurasi basis data Anda selesai) untuk setiap pelaksana?
mlk
1
Sekali lagi, saya tidak yakin apakah saya memahami terminologi Anda di sini, tetapi untuk CI, kami menyiapkan kotak dengan konvensi yang sama yang kami gunakan dalam tim pengembangan sehingga semuanya berjalan dengan baik - misalnya, semua orang menggunakan database bernama "foo" di server sql localhost \ SQLEXPRESS sehingga hanya berfungsi.
Wyatt Barnett
Ah jadi Anda menjalankan db secara lokal atau apakah SQLEXPRESS merupakan basis data dalam memori? Jika bersifat lokal, ini membatasi Anda untuk satu eksekutor per instance CI.
mlk