DEV Community

Cover image for TestFly Part 6: Built-in ApiClient, BaseApiTest & Fast Hybrid UI + API Flows
Hakan GÜL
Hakan GÜL

Posted on Originally published at hakangul.lovable.app

TestFly Part 6: Built-in ApiClient, BaseApiTest & Fast Hybrid UI + API Flows

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");
    }
}
Enter fullscreen mode Exit fullscreen mode

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");
    }
}
Enter fullscreen mode Exit fullscreen mode

Every API request is automatically logged to the TestFly step timeline!

Top comments (0)