我一直在尝试通过将一些外部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根本不支持这个,其次,是否有更好或更正确的方法来做到这一点?
答案 0 :(得分:3)
我认为将<
和>
个字符嵌入到XML属性中并不满意。尝试输入<
和>
。此外,与命名函数不同,fun
需要匹配的end
令牌:
<setdynvars sourcetype="eval"
code="fun({Pid,DynVars}) ->
if
1 < 2 -> Return = 2;
true -> Return = 3
end
end.
">
<var name="anotherVariable" />
</setdynvars>