2008-11-03 22 views
8

Tôi hiện đang trong quá trình thử nghiệm giải pháp của chúng tôi có toàn bộ "gam màu" của các lớp: Giao diện người dùng, Trung bình và Cơ sở dữ liệu ở khắp nơi.Bạn sử dụng phương pháp hay nhất nào để kiểm tra truy vấn cơ sở dữ liệu?

Trước khi tôi đến nhóm hiện tại của tôi, kiểm tra truy vấn được thực hiện bởi người kiểm tra thủ công các truy vấn thủ công về mặt lý thuyết sẽ trả về kết quả là thủ tục được lưu trữ sẽ trở lại dựa trên các quy tắc liên quan khác nhau, sắp xếp, bạn có gì.

Điều này có tác dụng phụ của lỗi được gửi đối với truy vấn của người thử nghiệm thường xuyên hơn so với truy vấn thực tế được đề cập.

Tôi đề xuất thực sự làm việc với tập hợp kết quả đã biết mà bạn có thể suy ra cách nó sẽ trả về vì bạn kiểm soát dữ liệu hiện tại - trước đó, dữ liệu được lấy từ sản xuất, vệ sinh và sau đó được điền vào cơ sở dữ liệu thử nghiệm của chúng tôi.

Mọi người vẫn khăng khăng tạo truy vấn của riêng họ để kiểm tra xem nhà phát triển đã tạo ra những gì. Tôi nghi ngờ rằng vẫn còn nhiều. Tôi có nó trong tâm trí của tôi rằng đây không phải là lý tưởng ở tất cả, và chỉ làm tăng dấu chân thử nghiệm của chúng tôi không cần thiết. Vì vậy, tôi tò mò, bạn sử dụng phương pháp nào để kiểm tra các tình huống như thế này và điều gì sẽ được coi là lý tưởng cho mức độ phù hợp nhất từ ​​đầu đến cuối mà bạn có thể nhận được mà không cần đưa dữ liệu hỗn loạn vào?

Vấn đề tôi có là nơi tốt nhất để làm những gì thử nghiệm. Tôi chỉ cần chọc trực tiếp dịch vụ và so sánh tập dữ liệu đó với dữ liệu mà tôi có thể lấy từ quy trình được lưu trữ? Tôi có một ý tưởng thô, và đã thành công đủ cho đến nay, nhưng tôi cảm thấy như chúng tôi vẫn còn thiếu một cái gì đó quan trọng ở đây, vì vậy tôi đang tìm đến cộng đồng để xem họ có bất kỳ thông tin chi tiết có giá trị nào có thể giúp xây dựng phương pháp thử nghiệm của tôi tốt hơn.

+0

Tôi sẽ tiếp tục và thêm nhận xét rằng môi trường đích thực sự là tất cả công nghệ dựa trên MS (SQL, IIS, .NET), để tốt hơn hoặc tệ hơn. Tuy nhiên, tôi vẫn đánh giá cao việc đề cập đến các công cụ sử dụng những thứ như Python, mặc dù tôi thiếu kỹ năng ở đó. –

Trả lời

3

Thử nghiệm các procs được lưu trữ sẽ yêu cầu mỗi người thử nghiệm có một phiên bản db riêng biệt. Đây là một yêu cầu. Nếu bạn chia sẻ môi trường, bạn sẽ không thể dựa vào kết quả thử nghiệm của mình. Họ sẽ vô giá trị.

Bạn cũng sẽ cần phải đảm bảo rằng bạn quay trở lại db về trạng thái trước đó sau mỗi lần kiểm tra để làm cho kết quả có thể dự đoán và ổn định. Bởi vì điều này cần phải quay trở lại trạng thái sau mỗi bài kiểm tra các bài kiểm tra này sẽ mất nhiều thời gian hơn để hoàn thành hơn các bài kiểm tra đơn vị tiêu chuẩn nên có thể họ sẽ là thứ bạn muốn chạy qua đêm.

Có một vài công cụ giúp bạn thực hiện việc này. DbUnit là một trong số họ và tôi cũng tin rằng Microsoft đã có một công cụ Visual Studio cho các chuyên gia cơ sở dữ liệu có chứa một số hỗ trợ cho thử nghiệm DB.

1

Là một phần của quá trình tích hợp liên tục, chúng tôi chạy 'xây dựng' hàng đêm của các truy vấn cơ sở dữ liệu. Điều này liên quan đến một bộ các cuộc gọi DB được cập nhật thường xuyên từ các cuộc gọi thực trong mã cũng như bất kỳ truy vấn ad-hoc nào được mong đợi.

Các cuộc gọi này được hẹn giờ để đảm bảo rằng:

1/Không mất quá nhiều thời gian.

2/Chúng không khác nhau một cách hoang dại (theo cách xấu) từ đêm trước.

Bằng cách này, chúng tôi bắt các truy vấn hoặc DB thay đổi nhanh chóng.

+0

Những "cuộc gọi của các cuộc gọi DB", là họ nhái của các cuộc gọi thực sự? Và nếu có, bạn có duy trì những điều này cùng với bất kỳ truy vấn nào trong mã không? –

+0

Chúng tôi trích xuất từng cuộc gọi thực từ mã và thực hiện một số phép thuật regex để tạo truy vấn tĩnh từ nó, sau đó thêm lệnh gọi tĩnh này vào bộ. Chúng tôi cũng lưu trữ dòng nguồn để chúng tôi có thể phát hiện các thay đổi và làm lại nó. – paxdiablo

+0

Thú vị! Cảm ơn! –

3

Dưới đây là một số hướng dẫn:

  1. Sử dụng một cơ sở dữ liệu riêng biệt cho kiểm tra đơn vị (ví dụ: Không chạy thử nghiệm khác hoặc hoạt động)
  2. Luôn chèn tất cả các dữ liệu thử nghiệm bạn có ý định truy vấn trong các thử nghiệm cùng
  3. Viết các thử nghiệm để tạo ngẫu nhiên các khối lượng dữ liệu khác nhau số lượng chèn ngẫu nhiên cho biết từ 1 đến 10 hàng
  4. Phân ngẫu nhiên dữ liệu, ví dụ: cho một chèn lĩnh vực boolean ngẫu nhiên và đúng hay sai
  5. Giữ một số trong các thử nghiệm của các biến (ví dụ như số hàng, số lượng trues)
  6. Đối với Khẳng định thực hiện truy vấn và so sánh với các biến kiểm tra địa phương
  7. Sử dụng các doanh nghiệp dịch vụ giao dịch để rollback cơ sở dữ liệu về trạng thái trước

Xem các liên kết dưới đây để biết các kỹ thuật doanh nghiệp Dịch vụ giao dịch:

http://weblogs.asp.net/rosherove/articles/DbUnitTesting.aspx

+1

1-10 hàng sẽ không kiểm tra nhiều. Và đặc biệt không phải hiệu suất trên các hàng 10M-1B. –

1

Kế hoạch truy vấn là bạn của bạn, đặc biệt là trong trường hợp này. Nó luôn luôn là thực hành tốt để kiểm tra xem các chỉ mục được sử dụng khi bạn mong đợi họ và truy vấn không yêu cầu phải làm thêm. Ngay cả khi bạn có các bài kiểm tra căng thẳng bao gồm trong bộ phần mềm của bạn, bạn vẫn nên nắm bắt các truy vấn tốn kém trước khi ứng dụng của bạn bắt đầu ngừng hoạt động.

0

Tôi thấy hữu ích khi kiểm tra SQL được gửi xuống cơ sở dữ liệu thay vì kết quả truy vấn cơ sở dữ liệu.

Không phải là tôi không làm sau, nhưng tôi thấy nó nhanh hơn nhiều để kiểm tra cho điều đó hơn là có cơ sở dữ liệu quá nhiều nâng.

1

Chúng tôi có một cơ sở dữ liệu trống dành riêng cho từng nhà phát triển và người kiểm tra.

Khi thử nghiệm được chạy - mỗi lần kiểm tra sẽ xóa cơ sở dữ liệu và tải dữ liệu mà nó đang mong muốn sử dụng. Điều này cho chúng ta một trạng thái được biết đến mọi lúc.

Sau đó, chúng tôi có thể kiểm tra một số kịch bản khác nhau trên cùng một DB (một cái khác) và chúng tôi không bao giờ đóng dấu trên các ngón chân khác.

Điều đó bao gồm kiểm tra quyền truy cập dữ liệu. Đối với thử nghiệm dịch vụ, chúng tôi làm được điều tương tự nhưng chúng tôi chỉ kiểm tra bên trong dịch vụ - chúng tôi không thực sự nhấn dịch vụ mà chúng tôi tạo một phiên bản của lớp xử lý dịch vụ và chuyển vào mọi thứ chúng tôi cần. Bằng cách đó, chúng tôi đang thử nghiệm mã và không phải là cơ sở hạ tầng (thông báo, v.v.)

1

Django cung cấp khả năng kiểm tra đơn vị cơ sở dữ liệu. Bạn có thể mượn ý tưởng thiết kế của họ và tái tạo nó trong các môi trường khác.

Các folks Django cung cấp một lớp con của lớp không chuẩn nhất của lớp TestCase của Python điền một cơ sở dữ liệu với một vật cố định đã biết - một tập hợp các hàng dữ liệu đã biết.

Trong trường hợp của Django (và Python), cách dễ nhất để điền cơ sở dữ liệu từ một trích xuất dữ liệu JSON. Các định dạng tệp khác cho lịch thi đấu có thể được sử dụng cho các khung công tác khác. Ví dụ: nếu bạn đang làm việc trong Oracle, bạn có thể tìm thấy tệp CSV dễ dàng hơn để làm việc.

Lớp con TestCase này cho phép viết một TestCase điển hình để thực hiện cơ sở dữ liệu với lịch thi đấu dữ liệu đã biết.

Ngoài ra, hậu tố thử nghiệm Django tạo một lược đồ tạm thời cho mục đích thử nghiệm. Điều này là dễ dàng cho Django bởi vì họ có một thành phần quản lý đối tượng hoàn chỉnh-quan hệ bao gồm việc tạo DDL. Nếu bạn không có sẵn điều này, bạn vẫn sẽ cần tập lệnh DDL để bạn có thể tạo và xử lý lược đồ kiểm tra cho các mục đích không nhất quán.

1

SQLServerCentral có một bài viết here (bạn có thể phải đăng ký nhưng miễn phí và không có chuỗi) về Khung kiểm tra đơn vị TSQL được gọi là tsqlUnit. Nó là nguồn mở và tuân theo truyền thống của khung xUnit.

Nó theo mẫu SEAT TDD:

Setup - chuẩn bị các điều kiện thử nghiệm bằng cách thao tác các đối tượng, bảng và/hoặc dữ liệu

Tập thể dục - gọi mã sản xuất

Khẳng định - kiểm tra kết quả thực tế tương đương với kết quả mong đợi

Teardown - trả lại mọi thứ về cách trước khi thử nghiệm bắt đầu. Điều này thực sự được thực hiện bằng cách quay trở lại một giao dịch, giữ mọi thứ tốt đẹp và ngăn nắp.

Mặc dù tôi chưa sử dụng nhưng có vẻ đầy hứa hẹn và chắc chắn là điều tôi sẽ xem xét chi tiết hơn.

Khung có thể được tải xuống here.

Các vấn đề liên quan