Thi thoảng khi bạn làm api test, sẽ có yêu cầu là run 1 API khoảng 20-30 lần song song để xem api hoạt động thế nào. Yêu cầu này được xếp vào loại performance test và có rất rất nhiều tool free giúp bạn dễ dàng, đơn giản. Tuy nhiên, test này bạn lại muốn viết ngay vào bên trong API test suites.
Dưới đây là hướng dẫn của mình viết 1 bài toán tương tự:
Mình muốn gọi api https://postman-echo.com/get
5 lần cùng nhau.
import io.restassured.RestAssured; import org.junit.jupiter.api.Test; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class ParallelTest { @Test void name() throws InterruptedException { Runnable callApi = () -> { System.out.println("Start thread - " + Thread.currentThread().getName()); System.out.println(RestAssured.given().get("https://postman-echo.com/get").getTime() + "ms"); }; ExecutorService es = Executors.newCachedThreadPool(); for (int i = 0; i < 5; i++) { es.execute(callApi); } es.shutdown(); boolean finished = es.awaitTermination(2, TimeUnit.MINUTES); } }
Để làm được việc này thì mình cần tạo ra multiple threads trong java. Kiến thức này mình hơi khó giải thích nếu bạn chưa từng đọc hoặc làm việc với Thread trong java.
Đại ý mình sẽ có các step như sau:
- Tạo ra task –> call API
- Tạo ra multiple threads dưới dạng service (ở đây mình dùng
Executors.newCachedThreadPool()
để tạo service) - Service thực hiện task
- Đóng service (nó sẽ không đóng ngay lập tức mà nó sẽ đợi các thread hoàn thành hết công việc)
- Đợi đến khi service hoàn thành hết công việc hoặc sẽ tự chấm dứt task sau 2 phút.