Native API Testing in TestFly
TestFly includes a high-performance, fluent HTTP client out of the box—no third-party dependencies required.
1. Pure API Tests with BaseApiTest
Extend BaseApiTest for API tests without launching a browser:
package io.testfly.examples.api;
import io.testfly.test.BaseApiTest;
import io.testfly.client.ApiClient;
import io.testfly.client.ApiResponse;
import org.testng.annotations.Test;
public class UserApiTest extends BaseApiTest {
@Test
public void getUserAndValidateSchema() {
ApiResponse res = ApiClient.get("/api/users/1")
.header("Accept", "application/json")
.send()
.assertStatus(200)
.assertJson("$.name", "Hakan Gül")
.assertSchema("schemas/user.json");
}
}
2. Hybrid UI + API Tests via apiClient()
In BaseTest, use apiClient() to seed data via API before opening the browser:
package io.testfly.examples.tests;
import io.testfly.test.BaseTest;
import io.testfly.client.ApiResponse;
import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.Map;
public class OrderCheckoutTest extends BaseTest {
@Test
public void fastOrderVerification() {
// 1. Create order instantly via API (100ms)
ApiResponse order = apiClient().post("/api/orders")
.body(Map.of("itemId", "SKU-100", "quantity", 1))
.send()
.assertStatus(201);
String orderId = order.json("$.orderId");
// 2. Open browser directly to the order page
open("/orders/" + orderId);
Assert.assertEquals(getText(By.id("order-status")), "Confirmed");
}
}
Every API request is automatically logged to the TestFly step timeline!
Top comments (0)