1

我一直在尝试通过将一些外部 Erlang 代码带入我的 Tsung 配置文件 (tsung.xml) 并使用它设置一些动态变量来消除构建过程中的一些复杂性,但发现一些表达式似乎并没有好好工作。

当尝试使用 If 语句、案例甚至函数定义(有趣或正常)时,Tsung 会抱怨“unexpected_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 中的 eval 需要提供什么。它似乎使用标准的 Erlang 扫描、解析和评估方法,所以我想它肯定支持分支操作和函数。

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

4

1 回答 1

3

我猜它对嵌入在 XML 属性中的字符<不满意。>尝试将它们输入为&lt;&gt;。此外,与命名函数不同,afun需要匹配的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>
于 2013-11-22T18:10:52.873 回答