Làm thế nào bạn có thể viết bài kiểm tra cho Selenium (hoặc tương tự) mà không thất bại vì những thay đổi nhỏ hoặc mỹ phẩm?


9

Tuần trước tôi đã dành thời gian để học selen và xây dựng một loạt các bài kiểm tra web cho một trang web mà chúng tôi sắp ra mắt. thật tuyệt khi học và tôi đã chọn một số kỹ thuật định vị xpath và css.

Tuy nhiên, vấn đề đối với tôi là việc nhìn thấy những thay đổi nhỏ phá vỡ các bài kiểm tra - bất kỳ thay đổi nào đối với div, id hoặc một số số tự động giúp xác định các vật dụng phá vỡ bất kỳ số lượng thử nghiệm nào - có vẻ như nó rất dễ vỡ.

bạn đã viết các bài kiểm tra selen (hoặc các bài kiểm tra tương tự khác) chưa, và làm thế nào để bạn đối phó với tính chất dễ vỡ của các bài kiểm tra (hoặc làm thế nào để bạn ngăn chặn chúng dễ vỡ), và bạn sử dụng selen để làm bài kiểm tra nào?


Nếu các thay đổi nhỏ phá vỡ các bài kiểm tra, thì các bài kiểm tra sẽ không được chạy sau khi các thay đổi được thực hiện - đó là toàn bộ điểm của các bài kiểm tra. Ngoài ra, nhận thức của nhà phát triển về các thử nghiệm (sự tồn tại của) dường như còn thiếu.
Talonx

1
@talonx - Chỉ chạy thử nghiệm loại này là không đủ, nếu một thay đổi nhỏ dẫn đến thay đổi lớn đối với bộ phần mềm thì sẽ không có vấn đề gì cho dù họ đang chạy bởi nhà phát triển, hộp ci hay người kiểm tra
FinnNk

@FinnNK: Đồng ý - những thay đổi nhỏ không nên dẫn đến những thay đổi lớn. Điều đó có nghĩa là các trường hợp thử nghiệm được viết bởi một người không liên lạc với các nhà phát triển thực hiện các thay đổi - có mùi như một khoảng cách giao tiếp.
Talonx

@talonx: Các bài kiểm tra UI vốn đã dễ vỡ và mất nhiều thời gian hơn so với các bài kiểm tra đơn vị. Chúng là một thách thức đặc biệt, vì vậy tôi sẽ không đưa ra kết luận về các nhà phát triển trong tổ chức của @ Sam.
azheglov

2
Tôi đã thay đổi tiêu đề - hy vọng một chút đại diện cho câu hỏi và ít tiêu cực hơn một chút.
Jon Hopkins

Câu trả lời:


7

Mục đích của Selenium là tạo ra các thử nghiệm tích hợp dựa trên giao diện người dùng .

Kiểm tra tích hợp xác minh rằng tất cả các thành phần trong hệ thống của bạn hoạt động chính xác khi được triển khai cùng nhau. Thử nghiệm hội nhập không phải là một chiến lược kiểm tra đầy đủ và bổ sung cho chiến lược thử nghiệm khác có một trọng tâm khác nhau, ví dụ như đơn vị thử nghiệmkiểm tra chấp nhận .

Các thử nghiệm dựa trên giao diện người dùng vốn đã dễ vỡ, mặc dù Selenium và Watir là một bước tiến so với những ngày đầu của các công cụ ghi và phát lại . Có một số cách để giải quyết vấn đề này - đây là tổng hợp lời khuyên từ một số chuyên gia đẳng cấp thế giới:

Đừng cố gắng để có được tất cả phạm vi kiểm tra của bạn từ loại thử nghiệm này . Robert C. Martin lập luận rằng phạm vi bảo hiểm mã của bạn bằng các thử nghiệm tích hợp sẽ vào khoảng 20% . Nó chỉ đơn giản là không thực tế để kiểm tra tất cả các đường dẫn thực hiện khi đầu vào cách một vài lớp ứng dụng.

Nhận hầu hết các phạm vi kiểm tra từ các bài kiểm tra đơn vị và chấp nhận . Tìm liên kết đến các bài viết của Gojko Adzic trong câu trả lời của FinnNk . Adzic đã tranh luận nhiều lần về việc kiểm tra logic kinh doanh thông qua các bài kiểm tra chấp nhận và bỏ qua UI.

Nhưng một số lượng thử nghiệm dựa trên giao diện người dùng vẫn cần phải được viết . Đây là nơi bạn cần một số lời khuyên thiết thực ngoài việc "không kiểm tra logic kinh doanh của bạn thông qua giao diện người dùng". Tôi muốn giới thiệu blog của Patrick Wilson-Welsh là điểm khởi đầu.


Liên kết cho patrickwilsonwelsh.com không hoạt động nhiều hơn và các tài nguyên khác cho điều đó .. !!
MarmiK

4

Điều quan trọng nhất khi tạo các thử nghiệm như thế này một khi bạn vượt qua một con số tầm thường là ý tưởng về sự thay đổi đối xứng - một thay đổi nhỏ trong mã sẽ dẫn đến một thay đổi nhỏ trong bộ thử nghiệm.

Ví dụ: giả sử bạn thu thập tên của ai đó bằng hai hộp văn bản trong 100 bài kiểm tra. Nếu bạn viết các bài kiểm tra đó một cách nhanh chóng (hoặc có thể đang sử dụng phát lại bản ghi) thì bạn sẽ có 100 bài kiểm tra để thay đổi. Thay vào đó, nếu bạn trừu tượng hóa bước 'nhập tên' và sử dụng bước đó trong các thử nghiệm thay vì sử dụng trực tiếp selen thì bạn chỉ có 1 nơi để thực hiện thay đổi. Nó sẽ phụ thuộc vào ngữ cảnh của bạn có bao nhiêu lớp trừu tượng bạn sử dụng - nhưng sử dụng trừu tượng sẽ đi một chặng đường dài để làm cho các bài kiểm tra của bạn có thể duy trì được.

Điều quan trọng thứ hai là đảm bảo các bộ chọn của bạn dựa trên thứ quan trọng nhất và ít có khả năng thay đổi nhất. Đôi khi đây sẽ là một id hoặc một lớp hoặc nó có thể là văn bản trong hoặc xung quanh một phần tử. Luôn thích bộ chọn đơn giản nhất (ví dụ: id) nhưng đôi khi để đạt được điều này, bạn sẽ phải sử dụng một cái gì đó như xpath.

Gojko Adzic có rất nhiều lời khuyên tuyệt vời trên blog của mình khi nói đến loại thử nghiệm này - hãy xem Sine of Death của anh ấy và cách đặc biệt để tránh nó .


mẹo hay FinnNk - Tôi đã trừu tượng hóa các phương thức phổ biến (đăng nhập, tìm kiếm các tiện ích thanh bên, v.v.) - vì vậy thiệt hại sẽ giảm khi các thử nghiệm thay đổi. Thật không may, chúng tôi đang sử dụng một hệ thống sở hữu tạo ra một số vật dụng và tạo id cho các vật dụng dựa trên vị trí của chúng trong vòm, vì vậy bất cứ khi nào có thứ gì đó được di chuyển, các bài kiểm tra đều bị hỏng.
Sam J

1
Thông thường bạn có thể tìm thấy một số cách xác định một yếu tố - có lẽ một số văn bản mà thành phần đó chứa hoặc có thể nó luôn có cùng vị trí tương đối với một yếu tố khác. Cuối cùng, như là phương sách cuối cùng, bạn cũng có thể xác định chiến lược định vị tùy chỉnh để định vị các phần tử bằng selenium, cho phép bạn kiểm soát hoàn toàn (ví dụ: nếu bạn đang tìm kiếm các phần tử có tên cơ sở tên và một số nội dung tùy chỉnh được thêm vào cuối, như trong trường hợp hoặc trong các biểu mẫu web asp.net).
FinnNk

1

Kiểm tra đảm bảo rằng mã hoạt động như mong đợi. Nếu các bài kiểm tra của bạn bị hỏng một cách thường xuyên, thì các bài kiểm tra sẽ không kiểm tra đúng hoặc các nhà phát triển không quan tâm đến các bài kiểm tra.

Cá nhân tôi nghĩ rằng nếu sự hiện diện của <div>thẻ phá vỡ một bài kiểm tra thì bài kiểm tra đó hoàn toàn phụ thuộc vào các thẻ xung quanh, và nên thực hiện một cách tiếp cận nhẹ nhàng hơn.

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.