es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spock – Llamar a Groovy al mismo cliente varias veces y verificar el resultado.

Estoy tratando de probar la lógica del limitador de velocidad, debería resultar en demasiadas solicitudes en el sexto intento.

Quiero eliminar la repetición de llamar al servicio 5 veces y asegurar que devuelva un estado 200 en los primeros 5 intentos, pero no tengo suerte, hay una excepción.

Groovyc: Las condiciones de excepción solo están permitidas en bloques ‘then’

def "POST hacia el servicio se limita correctamente"() {

    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()
}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    Para evitar la repetición, podemos utilizar la anotación @Unroll del framework Spock y especificar el número de iteraciones que queremos ejecutar la prueba.

    Aquí hay un caso de prueba actualizado que utiliza @Unroll:

    @Unroll
    def "POST request hacia el servicio se limita correctamente en la prueba #trialNumber"() {
        when:
        def result = client.post().uri("/test").exchange()
    
        then:
        noExceptionThrown()
        result != null
    
        and:
        if (trialNumber < 6) {
            result.expectStatus().isOk()
        } else {
            result.expectStatus().is4xxClientError()
        }
    
        where:
        trialNumber << (1..6)
    }
    

    Con esta configuración, podemos ejecutar el mismo caso de prueba 6 veces, con trialNumber que varía de 1 a 6. Dentro del caso de prueba, realizamos una solicitud POST en el cliente y luego validamos el código de estado de respuesta.

    Para las primeras 5 pruebas, esperamos que el código de estado sea 200. En la sexta prueba, esperamos que se devuelva un código de estado 4xx, lo que indica que se ha superado el límite de velocidad.

    Ya no es necesario utilizar IntStream.range() para iterar manualmente a través de las pruebas, ya que la anotación @Unroll de Spock se encarga de esto por nosotros.

Comments are closed.