DEV Community

Cover image for TestFly Part 6: Built-in ApiClient, BaseApiTest and fast hybrid UI + API flows
Hakan GÜL
Hakan GÜL

Posted on Edited on Originally published at hakangul.lovable.app

TestFly Part 6: Built-in ApiClient, BaseApiTest and fast hybrid UI + API flows

API testing in TestFly

TestFly ships with its own fluent HTTP client, so API tests need no third-party dependency.

API-only tests with BaseApiTest

To test an API without launching a browser, extend BaseApiTest:

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

Hybrid UI + API tests with apiClient()

Inside a BaseTest, call apiClient() to seed data through the API before the browser opens. The test below creates an order with one POST request and then opens the order page directly.

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

TestFly logs every API request to the step timeline automatically.

Top comments (0)