7

Ngược lại với previous question, tôi sẽ cố gắng đưa ra các yêu cầu của tôi.Cách tự động hóa các bài kiểm tra chức năng/tích hợp và khôi phục cơ sở dữ liệu

Tôi cố gắng để tìm thấy một số khuôn khổ/phương pháp/"điều" mà sẽ phù hợp với những điều sau đây:

  • Có khả năng viết một bài kiểm tra tự động, tốt nhất là viết bằng Visual Studio, sử dụng C#.
  • Thử nghiệm sẽ thúc đẩy trình duyệt web và tương tác với SUT giống như người dùng.
  • Kiểm tra sẽ có thể thiết lập kịch bản thử nghiệm trong DB.
  • Kiểm tra sẽ có thể khẳng định rằng tương tác của người dùng có hiệu quả mong đợi trong DB.
  • Sau khi thử nghiệm hoàn tất, nó sẽ có thể khôi phục tất cả các thay đổi được thực hiện trong DB.

Nỗ lực đầu tiên của tôi là sử dụng thử nghiệm NUnit để điều khiển Selenium (và Watin trước đó), nhưng tôi gặp phải một chút vấn đề (kiểm tra liên kết ở trên) trong khi sử dụng TransactionScope để quay lại các thay đổi đã làm trong DB.

Có ai đã làm bất cứ điều gì như thế này trong "thế giới thực" không? Tôi đã tìm thấy một số tài liệu tham khảo thông qua Google, nhưng không thể tìm thấy bất kỳ ví dụ cụ thể nào về cách triển khai điều này. Sẽ không có vấn đề gì nếu tôi làm thử nghiệm đơn vị. Trong trường hợp đó, TransactionScope sẽ khá là đủ.

Chỉnh sửa: R. Harvey đã chỉ cho tôi câu hỏi this, gần như giống với hoàn cảnh của tôi.

Tuy nhiên câu hỏi đó chỉ là gần như giống hệt nhau. Ứng dụng của tôi là một phần của một nhóm dịch vụ, tất cả chúng đều truy cập vào cùng một bộ các bảng cơ sở dữ liệu. Số lượng dữ liệu thử nghiệm được yêu cầu không cho phép sử dụng hiệu quả các tập lệnh thả/tạo, vì vậy có một số giải pháp thay thế cho điều này?

Chúng tôi đang sử dụng SQL Server 2005 và tôi không thành thạo về ma thuật cơ sở dữ liệu, vì vậy nếu có cách nào đó để sử dụng kịch bản lệnh sql khác với thả/tạo, thì đó có thể là một tùy chọn.

Chỉnh sửa 2:

Dựa trên các câu trả lời và một số người đứng đầu thêm trầy xước, chúng tôi sẽ đi cho cơ sở dữ liệu trọng lượng nhẹ hơn cho các nhà phát triển để thực hiện unit-, thử nghiệm integration- và chức năng. Điều này cho phép chúng tôi sử dụng các tập lệnh sql để thiết lập và rà soát bài kiểm tra.

+0

Điều này có thể giúp: http://stackoverflow.com/questions/768944/rollback-database-after-integration-selenium-tests –

+0

Có, tôi không gặp vấn đề gì với Selenium. Có vẻ là một công cụ tuyệt vời! Vấn đề nằm trong việc quay trở lại những thay đổi Selenium broser hướng vào db. – juarola

+0

Ôi trời, làm thế nào tôi có thể bỏ lỡ điều đó. Tôi đã cố gắng tìm kiếm rộng rãi trước khi đăng bài này, nhưng kịch bản trong câu hỏi đó gần như là một bản sao. Tôi sẽ thêm một điểm vào câu hỏi của mình để phân biệt với tình huống của họ ... – juarola

Trả lời

7

Các thay đổi được thực hiện trong giao dịch chỉ hiển thị trong giao dịch được cho biết. Ngoài ra, việc kiểm tra trong một phạm vi giao dịch (nếu có thể) sẽ làm cho thử nghiệm hoạt động khác với thực tế ở một khía cạnh rất quan trọng (các giao dịch).

Tốt hơn hết là nên sử dụng hình ảnh cơ sở dữ liệu mà bạn khôi phục trước mỗi bộ thử nghiệm. Bằng cách này sau khi bộ hoàn thành và xác minh được thực hiện, bạn thả cơ sở dữ liệu thử nghiệm. Lần chạy tiếp theo, trong khi thiết lập bộ, cơ sở dữ liệu được tạo lại từ hình ảnh đã lưu trong trạng thái nguyên sơ sẵn sàng để thử nghiệm. Thậm chí tốt hơn là có một kịch bản triển khai cơ sở dữ liệu từ đầu và chạy tập lệnh đó trong khi thiết lập bộ.

Btw không khả thi để khôi phục về trạng thái nguyên sơ trước mỗi lần kiểm tra. Thông thường hơn là không khả thi để có các bước thiết lập thử nghiệm riêng lẻ và các bước dọn dẹp.Khi bạn thêm nhiều thử nghiệm, thời gian dành cho việc khôi phục cơ sở dữ liệu về điều kiện thử nghiệm đã sẵn sàng giữa các thử nghiệm sẽ trở thành không thể quản lý được. Suites với hàng trăm bài kiểm tra là khá phổ biến và chạy thử nghiệm đầy đủ của hàng chục ngàn bài kiểm tra sẽ có nghĩa là giờ và giờ đã dành chỉ khôi phục cơ sở dữ liệu để kiểm tra. Thiết kế thử nghiệm cá nhân của bạn để chúng có thể chạy độc lập, tức là. kiểm tra N phải tạo ra kết quả hợp lệ ngay cả khi kiểm tra N-1 thất bại.

Một điều khác cần xem xét là điều tra lỗi, bạn muốn kiểm tra không thành công để rời khỏi cơ sở dữ liệu ở trạng thái có thể được điều tra để biết thông tin có ý nghĩa bạn muốn thử nghiệm tiếp theo để có thể chạy và tạo kết quả hợp lệ. Đôi khi những yêu cầu này sẽ mâu thuẫn nhau, nhưng bạn phải xem xét và thiết kế thử nghiệm của bạn xung quanh chúng.

+0

Cảm ơn bạn vì những hiểu biết sâu sắc, đặc biệt là phần về điều tra thất bại. Tôi sẽ đánh dấu câu trả lời này là một câu trả lời, vì tôi có xu hướng đồng ý rằng những gì tôi nghĩ ban đầu không thực sự là một giải pháp thực tế. – juarola

+0

Bạn chắc chắn đã chọn cách tiếp cận của mình từ lâu, nhưng chỉ cần lưu ý rằng bạn luôn có thể tạo lại một bài kiểm tra không thành công và có thể bước qua nó bằng cách sử dụng trình gỡ lỗi. Vì vậy, tôi sẽ không làm cho vấn đề ra khỏi giữ lại trạng thái cơ sở dữ liệu. –

7

Nếu lượng dữ liệu cần thiết để khôi phục cơ sở dữ liệu ở trạng thái tốt được biết là cấm thả/tạo tập lệnh và bạn đang chạy thử nghiệm trên phiên bản Nhà phát triển hoặc Enterprise 2005, bạn có thể xem xét creating a database snapshot của hàng hóa và reverting to it trước mỗi bài kiểm tra. Điều này là nhanh hơn đáng kể so với một khôi phục đầy đủ, mặc dù nó có thể vẫn còn quá tốn thời gian nếu bạn có hàng trăm bài kiểm tra.

+0

Cảm ơn bạn đã trả lời! Đây là thực hành tiêu chuẩn trong qa-bộ phận của chúng tôi. Mục tiêu của tôi là tìm một số thay thế nhẹ cho các nhà phát triển sử dụng trước khi mã đi đến qa. Tôi nghĩ rằng chúng tôi sẽ phải đi cho "phát triển" -contents cho cơ sở dữ liệu, do đó nó sẽ chỉ có đủ dữ liệu để thử nghiệm nhanh chóng trong quá trình phát triển. – juarola

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