Pregunta

Me gusta hacer las pruebas de alto nivel de mi aplicación mochiweb, como es posible hacerlo en Python con WebTest, en Django con el cliente de prueba y en Ruby on Rails con las pruebas funcionales o de integración. No soy muy exigente con la forma de hacerlo. Básicamente me gustaría enviar o simular las peticiones HTTP y afirmaciones realice en el resultado.

Me refactorizado mi código para que mis solicitudes manejador no lo llamaría Req:respond() sí mismos, sino devolver un {Code, Headers, Body} tupla. Esto me permite construir peticiones ficticias con mochiweb_request:new(), pasarlas a mi solicitud despachador y hacer afirmaciones sobre el resultado utilizando EUnit:

make_request(Method, Path) ->
    Request = mochiweb_request:new(nil, Method, Path, {1, 1},
        mochiweb_headers:make([{"Accept", "text/html"}])),
    Response = myapp:dispatch(Request),
    Response.


signin_test() ->
    {Code, _, _} = make_request('GET', "/signin"),
    ?assertEqual(Code, 200),
    ok.

Ahora mi problema es cómo poner a prueba las peticiones POST. No he encontrado nada en mochiweb que permitiría que haga eso. De la lectura de código de mochiweb, parece que cuando Req:parse_post() se llama, se desencadena una lectura en un zócalo. He encontrado algo de código prueba interesante en src / mochiweb.erl . Al parecer, esto implica la construcción de mensajes HTTP, escribirlas en un zócalo y la lectura de la parte posterior respuesta. He intentado hacer esto en mi propio código de prueba pero no me las arreglo para llegar a ninguna parte después de unas horas. Estoy empezando a preguntarse si voy en la dirección correcta. Tal vez tengo que desvincular aún más mi funcionalidad de la tubería de HTTP, es decir. No llame Req:parse_post() desde dentro de mis controladores de solicitudes. Otra solución que estoy pensando sería utilizar una biblioteca de pruebas web de terceros, no es necesario por escrito en Erlang. Tal vez algo en Ruby o Python o incluso tal vez selenio.

Entonces, ¿qué solución me recomiendan hacer pruebas funcionales o integración de una aplicación mochiweb?

¿Fue útil?

Solución

Yo uso el servidor de prueba común y para probar yo uso iBrowse. He aquí un ejemplo:

post_cap_query_no_caps(_Config) ->
A="<?xml version=\"1.0\" encoding=\"utf-8\"?><query><capabilities/></query>",
{ok, "200", _C, Body}=ibrowse:send_req("http://localhost:8000/devices",  XML_CONTENT_TYPE, post, A),
"<devices/>" == Body.

Otros consejos

Tenemos sobre todo a desligar nuestras pruebas de la tubería de HTTP. Por lo general, lo que hay que hacer en un entorno funcional de todos modos.

Hay un cierto código eunit en src / mochiweb_multipart.erl que es probablemente más relevante para su caso en particular.

¿Por qué no sólo tiene que utilizar un cliente HTTP para hacer las llamadas? Yo uso iBrowse a prueba del sistema de mi servidor webmachine, incluyendo la publicación de los datos según sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top