7

シンプルな Erlang YAWS ベースの RESTful アプリケーションで、RESTful API に HTTP リクエストを送信し、サーバーからレスポンスを取得して、それらのレスポンスをテストする一連のテストを作成したいと考えています。

各「send-request-get-request-test」テストを EUnit 内から実行できれば (テスト ジェネレーターを使用できるようにして) 便利です。

rebarまた、この一連のテストを( )で実行できるようにしたいと考えていますmake test

最近 ibrowse別のアプリ(Mochiweb)で使っていたのですが、静かで使いづらいと感じました。

HTTP リクエストを YAWS RESTful アプリケーションに送信できる Erlang/OTP テストを作成する他のオプションはありますか? それを行う最も一般的な方法は何ですか?

4

3 に答える 3

6

etest、特にetest_httpを試しましたか?

于 2012-08-21T22:47:10.670 に答える
5

私はRESTベースのサービスをテストするためにibrowseでcommon_testを使用しています。

  1. アーラン分布の一部です
  2. 鉄筋からテストを呼び出すことができます
  3. テストを構成できるので、並行して実行し、シーケンスを実行します...。

このプレゼンテーションをご覧ください:http ://www.erlang-factory.com/upload/presentations/275/CommonTestPresentation.pdf

于 2012-08-22T08:59:34.760 に答える
4

を使用することもできますTsungが、これは私が行うことです。適切HTTP Clientな likeを使用するcurlibrowse、別のマシンから実行する、大量にスレッド化されたテスターを作成します。そして、私が望むものに応じてテストします。

編集


ここで、erlang ライブラリに ibrowse ライブラリを配置し、再コンパイルして、コード パスにその ebin を含めます。
%% Ibrowse が確実に開始されるようにするには
ensure_ibrowse()-> case whereis(ibrowse) の 未定義 -> ibrowse:start(); is_pid(Any)-> ok の場合 終わり。
%% get リクエストを行うには
do_get(リンク)-> ibrowse:send_req(Link,[],get) を試す {OK,_,_,結果} -> %% 結果は JSON になる可能性があります。 %% mochijson2:decode(結果) その他 -> {エラー,その他} キャッチ E1:E2 -> {例外,{E1,E2}} 終わり。
%% 応答をファイルに保存するには
save_to_file(リンク)-> ibrowse:send_req(Link,[],get,[],[{save_response_to_file,true}]) を試す {ok,_,_,{file,FilePath}} -> %% ファイルに対して何でもします。 %% ------------------------------------------------ ------- %% like {ok,FileHandle} = file:open(FilePath,[read]) %% ------------------------------------------------ ----- %% OR {ok,Contents} = file:read_file(ファイルパス) %% ------------------------------------------------ ------- %% または、応答が .zip ファイルの場合 %% {ok,FileList} = zip:unzip(ファイルパス), %% [begin process_file_contents(element(2,file:read_file(F))) 終了 || F <- ファイルリスト] %% ------------------------------------------------ --------------------------------
その他 -> {エラー,その他} キャッチ E1:E2 -> {例外,{E1,E2}} 終わり。
%% 投稿するには %% 通常、mochijson を使用して erlang 用語をエンコードする場合 %% を JSON に変換すると、次のようになります:: %% JSON = lists:flatten(mochijson:encode({struct,[Term]}))
投稿(リンク、JSON) -> ibrowse:send_req(Link,[],post,JSON,[]) を試す {_,_,_,結果} -> mochijson2:decode(Result) を試す {struct,[{<<"key1">>,<<"value1">>},...]} ->
%% ここに進む JSONOther -> {エラー,JSONOther} キャッチ R:R2 -> {例外,{R:R2}} 終わり; Any -> erlang:throw({write_failed,Link,Any}) キャッチ E1:E2 -> {例外,{E1,E2}} 終わり。
%% put リクエストを行うには %% Post と同じですが、atom 'post' を 'put' に変更するだけです

%% リクエストにヘッダーを追加するには
投稿(リンク、JSON)-> ヘッダー = [{"Content-Type","application/json"}],
{_,_,_, Re​​sult} の ibrowse:send_req(Link,Headers,post,JSON,[]) を試す-> mochijson2:decode(Result) を試す {struct,[{<<"key1">>,<<"value1">>},...]} ->
%% ここに進む JSONOther -> {エラー,JSONOther} キャッチ R:R2 -> {例外,{R:R2}} 終わり; Any -> erlang:throw({write_failed,Link,Any}) キャッチ E1:E2 -> {例外,{E1,E2}} 終わり。
コード パスに ibrowse をインストールできない場合はお知らせください

于 2012-08-22T06:09:28.800 に答える