我一直在尝试通过将一些外部 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 是否根本不支持这一点,其次,是否有更好或更惯用的方法来做到这一点?