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

Spring WebClient和jsonPath-如果测试失败,如何输出json结果

晋言
2023-03-14

我们正在使用我们的GraphQL后端WebTestClient(SpringBoot)进行测试,但很难确定测试失败的原因。我们的代码如下所示:

webTestClient
   .post().uri(GQLKonstanten.URL)
   .body(GQLRequestInserter.from(movieDeleteGQL, variables))
   .exchange()
   .expectBody()
   .jsonPath("$.errors").doesNotExist()
   .jsonPath("$.data.movie.id")
   .isEqualTo(movie.getId());

我得到的是带有以下消息的stacktrace:

Java语言lang.AssertionError:JSON路径“$.data.movie.id”处没有值

...

原因:com.jayway.jsonpath.PathNotFoundException:路径$['data']['电影']中缺少属性

错误消息完全正确。但为了实际查看这个graphQl执行命令实际返回的内容,我总是将WebClient执行更改为:

String responseBody = webTestClient
  .post().uri(GQLKonstanten.URL)
  .body(GQLRequestInserter.from(deleteMovieGQL, variables))
  .exchange()
  .expectStatus()
  .isOk()
  .expectBody(String.class)
  .returnResult().getResponseBody();
System.out.print(responseBody);

那么我看到的结果是

{"data":{"deleteMovie":{"id":7}}}

我看到我期望的是“movie”而不是“deleteMoine”属性。所以我把测试改为

.jsonPath("$.data.deleteMovie.id")

总是运行两次测试并更改代码很麻烦。

有没有更好的方法让WebTestClient在测试失败时始终输出responseBody?

共有1个答案

李弘光
2023-03-14

到目前为止,我发现最好的方法是添加

.expectBody()
.consumeWith(System.out::println)

它总是打印json结果,而不是仅在出现错误时打印。但这对我很有用。

 类似资料:
  • 安装程序:我有一个扩展IRetryAnalyzer的类,并实现了一个简单的重试逻辑,覆盖了以下方法:public boolean retry(ITestResult result){ 提前道谢。

  • 我正在尝试使用Web客户端创建REST调用 我只想记录通话结果。成功时 - 使用响应正文记录成功消息,在 5XX 或超时或其他时 - 记录错误消息。日志应该在后台创建(而不是由创建调用的线程创建)但是每次都会执行,工作正常,但也有 记录在日志文件中。 我也在一些教程中看到过方法,但在我的设置中有这样的方法。 如何记录成功和失败消息?

  • 我写了500多个单元测试方法。当我发出< code>ng test命令时。它开始测试所有的500种方法。 如果任何测试用例失败,它不会停止,仍然会继续执行所有方法。所以我需要等待更多的时间来再次重新运行单元测试。 我知道我们可以通过执行来存在,然后使用命令再次重新运行单元测试。这种方式也需要太多时间。 那么,如果任何一个测试失败,是否有可能停止(不存在)单元测试?

  • 问题内容: 无论彼此是否成功,我都应该执行几个测试,并且如果这些测试中至少有一个失败,我希望詹金斯/哈德森显示 红灯 。我当前的配置(为简化起见)如下: ci.sh : build.xml : 我怎样才能使所有测试都执行,但是如果三个测试中至少有一个失败,则ant / Jenkins应该会失败? 问题答案: 我发现线程计数设置为“ 1”的任务是可行的解决方法。这不是完美的,但是更改很小: buil

  • 问题内容: 我有基于gradle的带有junit测试的Java项目,我正在为其构建CI工作。我使用松弛Slack Notification插件成功地将松弛与Jenkins集成在一起。 Jenkins版本:2.173 松弛通知版本:2.20 jenkins CI是脚本化管道,具有以下代码: SlackNotifier是一个包含以下代码的库: buildUnitTestSlackNotificatio