Answer
Scenario: Testing a User Data Retrieval API Endpoint
You need to test an API endpoint GET /api/users that retrieves user data based on certain criteria.
Approach
Step 1: Identify All Criteria/Filters
- ✓
gender— male/female/other - ✓
status— active/inactive - ✓
page/per_page— pagination - ✓
sort_by— name/email/created_at - ✓
search— partial name search
Step 2: Design Test Cases
Valid Criteria Combinations:
Java
@Test
public void testGetUsersByGender() {
given()
.queryParam("gender", "female")
.when()
.get("/api/users")
.then()
.statusCode(200)
.body("data.size()", greaterThan(0))
.body("data.gender", everyItem(equalTo("female")));
}
@Test
public void testGetUsersByStatusActive() {
given()
.queryParam("status", "active")
.when()
.get("/api/users")
.then()
.statusCode(200)
.body("data.status", everyItem(equalTo("active")));
}
@Test
public void testGetUsersWithPagination() {
given()
.queryParam("page", 2)
.queryParam("per_page", 5)
.when()
.get("/api/users")
.then()
.statusCode(200)
.body("page", equalTo(2))
.body("per_page", equalTo(5))
.body("data.size()", lessThanOrEqualTo(5));
}
Edge Cases — Non-existent Users:
Java
@Test
public void testGetNonExistentUser() {
given()
.when()
.get("/api/users/99999")
.then()
.statusCode(404)
.body("message", containsString("not found"));
}
Invalid Criteria:
Java
@Test
public void testInvalidGenderFilter() {
given()
.queryParam("gender", "robot")
.when()
.get("/api/users")
.then()
.statusCode(400)
.body("error", containsString("Invalid value for gender"));
}
Performance Test:
Java
@Test
public void testResponseTimeForUserList() {
given()
.when()
.get("/api/users")
.then()
.statusCode(200)
.time(lessThan(2000L)); // response under 2 seconds
}
Step 3: Validate Response Structure
Java
@Test
public void testUserResponseSchema() {
given()
.when()
.get("/api/users/1")
.then()
.statusCode(200)
.body("data", hasKey("id"))
.body("data", hasKey("email"))
.body("data", hasKey("first_name"))
.body("data", hasKey("last_name"));
}
Test Coverage Matrix
| Test Type | Scenarios |
|---|---|
| Valid filters | gender, status, search |
| Pagination | page, per_page, last page |
| Invalid input | wrong values, missing required |
| Edge cases | empty result set, non-existent user |
| Performance | response time < 2s |
| Security | auth token required |
