5

Trong dự án của chúng tôi, chúng tôi có rất nhiều bài kiểm tra đơn vị. Họ giúp giữ cho dự án được kiểm tra khá tốt.Làm cách nào để chạy thử nghiệm tích hợp?

Bên cạnh đó, chúng tôi có một tập hợp các bài kiểm tra là bài kiểm tra đơn vị nhưng phụ thuộc vào một số loại tài nguyên bên ngoài. Chúng tôi gọi cho họ kiểm tra bên ngoài. Ví dụ, đôi khi họ có thể truy cập các dịch vụ web.

Trong khi kiểm tra đơn vị dễ chạy, các kiểm tra tích hợp không thể vượt qua đôi khi: ví dụ: do lỗi hết thời gian chờ. Ngoài ra, các thử nghiệm này có thể mất quá nhiều thời gian để chạy.

Hiện tại, chúng tôi tiếp tục thử nghiệm tích hợp/kiểm tra đơn vị bên ngoài chỉ để chạy chúng khi phát triển chức năng tương ứng.

Đối với các thử nghiệm đơn vị đơn giản, chúng tôi sử dụng TeamCity để tích hợp liên tục.

Làm thế nào để bạn chạy thử nghiệm đơn vị tích hợp và khi nào bạn chạy chúng?

+0

Như lẽ của cuộc thảo luận này, tôi lookto làm thế nào để phân loại thử nghiệm tích hợp. Và bây giờ những gì tôi có thể tự thêm: 1. Kiểm tra để kiểm tra xem phần mềm của chúng ta có giao tiếp như mong đợi với phần mềm từ xa hay không (các mô hình từ xa có thể được sử dụng cho điều đó như được ghi nhận bởi S. Lott). 2. Kiểm tra để kiểm tra xem dịch vụ từ xa có hoạt động như chúng tôi mong đợi hay không. – Vladimir

Trả lời

2

Trong dự án của chúng tôi, chúng tôi có bộ riêng biệt cho các bài kiểm tra đơn vị thường xuyên/đơn giản và bộ riêng biệt cho các bài kiểm tra tích hợp. Các hai lý do cho điều đó:

  1. hiệu suất: thử nghiệm hội nhập chậm hơn nhiều,
  2. thử nghiệm mong manh: thử nghiệm hội nhập thất bại thường là do nhiều điều kiện môi trường liên quan đến (cho dương tính giả).

Chúng tôi sử dụng TeamCity làm máy chủ Tích hợp liên tục chính và Maven làm hệ thống xây dựng. Chúng tôi sử dụng thuật toán sau để chạy các thử nghiệm:

  1. Chúng tôi chạy thử nghiệm đơn vị trong IDE Eclipse và trước mỗi lần commit.
  2. Chúng tôi chạy thử nghiệm đơn vị tự động sau mỗi lần cam kết trên các đại lý của TeamCity sử dụng số mvn clean install
  3. Chúng tôi chạy thử nghiệm tích hợp tự động trên đại lý TeamCity sau khi hoàn thành xây dựng "chính".

Cách chúng ta kích hoạt thử nghiệm hội nhập thực hiện là bằng cách cấu hình nhiệm vụ integration.tests TeamCity để được phụ thuộc vào "chính" nhiệm vụ continous.build, xem tại đây để biết chi tiết: http://confluence.jetbrains.net/display/TCD4/Dependencies+Triggers

Chúng tôi chỉ chạy thử nghiệm hội nhập (trừ kiểm tra đơn vị) bằng cách:

  • sử dụng thư mục riêng biệt có tên "src/it/java" để giữ cho hội nhập kiểm tra,
  • trừ theo mặc định nguồn này folde r từ maven-surefire-plugin cấu hình (cấu hình/không bao gồm phần tử),
  • sử dụng hồ sơ Maven gọi là "hội nhập" để loại trừ kiểm tra đơn vị thường xuyên và bao gồm các bài kiểm tra từ "src/it/java" (hồ sơ này được cấu hình bằng cách thông qua -Pintegration trong nhiệm vụ integration.tests).
+0

Đây là lựa chọn gần gũi nhất đối với tôi, ngoại trừ việc chúng tôi sẽ thay thế một số thử nghiệm tích hợp để kiểm tra đơn vị với mockups. – Vladimir

1

Chúng tôi chạy tất cả các thử nghiệm trong một bộ rất lớn. Phải mất 7 phút để chạy.

Thử nghiệm tích hợp của chúng tôi tạo ra các máy chủ giả. Họ không bao giờ hết thời gian - trừ khi kiểm tra yêu cầu máy chủ hết thời gian chờ.

Vì vậy, chúng tôi có các loại điều sau đây. (Mẫu mã là Python)

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     testclient.StartVendorMockServer(18000) # port number 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 
    def tearDown(self): 
     testClient.KillVendorMockServer(18000) 

Điều này có một số hạn chế - nó luôn luôn gây khó khăn cho máy chủ giả của khách hàng cho mỗi thử nghiệm. Đôi khi điều đó ổn, và đôi khi quá nhiều thứ bắt đầu và dừng lại.

Chúng tôi cũng có các loại sau đây của điều

class SomeIntegrationTest(unittest.TestCase): 
    def setUp(self): 
     self.connection = applicationLibrary.connect('localhost', 18000) 
    def test_should_do_this(self): 
     self.connection.this() 
     self.assert... 

if __name__ == "__main__": 
    testclient.StartVendorMockServer(18000) # port number 
    result= unittest.TextTestRunner().run() 
    testclient.KillVendorMockServer(18000) 
    system.exit(result.failures + result.errors) 

Để hỗ trợ thử nghiệm này, chúng tôi có một số máy chủ chế giễu-up cho các loại xét nghiệm hội nhập.

+0

Bạn có yêu cầu nhà phát triển chạy thử nghiệm trước khi đăng ký không? –

+0

Đó là cách tiếp cận tốt để tạo các dịch vụ từ xa. Tôi nghĩ chúng ta không làm điều đó bởi vì đôi khi thật khó để làm bản mock-up - hoặc nó có thể mất một thời gian. Cũng đôi khi tôi thậm chí không biết làm thế nào xa ws hoạt động. Điều thứ ba là đôi khi nó rất hữu ích để kiểm tra rằng dịch vụ từ xa hoạt động tốt như mong đợi. Chúng tôi đã có một trường hợp khi nhà cung cấp dịch vụ chính gặp phải các vấn đề có thể được tìm thấy bởi một số thử nghiệm bên ngoài. – Vladimir

+0

@Vladimir: "đôi khi tôi thậm chí không biết ws hoạt động từ xa như thế nào". Sai. Bạn biết những gì ứng dụng của bạn gửi và nhận. Đó là tất cả những gì bạn phải xử lý trong Mockup. Không còn gì nữa, chỉ đủ để vượt qua bài kiểm tra. –

3

Chúng tôi đang sử dụng Maven2: maven-surefire-plugin để chạy thử nghiệm đơn vị (trong giai đoạn thử nghiệm) và maven-failsafe-plugin cho thử nghiệm tích hợp (giai đoạn thử nghiệm tích hợp).

Theo mặc định, tất cả các kiểm tra sẽ chạy khi dự án được xây dựng, tuy nhiên các thử nghiệm tích hợp có thể được tắt bằng cách sử dụng cấu hình.

Trong nhiều trường hợp kiểm tra tích hợp là một phần của mô-đun, một số trường hợp cũng có các mô-đun chuyên dụng chỉ thực hiện các phép thử tích hợp.

Một trong các nhóm cũng sử dụng Fitnesse để kiểm tra nghiệm thu. Các xét nghiệm này cũng có trong các mô-đun chuyên dụng.

Chúng tôi đang sử dụng Hudson cho CI.

+0

Cảm ơn bạn đã đề cập đến Fitnesse - Tôi đã từng nghe về nó trước đây. Và bây giờ chỉ xem bản trình bày - đó là từ Robert Martin. Có vẻ tốt. Tôi sẽ cố gắng nghĩ cách chúng ta có thể tích hợp nó cho mục đích của chúng ta! Bạn có rất nhiều bài kiểm tra chấp nhận ở Fitnesse không? – Vladimir

+0

Đội của tôi - không phải, đội còn lại thực sự có nhiều thứ được thực hiện như là các bài kiểm tra chấp nhận. – lexicore

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