1

Python で WebTest を使用し、Django でテスト クライアントを使用し、Ruby on Rails で機能または統合テストを使用して実行できるように、mochiweb アプリの高レベルのテストを実行したいと考えています。私はそれを行う方法についてあまりうるさいわけではありません。基本的には、HTTP リクエストを送信またはシミュレートし、結果に対してアサーションを行いたいだけです。

Req:respond()requests ハンドラーが自分自身を呼び出さずに tuple を返すように、コードをリファクタリングしました{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()私のリクエストハンドラーの中から。私が考えている別の解決策は、サードパーティの Web テスト ライブラリを使用することです。Erlang で書かれている必要はありません。Ruby や Python、あるいは Selenium の何かかもしれません。

では、mochiweb アプリの機能テストまたは統合テストを行うには、どのソリューションをお勧めしますか?

4

3 に答える 3

1

ほとんどの場合、テストをHTTP配管から切り離します。とにかく、通常、機能的な環境で行うのは正しいことです。

src / mochiweb_multipart.erlには、特定のユースケースにより関連性の高いeunitコードがいくつかあります。

于 2010-12-31T17:05:14.520 に答える
0

私は共通のテスト サーバーを使用し、テストには 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.
于 2011-01-01T07:53:15.133 に答える
0

呼び出しを行うために http クライアントを使用しないのはなぜですか? ibrowse を使用して、必要に応じて POST データを含め、Web マシン サーバーをシステム テストします。

于 2010-12-31T20:28:18.573 に答える