Tsung.xml中的嵌入式Erlang动态变量无法解析If表达式

时间:2013-11-22 15:05:06

标签: erlang tsung

我一直在尝试通过将一些外部Erlang代码放入我的Tsung配置文件(tsung.xml)并使用它设置一些动态变量来删除构建过程中的一些复杂问题,但发现一些表达式只是“不要”似乎工作正常。

当尝试使用If语句,案例甚至函数定义(乐趣或正常)时,Tsung都会抱怨“unexpected_char”消息(但没有提到可能的char),或者对于后者,Erlang会返回“语法” '[]'“解析错误之前的错误。

<setdynvars sourcetype="eval"
               code="fun({Pid,DynVars}) ->
                        {Var_Scale, ScaleUp} = {3, 100},
                        Random=random:uniform() * 100 * ScaleUp,
                        Compare=round(Var_Scale * ScaleUp),
                        if
                                 Random =< Compare ->
                                     Return = 1;
                                 true ->
                                     Return = 0
                        end,
                        Return.
                        ">
            <var name="someVariable" />

如果整个函数表达式只是if表达式,则会出现相同的结果:

<setdynvars sourcetype="eval"
               code="fun({Pid,DynVars}) ->
                        if
                            1 < 2 -> Return = 2;
                            true -> Return = 3
                        end.
                        ">
            <var name="anotherVariable" />
        </setdynvars>

对于内联或匿名函数

<setdynvars ...
  Compare=round(Var_Scale * ScaleUp),
  Fn = fun() -> a
  end.
">

导致上述解析错误。

我对Erlang和Tsung有点新意,所以也许我误解了这些命令是如何构建的,或者是tsung在ts_utils中的评估需要得到什么。它似乎使用标准的Erlang扫描,解析和eval方法,所以我认为它肯定支持分支操作和函数。

所以我的问题本身归结为:这个代码(语法上)是否正确并且Tsung根本不支持这个,其次,是否有更好或更正确的方法来做到这一点?

1 个答案:

答案 0 :(得分:3)

我认为将<>个字符嵌入到XML属性中并不满意。尝试输入&lt;&gt;。此外,与命名函数不同,fun需要匹配的end令牌:

<setdynvars sourcetype="eval"
               code="fun({Pid,DynVars}) -&gt;
                        if
                            1 &lt; 2 -&gt; Return = 2;
                            true -&gt; Return = 3
                        end
                     end.
                        ">
            <var name="anotherVariable" />
        </setdynvars>