Pengenalan kepada MockServer

1. Gambaran keseluruhan

MockServer adalah alat untuk mengejek / membantutkan API HTTP luaran.

2. Pergantungan Maven

Untuk menggunakan MockServer dalam aplikasi kita, kita perlu menambahkan dua pergantungan:

 org.mock-server mockserver-netty 3.10.8   org.mock-server mockserver-client-java 3.10.8 

Versi ketergantungan terkini boleh didapati sebagai mockserver-netty dan mockserver-client.

3. Fungsi MockServer

Ringkasnya, alat ini dapat:

  • menjana dan mengembalikan tindak balas tetap
  • kemukakan permintaan ke pelayan lain
  • melaksanakan panggilan balik
  • mengesahkan permintaan

4. Cara Menjalankan MockServer

Kita boleh memulakan pelayan dengan beberapa cara yang berbeza - mari kita meneroka beberapa kaedah ini.

4.1. Melancarkan melalui Maven Plugin

Ini akan melancarkan pelayan semasa fasa proses-ujian-kelas dan berhenti pada fasa pengesahan :

 org.mock-server mockserver-maven-plugin 3.10.8  1080 1090 DEBUG org.mockserver.maven.ExampleInitializationClass    process-test-classes process-test-classes  start    verify verify  stop    

4.2. Melancarkan melalui Java API

Kita boleh menggunakan API Java startClientAndServer () untuk memulakan pelayan. Biasanya, kami akan memulakan pelayan sebelum menjalankan semua ujian:

public class TestMockServer { private ClientAndServer mockServer; @BeforeClass public void startServer() { mockServer = startClientAndServer(1080); } @AfterClass public void stopServer() { mockServer.stop(); } // ... }

5. Pelanggan Mock

MockServerClient API digunakan untuk menyediakan kemampuan untuk menyambung ke MockServer. Ini memodelkan permintaan dan respons yang sesuai dari pelayan.

Ia menyokong pelbagai operasi:

5.1. Menciptakan Harapan Dengan Tanggapan Mengejek

Harapan adalah mekanisme di mana kita mengejek permintaan dari pelanggan dan tindak balas yang dihasilkan dari MockServer.

Untuk mewujudkan jangkaan, kita perlu menentukan pemadan permintaan dan respons yang harus dikembalikan.

Permintaan dapat dipadankan dengan menggunakan:

  • jalan - laluan URL
  • rentetan pertanyaan - parameter URL
  • tajuk - permintaan tajuk
  • kuki - kuki sebelah pelanggan
  • body - badan permintaan POST dengan skema XPATH, JSON, JSON, ungkapan biasa, teks biasa atau parameter isi badan yang hampir sama

Semua parameter di atas dapat ditentukan menggunakan teks biasa atau ungkapan biasa.

Tindakan tindak balas akan mengandungi:

  • kod status - kod status HTTP yang sah contohnya 200, 400 dll.
  • body - ia adalah urutan bait yang mengandungi sebarang kandungan
  • tajuk - tajuk respons dengan nama dan satu atau lebih nilai
  • kuki - kuki respons dengan nama dan satu atau lebih nilai

Mari lihat bagaimana kita dapat mewujudkan jangkaan :

public class TestMockServer { private void createExpectationForInvalidAuth() { new MockServerClient("127.0.0.1", 1080) .when( request() .withMethod("POST") .withPath("/validate") .withHeader("\"Content-type\", \"application/json\"") .withBody(exact("{username: 'foo', password: 'bar'}")), exactly(1)) .respond( response() .withStatusCode(401) .withHeaders( new Header("Content-Type", "application/json; charset=utf-8"), new Header("Cache-Control", "public, max-age=86400")) .withBody("{ message: 'incorrect username and password combination' }") .withDelay(TimeUnit.SECONDS,1) ); } // ... }

Di sini, kami menyekat permintaan POST ke pelayan. Dan kami telah menyatakan bahawa berapa kali kami perlu membuat permintaan ini dengan menggunakan tepat (1) panggilan.

Setelah menerima permintaan ini, kami mengejek respons dengan bidang seperti kod status, tajuk, dan badan respons.

5.2. Memajukan Permintaan

Harapan dapat disiapkan untuk meneruskan permintaan. Beberapa parameter dapat menggambarkan tindakan ke hadapan:

  • tuan rumah - tuan rumah untuk meneruskan seperti www.baeldung.com
  • port - port di mana permintaan untuk diteruskan, port lalai adalah 80
  • skema - protokol untuk digunakan misalnya HTTP atau HTTPS

Mari lihat contoh permintaan pemajuan:

private void createExpectationForForward(){ new MockServerClient("127.0.0.1", 1080) .when( request() .withMethod("GET") .withPath("/index.html"), exactly(1)) .forward( forward() .withHost("www.mock-server.com") .withPort(80) .withScheme(HttpForward.Scheme.HTTP) ); }

Dalam kes ini, kami telah mengejek permintaan yang akan memukul MockServer dengan tepat dan kemudian diteruskan ke pelayan lain. Kaedah luar hadapan () menentukan tindakan hadapan dan panggilan kaedah hadapan ke depan () membantu membina URL dan meneruskan permintaan.

5.3. Melaksanakan Panggilan Balik

Pelayan dapat diatur untuk melakukan panggilan balik ketika menerima permintaan tertentu. Tindakan panggilan balik dapat menentukan kelas panggilan balik yang menerapkan antara muka org.mockserver.mock.action.ExpectationCallback . Ia harus mempunyai konstruktor lalai dan harus berada di lorong kelas.

Mari lihat contoh jangkaan dengan panggilan balik:

private void createExpectationForCallBack() { mockServer .when( request().withPath("/callback")) .callback( callback() .withCallbackClass("com.baeldung.mock.server.TestExpectationCallback") ); }

Di sini callback luar () menentukan tindakan callback dan kaedah callback dalam () menentukan contoh kelas kaedah callback.

Dalam hal ini, ketika MockServer menerima permintaan dengan / callback, maka metode menangani callback yang dilaksanakan di kelas yang ditentukan akan dijalankan:

public class TestExpectationCallback implements ExpectationCallback { public HttpResponse handle(HttpRequest httpRequest) { if (httpRequest.getPath().getValue().endsWith("/callback")) { return httpResponse; } else { return notFoundResponse(); } } public static HttpResponse httpResponse = response() .withStatusCode(200); }

5.4. Mengesahkan Permintaan

MockServerClient mempunyai kemampuan untuk memeriksa sama ada sistem yang diuji menghantar permintaan:

private void verifyPostRequest() { new MockServerClient("localhost", 1080).verify( request() .withMethod("POST") .withPath("/validate") .withBody(exact("{username: 'foo', password: 'bar'}")), VerificationTimes.exactly(1) ); }

Di sini, kelas org.mockserver.verify.VerificationTimes digunakan untuk menentukan berapa kali Pelayan Mock sesuai dengan permintaan.

6. Kesimpulannya

Dalam artikel ringkas ini, kami telah meneroka pelbagai fungsi MockServer. Kami juga telah meneroka pelbagai API yang disediakan dan bagaimana ia dapat digunakan untuk menguji sistem yang kompleks.

Seperti biasa, kod lengkap untuk artikel ini terdapat di GitHub.