Spock- Groovy 多次调用同一个客户端并断言结果

Spock- Groovy call same client multiple times and assert the result

我正在尝试测试速率限制器逻辑,它应该会导致第 6 次试验时请求过多

我想摆脱重复调用服务 5 次并在前 5 次试验中断言 200,但没有运气,有一个例外 Groovyc:异常条件只允许出现在 'then' 块中

def "POST request towards service is successfully limited"() {
   
    IntStream.range(1, 6).forEach({
        when:
        def result = client.post().uri("/test").exchange()

        then:
        noExceptionThrown()
        result != null
        result.expectStatus().isOk()
    })


    when:
    def result6 = client.post().uri("/test").exchange()

    then:
    noExceptionThrown()
    result6 != null
    result6.expectStatus().is4xxClientError()
}

只需执行前 5 次调用并收集结果,然后对收集的结果进行断言。

def "POST request towards service is successfully limited"() {
   
    when:
    def results = (1..5).collect { 
        client.post().uri("/test").exchange() 
    }

    then:
    results.size() == 5
    results.each {
      it.expectStatus().isOk()
    }
  


    when:
    def result = client.post().uri("/test").exchange()

    then:    
    result.expectStatus().is4xxClientError()
}

noExceptionThrown() 是多余的,只有在 then 块中没有其他断言时才应使用它。

由于您没有 post 可编译和可运行的示例,我无法验证此代码是否有效,但应该足够接近了。