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.

¿Cómo extraer datos JSON presentes en RestApi?

Hago una publicación a una API con Rest Assured y luego intento asegurarme de que los datos esperados coincidan con los datos de respuesta, pero obtengo algunos errores como este: “java.lang.IllegalArgumentException: el parámetro “data” se utilizó pero no se definió. Defina los parámetros usando la función JsonPath.params (…)”.


Mi código:

String payload_data = "{" +
                "\"Time\":1638057600, " +
                "\"exampleType\":example, " +
                "\"Id\":[2]}";

    RestAssured.defaultParser = Parser.JSON;
    given().
            contentType(ContentType.JSON).
            body(payload_data).
            when().
            post(api_url).
            then().
            statusCode(200).
            body("data.examples.2.exampleData", equalTo("33"));

}

Mis datos JSON:

{
    "success": true,
    "data": {
        "examples": {
            "2": {
                "ex_data": 0,
                "exampleData": 33,
                "data_ex": 0,
            }
      }
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “El parámetro ‘data’ se usó pero no se definió. Defina los parámetros utilizando la función JsonPath.params (…)” sugiere que puede haber un problema con la forma en que se define el parámetro body en el código. Específicamente, parece que el parámetro body puede no estar definido correctamente, posiblemente debido a parámetros faltantes o formato incorrecto.

    Una solución potencial a este problema es usar la función JsonPath.params (...) para definir los parámetros esperados en los datos de respuesta. Aquí hay una versión actualizada del código que utiliza esta función para verificar los datos esperados:

    String payload_data = "{\n" +
                "\"Time\":1638057600, \n" +
                "\"exampleType\":\"example\", \n" +
                "\"Id\":[2]}\n";
    
    RestAssured.defaultParser = Parser.JSON;
    given().
            contentType(ContentType.JSON).
            body(payload_data).
    when().
            post(api_url).
    then().
            statusCode(200).
            body("data.examples.'2'.exampleData", equalTo("33"))
            .root("data")
            .body("examples.'2'.exampleData", equalTo("33"))
            .body("examples.'2'.ex_data", equalTo(0))
            .body("examples.'2'.data_ex", equalTo(0))
            .detachRoot("examples");
    

    Aquí, se utiliza la función JsonPath.params (...) para definir el parámetro esperado “data” en los datos de respuesta. El código actualizado también incluye afirmaciones adicionales de body que verifican otros parámetros esperados en los datos de respuesta.

    Tenga en cuenta que el parámetro body actualizado usa comillas simples alrededor de la clave '2', ya que los datos JSON originales usan comillas dobles alrededor de la clave "2". La función detachRoot se utiliza para eliminar el nodo “examples” de la raíz, para que las afirmaciones posteriores de body verifiquen parámetros dentro del nodo “data”.

    Con estas actualizaciones, el código debería poder verificar correctamente los datos esperados en la respuesta de la API.

Comments are closed.