0

tsungを使用して、websocket サーバーの負荷テストを行っています。私は と が初めてtsungですerlang

ユーザーとキーのリストを .csv ファイルにエクスポートしています。実行するために、csv ファイルを次のように縮小しました。

1;2

ファイルの最後に空行がありません。

これは私のtsung設定のスニペットです(それ以外の場合は正常に動作します):

 <options>
    <option name="file_server" id="users" value="PATH_TO_MY_CSV/users.csv"/>
  </options>
   [...]

    <setdynvars sourcetype="erlang" callback="loadusers:user">
      <var name="connection_url" />
    </setdynvars>

   [...]
    <request subst="true">             
         <websocket type="connect" path="/?%%_connection_url%%"/>
    </request>

ts_file_server tsung モジュールloadusers.erlを使用する私の は次のとおりです。

-module(loadusers).
-export([user/1]).

user({Pid,DynVar})->
   {ok,Line} = ts_file_server:get_next_line(),
   [Username, Passwd] = string:tokens(Line,";"),
   "username=" ++ Username ++"&password=" ++ Passwd.

erlang のエラー スタックは次のとおりです。

** State machine <0.90.0> terminating 
** Last message in was {timeout,#Ref<0.0.0.414>,end_thinktime}
** When State == think
**      Data  == {state_rcv,none,
                     {{0,0,0,0},0},
                     undefined,0,10000,"192.168.59.103",443,ts_tcp,
                     {proto_opts,negociate,"/http-bind/","/chat","binary",10,
                         600000,infinity,32768,32768,undefined,undefined,[]},
                     true,1,undefined,true,undefined,
                     {1431,872144,388666},
                     6,6,false,undefined,0,[],<<>>,
                     {websocket_session,undefined,undefined},
                     0,2,524288,524288,
                     [{tsung_userid,2}],
                     ts_websocket,[],undefined,none}
** Reason for termination = 
** {{badarg,[{dict,fetch,
                   [default,
                    {dict,1,16,16,8,80,48,
                          {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
                          {{[],[],[],
                            [[users|{file,{<<"1;2">>},1,-1}]],
                            [],[],[],[],[],[],[],[],[],[],[],[]}}}],
                   [{file,"dict.erl"},{line,130}]},
             {ts_file_server,handle_call,3,
                             [{file,"src/tsung_controller/ts_file_server.erl"},
                              {line,159}]},
             {gen_server,try_handle_call,4,
                         [{file,"gen_server.erl"},{line,607}]},
             {gen_server,handle_msg,5,[{file,"gen_server.erl"},{line,639}]},
             {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,237}]}]},
    {gen_server,call,[{global,ts_file_server},{get_next_line,default}]}}

tsung configdynvarsから直接プルできることはわかっていますが、後でデータを動的に操作する必要があるため、スクリプトでそれを行う必要があります。重要: 同じ csv ファイルの読み取りは正常に機能するため、スクリプトに問題があるようです。

誰かがここでerlangが何について不平を言っているのか説明できますか?

4

1 に答える 1

0

エラーメッセージは、それdict:fetch(default, SomeDict)が呼び出されてbadarg例外がスローされたことを示しています。通常、これはキー(defaultあなたの場合)が存在しない場合に発生します。

問題は、設定した Tsungid="users"構成で、ファイル ID が に設定されることusersです。ただしts_file_server:get_next_line/0、ファイル ID はdefault.

config から削除するかid="users"、Erlang 部分を usets_file_server:get_next_line/1に変更して、config ファイルで使用したファイル ID を渡します。

于 2015-05-17T15:48:08.613 に答える