首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试mochiweb应用程序?

如何测试mochiweb应用程序?
EN

Stack Overflow用户
提问于 2011-01-01 00:42:44
回答 3查看 869关注 0票数 1

我想对我的mochiweb应用程序进行高级测试,就像在Python中使用WebTest、在Django中使用测试客户端以及在Ruby on Rails中使用功能或集成测试一样。我对如何做这件事并不太挑剔。基本上,我只想发送或模拟HTTP请求,并对结果进行断言。

我重构了我的代码,以便我的请求处理程序不会调用Req:respond()本身,而是返回一个元组{Code, Headers, Body}。这允许我使用mochiweb_request:new()构建虚拟请求,将它们传递给我的请求分派器,并使用EUnit对结果进行断言:

代码语言:javascript
复制
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()。我正在考虑的另一个解决方案是使用第三方web测试库,而不是用Erlang编写的。也许是Ruby或者Python,或者甚至是Selenium。

那么,您会推荐哪种解决方案来对mochiweb应用程序进行功能或集成测试?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-01 15:53:15

我使用普通的测试服务器,为了进行测试,我使用ibrowse。下面是一个示例:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-01-01 01:05:15

我们主要将我们的测试从HTTP管道中分离出来。通常,在函数式环境中做的事情是正确的。

src/mochiweb_multipart.erl中的一些eunit代码可能与您的特定用例更相关。

票数 1
EN

Stack Overflow用户

发布于 2011-01-01 04:28:19

为什么不直接使用http客户端进行调用呢?我使用ibrowse对我的webmachine服务器进行系统测试,根据需要包括POSTing数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4571197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档