2016-01-15 12 views
14

tôi muốn thiết lập một nền tảng thử nghiệm E2E rắn về dự án của nhóm chúng tôi nhưng tôi không thể tìm thấy một giải pháp đơn giản cho câu hỏi đó:Cách phát hiện sửa đổi API khi thử nghiệm e2e mocking?

Khi bạn đang chế giễu tất cả các cuộc gọi của bạn, cách tốt nhất để là gì phát hiện nếu mô hình thực tế của các đối tượng được máy chủ của bạn trả về đã được sửa đổi chưa?

Bài kiểm tra của bạn sẽ vẫn trôi qua vì họ đang thử nghiệm phiên bản lỗi thời của mô hình nhưng ứng dụng có khả năng bị hỏng. Ví dụ, nếu giả định rằng /api/users/1 trả về null nếu người dùng không tồn tại, khi nó thực sự trả về một đối tượng trống, thì mặc dù các thử nghiệm có thể vượt qua, hành vi được kiểm tra dựa trên các giả định không chính xác và do đó có thể thất bại theo cách bất ngờ.

Hoặc có thể chương trình phụ trợ bằng cách nào đó cung cấp tệp json tĩnh với mô hình cập nhật mới nhất và giao diện người dùng dựa vào điều này?

Điều này tất nhiên giả định rằng những người làm việc trên chương trình phụ trợ và những người làm việc trên giao diện người dùng là các nhóm riêng biệt.

Tôi đang sử dụng Angular 1.x và Protractor ở đây nhưng điều này không thực sự phụ thuộc vào công nghệ.

Trả lời

6

Tôi nghĩ bạn đang làm gì (cô lập lối vào trong khi kiểm tra) là đúng, giữ nó theo cách này.

Những gì bạn có thể làm để xác minh mocks của bạn là một trong những:

1) Nếu frontend và backend được kết hợp và phát triển cùng chặt chẽ - thêm một bộ kiểm tra đơn vị cho backend để xác minh phản ứng API. Bằng cách này nếu có gì đó thay đổi trong API, các bài kiểm tra phụ trợ sẽ thất bại và bạn sẽ biết rằng các giao diện người dùng sẽ được cập nhật.

Trong quá trình phát triển, bạn có thể chạy cả hai bộ kiểm tra (e2e và kiểm tra đơn vị phụ trợ) định kỳ hoặc thậm chí trên mỗi thay đổi mã.

2) Nếu lối vào ít nhiều độc lập với chương trình phụ trợ, thì bạn cần có một số bài kiểm tra tích hợp, mà bạn sẽ chạy bên cạnh các bài kiểm tra e2e. Những điều này sẽ thực hiện các yêu cầu HTTP thực tế cho chương trình phụ trợ và so sánh cấu trúc dữ liệu được trả lại với các mocks của bạn. Bằng cách này bạn có thể phát hiện tình huống khi mocks trở nên lỗi thời.

Cách tiếp cận thứ hai đáng tin cậy hơn, nhưng thử nghiệm tích hợp có thể chậm hơn kiểm tra đơn vị phụ trợ, vì vậy bạn có thể chạy chúng tự động chỉ trên máy chủ CI chứ không phải trong quá trình phát triển cục bộ.

+0

Giải pháp 2 có vẻ thú vị. Tôi chắc chắn đang tìm kiếm một giải pháp liên quan đến phần phụ trợ càng ít càng tốt. – deonclem

2

Bạn cần phải đăng ký một http interceptor lưu trữ dữ liệu trên yêu cầu: window.e2eHttp[request.url] = null;, phản ứng + responseError: window.e2eHttp[request.url] = result;

Bạn có thể sử dụng hệ thống mô-đun góc thước đo để tiêm hoặc sử dụng một lá cờ trong giải pháp của bạn, e2eService.isEnabled(), để chuyển đổi và tắt máy đánh chặn.

Sau đó, trong thử nghiệm e2e, bạn cần triển khai browser.wait + browser.executeScript cho đến khi window.e2eHttp[request.url] có dữ liệu. Nó sẽ luôn có đối tượng phản hồi http góc cạnh (tiêu đề trạng thái http, dữ liệu, ect)

3

Một giải pháp tương tự cho @Lablanc Meneses sẽ tiết kiệm được phản hồi của mọi cuộc gọi trong tệp JSON.Lưu câu trả lời của bạn bên trong intercepter cho các bài kiểm tra e2e của bạn và sau đó sử dụng tệp JSON đã lưu cho các bài kiểm tra e2e. Các lệnh gọi JSON này sẽ tự động được cập nhật bất cứ khi nào chạy dịch vụ api của bạn. điều này sẽ yêu cầu chạy tất cả các dịch vụ của bạn một lần để lưu trữ mô hình lần đầu tiên và sau đó sử dụng nó cho các thử nghiệm e2e của bạn. Mô hình sẽ được cập nhật ngay sau khi bạn chạy api đã cập nhật của mình. bạn có thể tạo nút chuyển để ngừng lưu phản hồi cho bản dựng sản xuất của mình.

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