Dưới đây là cách kiểm tra API bên ngoài trong Elixir với Bypass

$config[ads_kvadrat] not found

Vietsub Pinyin Đừng Yêu Anh DÆ°Æ¡ng Dáºt Thần & Hạ Uyển An1

Vietsub Pinyin Đừng Yêu Anh DÆ°Æ¡ng Dáºt Thần & Hạ Uyển An1

Mục lục:

Anonim

Chúng tôi ưu tiên các nguyên tắc Kiến trúc hướng dịch vụ tại Nghịch đảo. Điều đó có nghĩa là chúng tôi có các thành phần nhỏ, có thể bảo trì với trách nhiệm được xác định rõ ràng. Họ liên lạc với nhau (hầu hết), thông qua API chuyển trạng thái đại diện hoặc API, API.

Điều này cung cấp sự linh hoạt và đã phục vụ chúng tôi tốt ngoại trừ một khía cạnh quan trọng: Kiểm tra. Khi kiểm tra, người ta nên tránh:

  • Sự phụ thuộc vào các dịch vụ bên ngoài chạy trên cùng một máy.
  • Xét nghiệm chậm.

Bởi vì các ứng dụng vốn đã dựa vào các dịch vụ bên ngoài, điều quan trọng là phải có chiến lược thử nghiệm phù hợp với những phụ thuộc đó.

Gần đây chúng tôi đã bắt đầu sử dụng Bypass và tôi sẽ giải thích cách chúng tôi đến đó và cụ thể là chúng tôi đang sử dụng nó như thế nào.

Quá khứ

Các phương thức giả và trả về một số dữ liệu mẫu như thế này:

Đó là (và tôi tin rằng vẫn là) cách thức đi vào thế giới của Ruby / Rails. Thật không may, điều này thúc đẩy hành vi xấu như được giải thích tốt nhất ở đây bởi Jose Valim.

Sau đó, chúng tôi bắt đầu sử dụng ExVCR, một thư viện tuyệt vời, nhưng cũng có nhược điểm tương tự như giả / cuống: Nó khuyến khích sự lười biếng và không thúc đẩy sự phân tách các mối quan tâm quan trọng đối với các API được xác định rõ. ExVCR cho phép ghi lại một đến các bản ghi dữ liệu và ghi lại dữ liệu thực tế. Nó rất dễ tích hợp (bao gồm một vài dòng trong bài kiểm tra của bạn và mọi thứ khác đều được chăm sóc). Nhưng lý tưởng nhất là bạn phải suy nghĩ về sự phụ thuộc bên ngoài trong các bài kiểm tra, không trừu tượng hóa chúng ra. Nó vẫn có thể là một lựa chọn khả thi cho các tình huống khi hành vi điểm cuối phải được kiểm tra với chi phí tối thiểu (chúng tôi sử dụng nó để kiểm tra các cuộc gọi đến Dịch vụ AWS của Amazon như S3).

Nhập bộ điều hợp

Bộ điều hợp hoạt động tuyệt vời và thúc đẩy sự cân nhắc xung quanh các hợp đồng API và ranh giới truyền thông được xác định rõ ràng. Chúng tôi vẫn sử dụng phương pháp này, đặc biệt là khi Bộ điều hợp phức tạp hơn (như ổ cắm JSON-RPC).

Đây là giao diện của Adaptor:

Nhưng đối với các Điểm cuối HTTP đơn giản, Bộ điều hợp có vẻ như rất nhiều công việc và có một nhược điểm lớn: Họ rời khỏi các thư viện mà họ sử dụng ngoài phương trình thử nghiệm. Nếu bất cứ điều gì trong các thư viện HTTP hoặc JSON thay đổi, các bài kiểm tra sẽ giành được nó. Số lượng mã quan trọng trong sản xuất chưa được kiểm chứng bằng phương pháp này là không thể chấp nhận được.

Hiện tại và tương lai

Bypass cho phép chúng tôi bắt đầu một máy chủ web rất đơn giản trong các thử nghiệm mô phỏng các dịch vụ bên ngoài mà chúng tôi sử dụng.

Bây giờ, chúng ta có thể kiểm tra toàn bộ ngăn xếp, bao gồm thư viện HTTP, thư viện mã hóa / giải mã JSON và các cơ chế xác thực. Bypass README được viết tốt, vì vậy tôi sẽ tiết kiệm chi tiết triển khai. Tuy nhiên, chúng tôi thay đổi một chút cách chúng tôi sử dụng nó để giữ cho các bài kiểm tra ngắn gọn và dễ đọc:

Trước hết, đôi khi chúng tôi muốn gọi ra Facebook khi các bài kiểm tra được chạy dưới dạng một bộ tích hợp đầy đủ. Chúng tôi làm điều này bất thường để đảm bảo API Facebook vẫn hoạt động theo mong đợi của chúng tôi. Thêm - bao gồm tích hợp đến kiểm tra hỗn hợp không mô phỏng API mà thay vào đó, gọi ra dịch vụ bên ngoài (dòng 5, 7).

Chúng tôi rõ ràng khi chúng tôi mô phỏng các yêu cầu với các dịch vụ bên ngoài để mỗi thử nghiệm sử dụng Bypass phải có @tag facebook_bypass (dòng 7).

cuối cùng xử lý_fb hàm (dòng 30 cạn39) đang được gọi (cho rằng request_path kết quả phù hợp). Tôi thích kết hợp trong đầu chức năng vì nó làm rõ đường dẫn nào chúng ta đang phản ứng và cho phép chúng ta xác định các chức năng khác nhau cho các đường dẫn khác nhau.

Vì vậy, Bypass chỉ chạy trên các bài kiểm tra được gắn thẻ @tag: bỏ qua và khi chúng tôi không chạy bộ tích hợp của chúng tôi. Một điều nữa chúng tôi làm trong khi thiết lập Bypass là cho phép thẻ vượt qua id trang (dòng 8, 20). Vì vậy, đây là cách một bài kiểm tra sử dụng Bypass trông trong tất cả vinh quang của nó:

Như bạn thấy, facebook_bypass thẻ làm rõ rằng chúng tôi đang mô phỏng API (trừ khi chúng tôi ở chế độ tích hợp). Nó cho phép chúng tôi chuyển thông tin đến API mô phỏng và rất dễ sử dụng lại cấu hình Bypass cho các thử nghiệm khác nhau.

Tôi hy vọng điều này sẽ giúp bạn kiểm tra các API bên ngoài. Bạn có thể tìm thấy tôi trên Twitter (xem bên dưới) nếu bạn có thêm bất kỳ câu hỏi nào.

$config[ads_kvadrat] not found