Kiểm tra khách hàng REST bằng Công cụ Restito

Mục lục:

Anonim

REST là gì?

REST là viết tắt của "REpresentational State Transfer", là một phương thức giao tiếp mới giữa hai hệ thống bất kỳ tại một thời điểm nhất định. Một trong các hệ thống được gọi là 'REST Client' và hệ thống còn lại được gọi là 'REST Server'.

Trong hướng dẫn REST này, bạn sẽ học:

  • REST là gì?
  • REST Client là gì?
  • REST Server là gì?
  • Restito là gì?
  • Làm thế nào để kiểm tra ứng dụng khách REST bằng Restito?
  • Ưu điểm của việc sử dụng Restito Framework để kiểm tra máy khách REST
  • Nhược điểm của việc sử dụng Restito Framework để kiểm tra máy khách REST

Trước khi tìm hiểu về Restito Framework để kiểm tra máy khách REST, trước tiên chúng ta hãy tìm hiểu một vài điều cơ bản.

REST Client là gì?

REST Client là một phương pháp hoặc một công cụ để gọi một API dịch vụ REST được sử dụng để giao tiếp bởi bất kỳ hệ thống hoặc nhà cung cấp dịch vụ nào. Ví dụ: nếu một API được hiển thị để lấy thông tin giao thông thời gian thực về một tuyến đường từ Google, thì phần mềm / công cụ gọi ra API lưu lượng của Google được gọi là ứng dụng khách REST.

REST Server là gì?

Nó là một phương thức hoặc một API được bất kỳ hệ thống hoặc nhà cung cấp dịch vụ nào tiếp xúc với giao tiếp. Ví dụ: Google tiết lộ một API để lấy thông tin giao thông thời gian thực trên một tuyến đường nhất định.

Tại đây, máy chủ của Google cần được thiết lập và chạy để lắng nghe bất kỳ yêu cầu nào đối với API được tiếp xúc từ các ứng dụng khách khác nhau.

Thí dụ:

Đã đến lúc thiết lập một kịch bản End-to-End hoàn chỉnh từ các định nghĩa trên.

Chúng ta hãy coi một ứng dụng đặt xe taxi như Uber như một công ty cần thông tin thời gian thực về tình hình giao thông xung quanh các tuyến đường mà một phương tiện nhất định đang ở.

Khách hàng còn lại:

Ở đây khách hàng là một ứng dụng di động Uber mà tài xế đã đăng nhập. Ứng dụng này gửi một yêu cầu đến API REST được Google maps hiển thị để lấy dữ liệu thời gian thực. Ví dụ, một yêu cầu HTTP GET.

Máy chủ còn lại:

Trong ví dụ này, Google là nhà cung cấp Dịch vụ và API của Google maps phản hồi các chi tiết cần thiết cho yêu cầu của ứng dụng Uber.

Cả máy khách và máy chủ đều quan trọng như nhau trong giao tiếp REST.

Ở đây, chúng tôi đã triển khai các ví dụ để kiểm tra tự động hóa chỉ REST Client. Để kiểm tra máy chủ REST, hãy tham khảo https://www.guru99.com/top-6-api-testing-tool.html.

Restito là gì?

Restito là một khung được phát triển bởi Mkotsur. Đây là một ứng dụng nhẹ để giúp bạn thực thi bất kỳ loại Yêu cầu HTTP nào. Bạn có thể sử dụng Restito để kiểm tra các API REST của mình và để tìm kiếm các vấn đề trong ứng dụng hoặc mạng của bạn.

Làm thế nào để kiểm tra ứng dụng khách REST bằng Restito?

Chúng ta hãy chia bài tập thành 4 bước sau:

  1. Tạo một ứng dụng khách HTTP và phương thức để gửi một yêu cầu HTTP GET tới bất kỳ điểm cuối nào của máy chủ. Hiện tại, hãy coi điểm cuối là http: // localhost: 9092 / getevents.
  1. Khởi động máy chủ Restito để lắng nghe và nắm bắt các yêu cầu được gửi đến điểm cuối 'getevents' trong localhost http: // localhost: 9092 / getevents.
  1. Tạo một lớp thử nghiệm để kiểm tra ứng dụng khách trên. Gọi phương thức 'sendGETRequest' của ứng dụng khách HTTP để bắt đầu một yêu cầu GET tới API 'getevents'.
  1. Xác thực lệnh gọi HTTP GET bằng cách sử dụng khuôn khổ Restito.

Chúng ta hãy đi sâu vào từng bước trên.

Bước 1) Tạo một ứng dụng khách HTTP và phương thức để gửi yêu cầu HTTP GET đến bất kỳ điểm cuối nào của máy chủ.

========== JAVA CODE Bắt đầu ===========

gói com.chamlabs.restfulservices.client;nhập java.util.HashMap;nhập java.util.Map;nhập org.apache.http.client.HttpClient;nhập org.apache.http.client.methods.HttpGet;nhập org.apache.http.client.methods.HttpPost;nhập org.apache.http.entity.StringEntity;nhập org.apache.http.impl.client.HttpClientBuilder;nhập org.json.JSONObject;/ *** Lớp này tạo một HTTP Client và có một phương thức để gửi yêu cầu HTTP GET:* sendGETRequest (…)* /lớp công khai RestClient {/ *** Hàm tạo cho lớp RestClient* /public RestClient () {System.out.println ("Tạo phương thức khởi tạo RestClient");}/ *** Phương pháp gửi yêu cầu GET tới http: // localhost: <
> / getevents* Cổng @param* @return true nếu yêu cầu GET được gửi thành công. Sai, ngược lại.* /public static boolean sendGETRequest (int port) {thử {HttpClient client = HttpClientBuilder.create (). Build ();HttpGet getRequest = new HttpGet ("http: // localhost: + port + "/ getevents");// HttpResponse response = client.execute (request);client.execute (getRequest);System.out.println ("Yêu cầu HTTP được gửi thành công."+ "Trả về True");trả về true;}bắt (Ngoại lệ e) {e.printStackTrace ();}System.out.println ("Một số ngoại lệ đã xảy ra trong quá trình tạo HTTP Client."+ "Trả về sai");trả về sai;}}

========== JAVA CODE kết thúc ===========

Bước 2) Khởi động máy chủ Restito để lắng nghe và nắm bắt các yêu cầu được gửi đến điểm cuối 'getevents' trong localhost http: // localhost: 9092 / getevents.

========== JAVA CODE Bắt đầu ===========

gói com.chamlabs.restfultesting.util;nhập tĩnh com.xeosystemabs.restito.builder.stub.StubHttp.whenHttp;nhập tĩnh com.xebicabs.restito.semantics.Action.status;nhập tĩnh com.xe chàyabs.restito.semantics.Condition.get;nhập tĩnh com.xebicabs.restito.semantics.Condition.post;nhập java.util.List;nhập org.glassfish.grizzly.http.util.HttpStatus;nhập com.xeectsabs.restito.semantics.Call;nhập com.xeosystemabs.restito.server.StubServer;/ *** Lớp tiện ích này chứa một số phương thức tiện ích như:* restartRestitoServerForGETRequests (…)* restartRestitoServerForPOSTRequests (…)* waitAndGetCallList (…)** @author cham6* @email: [email protected]* @fork: https://github.com/cham6/restfultesting.git** /lớp công khai TestUtil {/ *** Phương thức tiện ích để khởi động máy chủ sơ khai restito để chấp nhận các yêu cầu GET* Máy chủ @param* Cổng @param* Trạng thái @param* /public static void restartRestitoServerForGETRequests (máy chủ StubServer, cổng int, trạng thái HttpStatus){// Hủy máy chủ restitoif (server! = null) {server.stop ();}// Khởi tạo và cấu hình một phiên bản mới hơn của máy chủ sơ khaiserver = new StubServer (cổng) .run ();whenHttp (server) .match (get ("/ getevents")). then (status (trạng thái));}/ *** Phương thức tiện ích để khởi động máy chủ sơ khai restito để chấp nhận các yêu cầu POST* Máy chủ @param* Cổng @param* Trạng thái @param* /public static void restartRestitoServerForPOSTRequests (máy chủ StubServer, cổng int, trạng thái HttpStatus){// Hủy máy chủ restitoif (server! = null) {server.stop ();}// Khởi tạo và cấu hình một phiên bản mới hơn của máy chủ sơ khaiserver = new StubServer (cổng) .run ();whenHttp (máy chủ) .match (post ("/ postevents")). then (status (trạng thái));}/ *** Đối với một máy chủ sơ khai restito nhất định, lặp lại số giây nhất định và* ngắt và trả lại danh sách cuộc gọi từ máy chủ.** Máy chủ @param* @param waitTimeInSeconds* @trở về* @throws InterruptException* /public static List  waitAndGetCallList (máy chủ StubServer, int waitTimeInSeconds)ném bị gián đoạn{int timeoutCount = 0;Danh sách  callList = server.getCalls ();while (callList.isEmpty ()) {Thread.sleep (1000);timeoutCount ++;if (timeoutCount> = waitTimeInSeconds) {phá vỡ;}callList = server.getCalls ();}// Chờ 2 giây để đưa tất cả các lệnh gọi vào callList để loại bỏ bất kỳ lỗi nào.Thread.sleep (2000);trả về server.getCalls ();}}

========== JAVA CODE kết thúc ===========

Bước 3) Tạo một lớp thử nghiệm để kiểm tra ứng dụng khách trên. Gọi phương thức sendGETRequest của ứng dụng khách HTTP để bắt đầu một yêu cầu GET tới API 'getevents'.

========== JAVA CODE Bắt đầu ===========

nhập junit.framework.TestCase;nhập com.chamlabs.restfulservices.client.RestClient;nhập com.chamlabs.restfultesting.util.TestUtil;nhập com.xeectsabs.restito.semantics.Call;nhập com.xeosystemabs.restito.server.StubServer;nhập static org.glassfish.grizzly.http.util.HttpStatus.ACCEPTED_202;nhập org.json.JSONObject;nhập java.util.List;nhập java.util.Map;/ *** Lớp này chứa một số bài kiểm tra junit để xác thực các hoạt động của RestClient như:* gửi yêu cầu(… )* sendRequestWithCustomHeaders (…)* sendPOSTRequestWithJSONBody (…)** /public class RestClientTester mở rộng TestCase {private static final Integer PORT = 9098;private static final Integer PORT2 = 9099;private static final Integer PORT3 = 9097;public RestClientTester () {System.out.println ("Khởi động thử nghiệm RestClientTester");}/ *** Kiểm tra Junit để xác thực yêu cầu GET từ RestClient* Các bước:* 1) Tạo một máy chủ sơ khai bằng khuôn khổ Restito và định cấu hình nó để lắng nghe trên một cổng nhất định* 2) Gọi phương thức sendGETRequest (…) của RestClient* 3) Restito nắm bắt các yêu cầu GET phù hợp được gửi, nếu có.* 4) Xác thực nếu Restito đã nắm bắt bất kỳ yêu cầu GET nào trên điểm cuối nhất định* Hành vi mong đợi:*> Restito lẽ ra phải nắm bắt được yêu cầu GET và nó chỉ nên ghi lại một yêu cầu GET.* Cuối cùng:*> Dừng máy chủ sơ khai đã bắt đầu sử dụng restito.* /public void testGETRequestFromClient () {Máy chủ StubServer = null;thử {// Thao tác này sẽ khởi động máy chủ sơ khai trên 'PORT' và phản hồi bằng HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (máy chủ, PORT, ACCEPTED_202);RestClient.sendGETRequest (PORT);Danh sách  callList = TestUtil.waitAndGetCallList (máy chủ, 30);khẳng địnhTrue ("Yêu cầu GET không được nhận từ RestClient. Kiểm tra không thành công.",(callList! = null) && (callList.size () == 1));}bắt (Ngoại lệ e) {e.printStackTrace ();fail ("Kiểm tra Không thành công do ngoại lệ: + e);}cuối cùng {if (server! = null) {server.stop ();}}}

========== JAVA CODE kết thúc ===========

Bước 4) Cách xác thực yêu cầu GET với Tiêu đề và yêu cầu ĐĂNG với phần thân bằng khung Restito.

========== JAVA CODE Bắt đầu ===========

/ *** Kiểm tra Junit để xác thực yêu cầu GET với các tiêu đề từ RestClient* Các bước:* 1) Tạo một máy chủ sơ khai bằng khuôn khổ Restito và định cấu hình nó để lắng nghe trên một cổng nhất định* 2) Gọi phương thức sendGETRequestWithCustomHeaders (…) của RestClient* 3) Restito nắm bắt các yêu cầu GET phù hợp được gửi, nếu có.* 4) Xác thực nếu Restito đã nắm bắt bất kỳ yêu cầu GET nào trên một điểm cuối nhất định* Hành vi mong đợi:*> Restito lẽ ra phải nắm bắt được yêu cầu GET, và nó chỉ nên ghi lại một yêu cầu GET.*> Nhận tiêu đề của yêu cầu GET đã thu thập* và đảm bảo rằng các tiêu đề khớp với những tiêu đề được định cấu hình.* Cuối cùng:*> Dừng máy chủ sơ khai đã bắt đầu sử dụng restito.* /public void testGETRequestWithHeadersFromClient () {Máy chủ StubServer = null;thử {// Thao tác này sẽ khởi động máy chủ sơ khai trên 'PORT' và phản hồi bằng HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForGETRequests (máy chủ, PORT2, ACCEPTED_202);RestClient.sendGETRequestWithCustomHeaders (PORT2);Danh sách  callList = TestUtil.waitAndGetCallList (máy chủ, 30);khẳng địnhTrue ("Yêu cầu GET không được nhận từ RestClient. Kiểm tra không thành công.",(callList! = null) && (callList.size () == 1));// Xác thực các tiêu đề của yêu cầu GET từ REST ClientÁnh xạ > headersFromRequest = callList.get (0) .getHeaders ();khẳng địnhTrue ("Yêu cầu GET chứa tiêu đề Chấp nhận và giá trị của nó",headersFromRequest.get ("Chấp nhận"). chứa ("văn bản / html"));khẳng địnhTrue ("Yêu cầu GET chứa Ủy quyền tiêu đề và giá trị của nó",headersFromRequest.get ("Ủy quyền"). chứa ("Người mang 1234567890qwertyuiop"));khẳng địnhTrue ("Yêu cầu GET chứa tiêu đề Cache-Control và giá trị của nó",headersFromRequest.get ("Cache-Control"). chứa ("no-cache"));khẳng địnhTrue ("Yêu cầu GET chứa Kết nối tiêu đề và giá trị của nó",headersFromRequest.get ("Kết nối"). chứa ("lưu giữ"));khẳng địnhTrue ("Yêu cầu GET chứa tiêu đề Loại-Nội dung và giá trị của nó",headersFromRequest.get ("Content-Type"). chứa ("application / json"));}bắt (Ngoại lệ e) {e.printStackTrace ();fail ("Kiểm tra Không thành công do ngoại lệ: + e);}cuối cùng {if (server! = null) {server.stop ();}}}
/ *** Kiểm tra Junit để xác thực yêu cầu POST với nội dung và tiêu đề từ RestClient* Các bước:* 1) Tạo một máy chủ sơ khai bằng khuôn khổ Restito và định cấu hình nó để lắng nghe trên một cổng nhất định* 2) Gọi phương thức sendPOSTRequestWithJSONBody (…) của RestClient* 3) Restito nắm bắt các yêu cầu POST phù hợp đã được gửi, nếu có.* 4) Xác thực nếu Restito đã nắm bắt bất kỳ yêu cầu POST nào trên điểm cuối nhất định* Hành vi mong đợi:*> Restito đáng lẽ phải nắm bắt được yêu cầu POST và nó chỉ nên ghi lại một yêu cầu POST.*> Lấy nội dung của yêu cầu POST đã thu thập và xác thực các giá trị JSON* Cuối cùng:*> Dừng máy chủ sơ khai đã bắt đầu sử dụng restito.* /public void testPOSTRequestWithJSONBody () {Máy chủ StubServer = null;thử {// Thao tác này sẽ khởi động máy chủ sơ khai trên 'PORT' và phản hồi bằng HTTP 202 'ACCEPTED_202'TestUtil.restartRestitoServerForPOSTRequests (máy chủ, PORT3, ACCEPTED_202);RestClient.sendPOSTRequestWithJSONBody (PORT3);Danh sách  callList = TestUtil.waitAndGetCallList (máy chủ, 30);khẳng địnhTrue ("Yêu cầu POST không nhận được từ RestClient. Kiểm tra không thành công.",(callList! = null) && (callList.size () == 1));// Xác thực các tiêu đề của yêu cầu GET từ REST ClientChuỗi requestBody = callList.get (0) .getPostBody ();JSONObject postRequestJSON = new JSONObject (requestBody);khẳng địnhTrue ("Thời gian cập nhật trong json không chính xác",postRequestJSON.get ("timeUpdated"). toString (). equalsIgnoreCase ("1535703838478"));khẳng địnhTrue ("Access_token trong json không chính xác",postRequestJSON.get ("access_token"). toString ().equalsIgnoreCase ("abf8714d-73a3-42ab-9df8-d13fcb92a1d8"));khẳng địnhTrue ("refresh_token trong json không chính xác",postRequestJSON.get ("refresh_token"). toString ().equalsIgnoreCase ("d5a5ab08-c200-421d-ad46-2e89c2f566f5"));khẳng địnhTrue ("Loại mã thông báo trong json không chính xác",postRequestJSON.get ("token_type"). toString (). equalsIgnoreCase ("bearer"));khẳng địnhTrue ("expires_in trong json không chính xác",postRequestJSON.get ("expires_in"). toString (). equalsIgnoreCase ("1024"));khẳng địnhTrue ("Phạm vi trong json không chính xác",postRequestJSON.get ("phạm vi"). toString (). equalsIgnoreCase (""));}bắt (Ngoại lệ e) {e.printStackTrace ();fail ("Kiểm tra Không thành công do ngoại lệ: + e);}cuối cùng {if (server! = null) {server.stop ();}}}}

========== JAVA CODE kết thúc ===========

Ưu điểm của việc sử dụng Restito Framework để kiểm tra máy khách REST

Dưới đây là ưu / lợi ích của Restito Framework để kiểm tra ứng dụng khách ReST

  • Chúng tôi không cần máy chủ REST thực được phát triển để kiểm tra Máy khách REST.
  • Restito cung cấp các tiện ích và phương pháp đa dạng và mạnh mẽ để mô phỏng các hành vi khác nhau của Máy chủ. Ví dụ: Để kiểm tra cách khách hàng REST hoạt động khi Máy chủ phản hồi với lỗi HTTP 404 hoặc lỗi HTTP 503.
  • Máy chủ Restito có thể được thiết lập trong vài mili giây và có thể được kết thúc sau khi hoàn tất các bài kiểm tra.
  • Restito hỗ trợ tất cả các loại nội dung phương thức HTTP như nén, không nén, hợp nhất, ứng dụng / văn bản, ứng dụng / JSON, v.v.

Nhược điểm của việc sử dụng Restito Framework để kiểm tra máy khách REST

Đây là nhược điểm / nhược điểm của Restito Framework để kiểm tra máy khách ReST

  • Nguồn máy khách REST nên được tinh chỉnh để coi 'localhost' là máy chủ.
  • Việc mở máy chủ ở bất kỳ cổng nào cũng có thể xung đột nếu chúng tôi sử dụng một số cổng thường được sử dụng như '8080' hoặc '9443', v.v.
  • Bạn nên sử dụng các cổng như 9092 hoặc 9099, những cổng này không được các công cụ khác sử dụng phổ biến.

Tóm lược:

  • REST là viết tắt của "REpresentational State Transfer", là một cách giao tiếp tiêu chuẩn mới giữa hai hệ thống bất kỳ tại một thời điểm nhất định.
  • REST Client là một phương pháp hoặc một công cụ để gọi một API dịch vụ REST được tiếp xúc với bất kỳ hệ thống hoặc nhà cung cấp dịch vụ nào.
  • Trong phương thức RestServer hoặc một API được hiển thị để giao tiếp bởi bất kỳ hệ thống hoặc nhà cung cấp dịch vụ nào.
  • Restito là một ứng dụng nhẹ giúp bạn thực thi bất kỳ loại Yêu cầu HTTP nào
  • Tạo một ứng dụng khách HTTP và phương thức để gửi một yêu cầu HTTP GET tới bất kỳ điểm cuối nào của máy chủ
  • Khởi động máy chủ Restito để lắng nghe và nắm bắt các yêu cầu được gửi đến điểm cuối 'getevents.'
  • Khởi động máy chủ Restito để lắng nghe và nắm bắt các yêu cầu được gửi đến điểm cuối 'getevents' trong localhost
  • Ở đây, chúng tôi đã triển khai các ví dụ để kiểm tra tự động hóa chỉ REST Client.
  • Chúng tôi không cần máy chủ REST thực được phát triển để kiểm tra Máy khách REST.
  • Nguồn máy khách REST nên được tinh chỉnh để coi 'localhost' là máy chủ.

Bài viết này được đóng góp bởi Chandrasekhar Muttineni