Testng - 仅跳过失败数据集的相关测试
Testng - Skip dependent tests for only failed data sets
我正在尝试修改我的相关测试,以便它们以特定方式 运行 并且尚未找到可行的方法。例如,假设我有以下两个测试和定义的数据提供者:
@Dataprovider(name = "apiResponses")
Public void queryApi(){
return getApiResponses().entrySet().stream().map(response -> new Object[]{response.getKey(), response.getValue()}).toArray(Object[][]::new);
}
@Test(dataprovider = "apiResponses")
Public void validateApiResponse(Object apiRequest, Object apiResponse){
if(apiResponse.statusCode != 200){
Assert.fail("Api Response must be that of a 200 to continue testing");
}
}
@Test(dataprovider = "apiResponses", dependsOnMethod="validateApiResponse")
Public void validateResponseContent(Object apiRequest, Object apiResponse){
//The following method contains the necessary assertions for validating api repsonse content
validateApiResponseData(apiResponse);
}
假设我有 100 个 api 请求要验证,如果这 100 个请求中有一个请求 return 状态代码不是 200,则 validateResponseContent将跳过所有 100 个。我试图实现的是,仅对 api 的 return 响应跳过状态代码为 200 的依赖测试,并且所有测试都将跳过运行 对于 return 状态代码为 200 的响应。
添加 if/else 块不会解决这个问题吗?
@Test(dataprovider = "apiResponses")
Public void validateApiResponse(Object apiRequest, Object apiResponse){
if(apiResponse.statusCode != 200){
Assert.fail("Api Response must be that of a 200 to continue testing");
} else {
validateApiResponseData(apiResponse);
}
}
您应该使用 TestNG Factory
,它会为每个实例创建包含 apiRequest
和 apiResponse
的实例。现在,每个实例基本上都会首先 运行 对状态代码进行断言,然后再继续验证实际的 api 响应。
这是一个示例,展示了它的样子:
public class TestClassSample {
private Object apiRequest, apiResponse;
@Factory(dataProvider = "apiResponses")
public TestClassSample(Object apiRequest, Object apiResponse) {
this.apiRequest = apiRequest;
this.apiResponse = apiResponse;
}
@Test
public void validateApiResponse() {
Assert.assertEquals(apiResponse.statusCode, 200, "Api Response must be that of a 200 to continue testing");
}
@Test(dependsOnMethods = "validateApiResponse")
public void validateResponseContent() {
//The following method contains the necessary assertions for validating api repsonse content
validateApiResponseData(apiResponse);
}
@DataProvider(name = "apiResponses")
public static java.lang.Object[][] queryApi() {
return getApiResponses().entrySet()
.stream().map(
response -> new java.lang.Object[]{
response.getKey(), response.getValue()
})
.toArray(Object[][]::new);
}
}
我正在尝试修改我的相关测试,以便它们以特定方式 运行 并且尚未找到可行的方法。例如,假设我有以下两个测试和定义的数据提供者:
@Dataprovider(name = "apiResponses")
Public void queryApi(){
return getApiResponses().entrySet().stream().map(response -> new Object[]{response.getKey(), response.getValue()}).toArray(Object[][]::new);
}
@Test(dataprovider = "apiResponses")
Public void validateApiResponse(Object apiRequest, Object apiResponse){
if(apiResponse.statusCode != 200){
Assert.fail("Api Response must be that of a 200 to continue testing");
}
}
@Test(dataprovider = "apiResponses", dependsOnMethod="validateApiResponse")
Public void validateResponseContent(Object apiRequest, Object apiResponse){
//The following method contains the necessary assertions for validating api repsonse content
validateApiResponseData(apiResponse);
}
假设我有 100 个 api 请求要验证,如果这 100 个请求中有一个请求 return 状态代码不是 200,则 validateResponseContent将跳过所有 100 个。我试图实现的是,仅对 api 的 return 响应跳过状态代码为 200 的依赖测试,并且所有测试都将跳过运行 对于 return 状态代码为 200 的响应。
添加 if/else 块不会解决这个问题吗?
@Test(dataprovider = "apiResponses")
Public void validateApiResponse(Object apiRequest, Object apiResponse){
if(apiResponse.statusCode != 200){
Assert.fail("Api Response must be that of a 200 to continue testing");
} else {
validateApiResponseData(apiResponse);
}
}
您应该使用 TestNG Factory
,它会为每个实例创建包含 apiRequest
和 apiResponse
的实例。现在,每个实例基本上都会首先 运行 对状态代码进行断言,然后再继续验证实际的 api 响应。
这是一个示例,展示了它的样子:
public class TestClassSample {
private Object apiRequest, apiResponse;
@Factory(dataProvider = "apiResponses")
public TestClassSample(Object apiRequest, Object apiResponse) {
this.apiRequest = apiRequest;
this.apiResponse = apiResponse;
}
@Test
public void validateApiResponse() {
Assert.assertEquals(apiResponse.statusCode, 200, "Api Response must be that of a 200 to continue testing");
}
@Test(dependsOnMethods = "validateApiResponse")
public void validateResponseContent() {
//The following method contains the necessary assertions for validating api repsonse content
validateApiResponseData(apiResponse);
}
@DataProvider(name = "apiResponses")
public static java.lang.Object[][] queryApi() {
return getApiResponses().entrySet()
.stream().map(
response -> new java.lang.Object[]{
response.getKey(), response.getValue()
})
.toArray(Object[][]::new);
}
}