当前位置: 首页 > 知识库问答 >
问题:

如何拦截放心响应验证失败

淳于慎之
2023-03-14

放心,当我们这样做时

given().get("/api").then().statusCode(SC_OK).content(JSON);

抛出的错误总是连续的,也就是说,如果状态代码失败,它不会检查contentType是否是JSON。

此外,抛出的错误始终是,断言错误(预期:200,实际:404)。无法从中了解实际响应是什么,如果启用日志记录,它将打印在标准输出上,但其他任何方式都不可用。

是否有任何方法来构建或设置类似于我们如何实现<code>过滤器

我有一个 rest api 框架,其中大多数验证都是使用 ValidatableResponse 完成的,即使用 .then()...;而不是通过在请求构建时创建响应的期望来完成。

我希望拦截一个特定类型的失败,例如,如果失败的状态代码是50_而我们期望的是200或其他任何值,那么实际的失败可以在测试失败原因中发布

我确实提出了github问题

但我不确定这是否会很快实施。我在文件中也找不到任何东西。

共有1个答案

苏鸿志
2023-03-14

我能够通过委托响应ValidatableACK接口实现来实现这一点

基本上

public class DelegateResponse implements Response {

  Response response;

  DelegateResponse(Response response){
    this.response = response;
  }
  .
  .
  .
  // Override and delegate other functions normally, but in the below call, delegate further

  @Override
  ValidatableResponse then(){
    return new DelegateValidatableResponse(response.then(), response);
  }

}

public class DelegateValidatableResponse implements ValidatableResponse {

  ValidatableResponse validatableResponse;
  Response response;

  DelegateValidatableResponse(ValidatableResponse validatableResponse,Response response) {
    this.validatableResponse = validatableResponse;
    this.response = response;
  }
  .
  .
  .
  // Override and delegate other functions similarly and wrap with try catch
  // This gives us access to Response object if an exception is thrown and we have more details
  // than just the String "Expected status code 200 but was 500"

  @Override
  public ValidatableResponse statusCode(Matcher<? super Integer> expectedStatusCode) {
    try {
      return validatableResponse.statusCode(expectedStatusCode);
    } catch (Throwable exception) {
      throw new ApiValidationError(response, requestSpec, responseSpec, exception);
    }
  }

}
 类似资料:
  • 我是大一新生,请放心。我有一个获取响应体的简单测试,我想验证响应体是否与我的POJO类匹配。 这是我的测试: 这是我的POJO类: 那么如何验证响应体结构等于我的POJO类呢? 提前感谢

  • 我有以下场景:我正在尝试处理一个表单,模型属性是一个具有String和Long属性的bean。众所周知,bean验证提供了很多注释来帮助我们确定数据的有效性。我面临的是,对于Long属性的情况,我只能使用@NotNull和另一个注释(我不记得它的名字)来强制用户输入正数。如果用户输入例如“sdf”,应用程序会抛出一个BIG异常。所以我想知道的是,如果用户在爆炸前输入了一个数字(因为我不能使用@Pa

  • 我有一个示例JSON响应 如何验证何时然后当然后 尝试过类似的东西,但它不起作用。 我错过了什么还是做错了什么?

  • 我想拦截改造引擎收到的所有响应,并扫描HTTP错误代码,例如错误403。 我知道我可以使用每个请求的failure(reformationerror error)回调并检查403,但我想将响应打包为全局响应。 我可以看到请求拦截是可能的,但我看不到类似的响应选项。 有什么建议吗?

  • 在我的测试中,a有这样的回答: 其中和是键-值对。 关于和key-value对也是如此。 响应可以包括许多键-值对。 我需要能够验证是否在响应中提供了一些键和值。 我使用,所以我知道我可以使用这样的路径来获取键和使用我编写的这些方法来获取值: 其中传递的< code>param是响应中的参数路径,如< code>commands.value.path。< br >但是我认为这将为我带来响应正文中匹

  • 问题内容: 我有一个使用AngularJS和服务器端后端构建的应用程序,该后端以JSON形式传递所有请求。每个请求都包装在一个JSON容器中,该容器包含一个数据变量,该变量包含特定于该请求的数据。其他数据用于保持应用程序内的状态和控制,检查错误和成功消息以及检查会话标志。所有其他变量都随EVERY请求一起提供,并且在数据变量之前先进行检查。 现在,我有一种方法可以先检查JSON响应的内容,然后再检