Как проверить приложение mochiweb? - PullRequest
1 голос
/ 31 декабря 2010

Я хотел бы провести высокоуровневое тестирование моего приложения mochiweb, как это можно сделать на Python с WebTest, в Django с тестовым клиентом и в Ruby on Rails с функциональным или интеграционным тестированием. Я не слишком разборчив в том, как это сделать. По сути, я просто хотел бы отправлять или моделировать HTTP-запросы и делать утверждения о результате.

Я произвел рефакторинг своего кода, чтобы мой обработчик запросов не вызывал Req:respond(), но возвращал кортеж {Code, Headers, Body}. Это позволяет мне создавать фиктивные запросы с mochiweb_request:new(), передайте их моему диспетчеру запросов и сделайте утверждения о результате с помощью 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.

Теперь моя проблема в том, как проверить POST-запросы. В mochiweb я не нашел ничего, что позволило бы мне это сделать. При чтении кода mochiweb кажется, что при вызове Req:parse_post() запускается чтение в сокете. Я нашел интересный тестовый код в src / mochiweb.erl . Очевидно, это включает в себя построение HTTP-сообщений, запись их в сокет и чтение ответа обратно. Я пытался сделать это в своем собственном тестовом коде, но мне не удалось ничего получить через несколько часов. Я начинаю задаваться вопросом, иду ли я в правильном направлении. Может быть, мне нужно еще больше отделить мою функциональность от HTTP-соединения, т.е. не звоните Req:parse_post() из моих обработчиков запросов. Другое решение, о котором я думаю, это использование сторонней библиотеки веб-тестирования, необязательно написанной на Erlang. Может быть, что-то в Ruby или Python или даже, может быть, Selenium.

Итак, какое решение вы бы порекомендовали для функционального или интеграционного тестирования приложения mochiweb?

Ответы [ 3 ]

1 голос
/ 31 декабря 2010

Мы в основном отделяем наши тесты от HTTP-соединения. В любом случае, обычно это правильно делать в функциональной среде.

В файле src / mochiweb_multipart.erl есть некоторый код eunit, который, вероятно, больше подходит для вашего конкретного случая использования.

0 голосов
/ 01 января 2011

Я использую общий тестовый сервер, а для тестирования я использую ibrowse.Вот пример:

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.
0 голосов
/ 31 декабря 2010

Почему бы вам просто не использовать http-клиент для совершения звонков?Я использую ibrowse для системного тестирования моего сервера веб-машины, включая размещение данных по мере необходимости.

...