你可以使用Tsung
,但这就是我要做的:我会使用一个好的HTTP Client
like编写一个大规模线程测试器curl
,或者ibrowse
从不同的机器上运行。然后根据我想要的进行测试。
编辑
现在,在 erlang 库中拥有 ibrowse 库,重新编译并将其 ebin 放在代码路径中。
%% 确保 Ibrowse 已启动
确保ibrowse()->
case whereis(ibrowse) 的
未定义-> ibrowse:start();
任何时候 is_pid(Any)-> ok
结尾。
%% 发出获取请求
do_get(链接)->
试试 ibrowse:send_req(Link,[],get) 的
{ok,_,_,结果} ->
%% 结果可能是 JSON 在这种情况下你会
%% mochijson2:decode(结果)
其他 -> {错误,其他}
抓住
E1:E2 -> {异常,{E1,E2}}
结尾。
%% 保存对文件的响应
保存到文件(链接)->
尝试 ibrowse:send_req(Link,[],get,[],[{save_response_to_file,true}]) 的
{ok,_,_,{file,FilePath}} ->
%% 对文件做任何事情,
%%------------------------------------------------ --------
%% 喜欢 {ok,FileHandle} = file:open(FilePath,[read])
%%------------------------------------------------ -----
%% OR {ok,Contents} = file:read_file(FilePath)
%%------------------------------------------------ --------
%% 或者如果响应是 .zip 文件
%% {ok,FileList} = zip:unzip(FilePath),
%% [开始 process_file_contents(element(2,file:read_file(F))) 结束 || F <- 文件列表]
%%------------------------------------------------ --------------------------------
其他 -> {错误,其他}
抓住
E1:E2 -> {异常,{E1,E2}}
结尾。
%% 做一个 POST
%% 通常,如果你使用 mochijson 来编码 erlang 术语
%% 到 JSON,你将::
%% JSON = list:flatten(mochijson:encode({struct,[Terms]}))
发布(链接,JSON)->
试试 ibrowse:send_req(Link,[],post,JSON,[]) 的
{_,_,_,结果} ->
尝试 mochijson2:decode(Result) of
{struct,[{<<"key1">>,<<"value1">>},...]} ->
%% 继续
JSONOther -> {错误,JSONOther}
抓住
R:R2 -> {异常,{R:R2}}
结尾;
任何 -> erlang:throw({write_failed,Link,Any})
抓住
E1:E2 -> {异常,{E1,E2}}
结尾。
%% 发出 put 请求
%% 与 Post 相同,只需将原子 'post' 更改为 'put'
%% 将标头添加到请求中
发布(链接,JSON)->
标头 = [{"Content-Type","application/json"}],
尝试 ibrowse:send_req(Link,Headers,post,JSON,[]) of
{_,_,_,Result} ->
尝试 mochijson2:decode(Result) of
{struct,[{<<"key1">>,<<"value1">>},...]} ->
%% 继续
JSONOther -> {错误,JSONOther}
抓住
R:R2 -> {异常,{R:R2}}
结尾;
任何 -> erlang:throw({write_failed,Link,Any})
抓住
E1:E2 -> {异常,{E1,E2}}
结尾。
如果您未能在代码路径中安装 ibrowse,请告诉我们