how to data driven testing in api
If you use JUnit-5 in your framework,
it allows to use @ParameterizedTest annotation
beside @Test annotation.
There are different way to achieve
DDT with @ParameterizedTest annotation.
(1-valueSource , 2- csvSource , 3-CsvFileSource)
1. @ParameterizedTest
@ValueSource(ints = {1,2,3,4})
public void validateRegionNameTest1(int id) {
given().pathParam("id", id)
.when().get("/regions/{id}") ==> It will use 1,2,3,4 as
id in different runs...
.prettyPeek()
.then().assertThat().statusCode(200)
.and().assertThat().body("region_id", equalTo(id));
}
2. @ParameterizedTest
@CsvSource({
"1, Europe",
"2, Americas",
"3, Asia",
"4, Middle East and Africa"})
public void validateRegionNameTest2(int id, String name) { ==> iterate
each data set one by one
given().pathParam("id", id)
.when().get("/regions/{id}")
.prettyPeek()
.then().assertThat().statusCode(200)
.and().assertThat().body("region_id", equalTo(id))
.and().assertThat().body("region_name", equalTo(name));
}
3. @ParameterizedTest
@CsvFileSource(resources = "/regions.csv") ==> uses external csv
file which is located under resources directory
public void validateRegionNameTest3(int id, String name) {
given().pathParam("id", id)
.when().get("/regions/{id}")
.prettyPeek()
.then().assertThat().statusCode(200)
.and().assertThat().body("region_id", equalTo(id))
.and().assertThat().body("region_name", equalTo(name));
}