Cơ sở dữ liệu và máy chủ CI


8

Tôi có một máy chủ CI (Hudson) vui vẻ xây dựng, chạy thử nghiệm đơn vị và triển khai cho môi trường phát triển nhưng bây giờ tôi muốn cho nó chạy thử nghiệm tích hợp.

Các bài kiểm tra tích hợp sẽ đánh vào cơ sở dữ liệu và cơ sở dữ liệu đó sẽ liên tục được thay đổi để chứa dữ liệu liên quan đến bài kiểm tra được đề cập. Tuy nhiên, điều này dẫn đến một vấn đề - làm cách nào để đảm bảo cơ sở dữ liệu không bị văng dữ liệu cho một thử nghiệm và sau đó dữ liệu đó được ghi đè bởi một dự án thứ hai trước khi bộ thử nghiệm đầu tiên hoàn thành?

Tôi hiện đang sử dụng phương pháp "hy vọng", hiện không hoạt động quá tệ, nhưng chủ yếu là do chúng tôi chỉ có một số lượng nhỏ các thử nghiệm tích hợp được thiết lập trên CI.

Như tôi thấy, tôi có các tùy chọn sau:

  • Các cơ sở dữ liệu kiểm tra cục bộ (trong bộ nhớ)
    Tôi không chắc liệu có bất kỳ cơ sở dữ liệu trong bộ nhớ nào xử lý tất cả sự đáng sợ của các trình kích hoạt và gói Oracles hay không, và bất cứ điều gì tôi không cảm thấy sẽ đáng giá trong khi kiểm tra.
  • CI Executor-local cơ sở dữ liệu
    Cần có một lượng công việc lớn để thiết lập và cập nhật chúng, nhưng chắc chắn là một tùy chọn (hầu hết các công việc đã được thực hiện để cập nhật cơ sở dữ liệu CI hiện tại).
  • Người thực hiện "kiểm thử tích hợp" có
    thể dễ thực hiện nhất, nhưng sẽ có nghĩa là các kiểm thử tích hợp có thể bị tụt lại khá xa.
  • Khóa cơ sở dữ liệu (hoặc bộ bảng)

Tôi chắc chắn tôi đã bỏ lỡ một số cách (vui lòng thêm chúng). Làm thế nào để bạn chạy thử nghiệm tích hợp dựa trên cơ sở dữ liệu trên máy chủ CI? Những vấn đề bạn đã có và phương pháp nào bạn đề nghị? (Lưu ý: Trong khi tôi sử dụng Hudson, tôi rất vui khi chấp nhận câu trả lời cho bất kỳ máy chủ CI nào, những ý tưởng tôi chắc chắn sẽ có thể mang theo được, ngay cả khi các chi tiết không có).

Chúc mừng,
     Mlk


1
Câu hỏi stackoverflow này có thể hữu ích cho bạn.
Michael K

Câu trả lời:


1

Chỉ là một ý tưởng, vì tôi chưa bao giờ thực sự làm điều này, nhưng bạn có thể thiết lập một nhiệm vụ để lấy DDL cho lược đồ cơ sở dữ liệu mà bạn đang kiểm tra và tạo lại nó trong bộ nhớ hoặc trên cơ sở dữ liệu khác. Có vẻ như nó khá đơn giản trong Oracle. Sau đó, bạn có thể tự động tạo cơ sở dữ liệu mới bất cứ khi nào nó thay đổi.

Có vẻ như Oracle có một cơ sở dữ liệu trong bộ nhớ gọi là TimesTen . Nó có thể đáng xem xét. Tôi chắc chắn sẽ thích sử dụng cơ sở dữ liệu trong bộ nhớ nếu có thể, vì nó thường nhanh hơn lưu trữ cứng.


Tôi đã thử dbs trong bộ nhớ vài năm trước nhưng tôi thấy nó chậm hơn nhiều so với sử dụng DB thực sự (tôi rất vui khi được thử lại lần nữa). Db thực sự tồn tại với lược đồ (nhưng không có nội dung). Bộ nhớ trong cần được khởi động và tạo lược đồ cho mỗi lần chạy thử / kiểm tra. Tôi sẽ cho TimeTen chơi và xem liệu tôi có thể liên kết nó với hệ thống cập nhật lược đồ và nhân bản cơ sở dữ liệu hiện có của chúng tôi không.
mlk

Có lẽ bạn có thể tạo một singleton chứa tham chiếu đến cơ sở dữ liệu và chỉ cần dọn sạch các bảng sau mỗi bài kiểm tra? Tôi đoán kinh nghiệm của tôi đã không có với bộ dữ liệu đủ lớn.
Michael K

Đã sử dụng Apache Derby cho việc này, nó hoạt động.
Tim Williscroft

1

Chúng tôi chạy các kiểm tra tích hợp dựa trên cơ sở dữ liệu bằng cách đứng lên một máy chủ cơ sở dữ liệu để làm việc với hộp CI và lưu trữ đối tượng CI. Kiểu như cách dàn dựng và sản xuất đều có máy chủ cơ sở dữ liệu riêng.


Làm thế nào để bạn xử lý nhiều dự án kiểm tra đánh cùng một cơ sở dữ liệu cùng một lúc, hoặc bạn có cơ sở dữ liệu cho mỗi người thực thi không?
mlk

2
Mọi người đều có cơ sở dữ liệu của riêng mình (hoặc cơ sở dữ liệu theo yêu cầu) theo thuật ngữ máy chủ SQL, không biết cách dịch sang Oracle-land.
Wyatt Barnett

Giả sử tôi đang đọc chính xác, mỗi người thực hiện CI có cơ sở dữ liệu riêng? Làm thế nào để bạn cấu hình lại app.config (/ tuy nhiên cấu hình cơ sở dữ liệu của bạn đã được thực hiện) cho mỗi người thực thi?
mlk

1
Một lần nữa, tôi không chắc là tôi có hiểu thuật ngữ của bạn ở đây không, nhưng đối với CI, chúng tôi đã thiết lập hộp với các quy ước tương tự mà chúng tôi sử dụng trong nhóm phát triển để mọi thứ bắt đầu - ví dụ: mọi người đều sử dụng cơ sở dữ liệu được đặt tên là "foo" tại máy chủ sql localhost \ SQLEXPRESS để nó hoạt động.
Wyatt Barnett

À, vậy bạn chạy db cục bộ hay là SQLEXPRESS một cơ sở dữ liệu trong bộ nhớ? Nếu nó là cục bộ thì điều này giới hạn bạn với một người thực thi duy nhất cho mỗi thể hiện CI.
mlk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.