получение {badarith,[{erlang,'+',[error,0],[]} при выполнении арифметической операции в TSUNG с использованием фрагмента Erlang

Я написал арифметический фрагмент, используя функцию TSUNG-Erlang, но не смог успешно его выполнить; получение следующей ошибки в журнале моего контроллера TSUNG,

Фрагмент кода TSUNG-Erlang,

<setdynvars sourcetype="file" fileid="NBILM_testUsers" delimiter=";" order="iter">
<var name="minnum"/>
<var name="maxnum"/>
</setdynvars>



          <setdynvars sourcetype="eval"
                code='fun({Pid,DynVars})->
                       {ok,Maxfound}=ts_dynvars:lookup(maxnum,DynVars),
                       Maxstr =   lists:flatten(io_lib:format("~p",[Maxfound])),
                       {MAX, _} = string:to_integer(Maxstr),
                       {ok,Minfound}=ts_dynvars:lookup(minnum,DynVars),
                       Minstr =   lists:flatten(io_lib:format("~p",[Minfound])),
                       {MIN, _} = string:to_integer(Minstr),
                       {ok,Countern} = ts_dynvars:lookup(counter,DynVars,999),
                       Counternstr =   lists:flatten(io_lib:format("~p",[Countern])),
                       {Counternum, _} = string:to_integer(Counternstr),
                       Mnum1 = MAX + Counternum rem ( 2 - 1 ),
                       Mnum1 end.
                '>
          <var name="mnum" />
        </setdynvars>

Ошибочные события журнала от контроллера TSUNG,

   =INFO REPORT==== 5-May-2017::11:42:40 ===
           ts_client:(5:<0.134.0>) Stop in state think, reason= {badarith,
                                                                 [{erlang,
                                                                   '+',
                                                                   [error,0],
                                                                   []},
                                                                  {erl_eval,
                                                                   do_apply,6,
                                                                   [{file,
                                                                     "erl_eval.erl"},
                                                                    {line,
                                                                     669}]},
                                                                  {erl_eval,
                                                                   expr,5,
                                                                   [{file,
                                                                     "erl_eval.erl"},
                                                                    {line,
                                                                     438}]},
                                                                  {erl_eval,
                                                                   exprs,5,
                                                                   [{file,
                                                                     "erl_eval.erl"},
                                                                    {line,
                                                                     122}]},
                                                                  {ts_client,
                                                                   handle_next_action,
                                                                   1,
                                                                   [{file,
                                                                     "src/tsung/ts_client.erl"},
                                                                    {line,
                                                                     459}]},
                                                                  {gen_fsm,
                                                                   handle_msg,
                                                                   7,
                                                                   [{file,
                                                                     "gen_fsm.erl"},
                                                                    {line,
                                                                     518}]},
                                                                  {proc_lib,
                                                                   init_p_do_apply,
                                                                   3,
                                                                   [{file,
                                                                     "proc_lib.erl"},
                                                                    {line,
                                                                     239}]}]}


    =ERROR REPORT==== 5-May-2017::11:42:40 ===
** State machine <0.134.0> terminating
** Last message in was {timeout,#Ref<0.0.8.22>,end_thinktime}
** When State == think
**      Data  == {state_rcv,none,
                     {{0,0,0,0},0},
                     undefined,0,10000,"xyz",80,ts_tcp,
                     {proto_opts,negociate,"/http-bind/",false,"/chat",
                         "binary",10,3,600000,infinity,infinity,32768,32768,
                         undefined,undefined,[],false,true},
                     false,1,undefined,true,undefined,
                     {1493,964755,255814},
                     18,18,false,undefined,0,[],<<>>,
                     {http,0,0,-1,
                         {none,none},
                         false,false,
                         {false,false},
                         [],"tsung",[]},
                     0,1,524288,524288,
                     [{tsung_userid,1}],
                     ts_http,[],undefined,full}


Reason for termination =
{badarith,[{erlang,'+',[error,0],[]},
              {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,669}]},
              {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,438}]},
              {erl_eval,exprs,5,[{file,"erl_eval.erl"},{line,122}]},
              {ts_client,handle_next_action,1,
                         [{file,"src/tsung/ts_client.erl"},{line,459}]},
              {gen_fsm,handle_msg,7,[{file,"gen_fsm.erl"},{line,518}]},
              {proc_lib,init_p_do_apply,3,
                        [{file,"proc_lib.erl"},{line,239}]}]}

Было бы очень полезно, если бы кто-то мог указать, что я делаю неправильно.


person Ritesh Sharma    schedule 05.05.2017    source источник
comment
MAX равно error, а не целому числу. Является ли Maxstr строкой, начинающейся с целого числа?   -  person Dogbert    schedule 05.05.2017


Ответы (1)


В сообщении говорится, что в строке Mnum1 = MAX + Counternum rem ( 2 - 1 ), вы пытаетесь сложить error с 0 (кстати, Counternum rem ( 2 - 1 ) всегда равно 0, поэтому здесь должна быть ошибка).

Max является результатом {MAX, _} = string:to_integer(Maxstr),, он равен ошибке, если Maxstr не является строкой, начинающейся с целого числа:

  • "123" вернется {123,[]}
  • "123 ab" вернется {123," ab"}
  • "a123" вернется {error,no_integer}
  • an_atom вернется {error,not_a_list}

Для дальнейшей отладки проверьте значение Maxfound и Maxstr.

вы также можете сократить свой код, используя функцию io:fread/2 который будет напрямую возвращать целое число.

person Pascal    schedule 05.05.2017
comment
Согласованный !! по ошибке я поставил арифметическое выражение, которое я использовал для отладки, поэтому фактическое выражение равно Mnum1 = Min + ((Counternum rem (Max-Min+1))), я попытался выполнить шаги отладки, написав переменные значения, и это как показано ниже - person Ritesh Sharma; 05.05.2017