直接上代码吧,定义名称为event_time,目标是只取到秒 ,不用毫秒;如下:
48 <setdynvars sourcetype="eval" code="fun({Pid,DynVars})->
49 {A,B,C} = os:timestamp(),
50 A*1000000+B end." >
51 <var name="event_time"/>
52 </setdynvars>
1、Tsung版本:
1.6
2、setdynvars元素的相关使用,见installpath/share/tsung/tsung-1.0.dtd:
sourcetype (random_string | urandom_string | random_number |
file | erlang | eval| jsonpath | value | server)从tsung usermanual来看,引入Erlang代码需要用到的sourcetype的属性为erlang或者eval,其中,当sourcetype的值为erlang时,意味着引入的编译好的函数,当值为eval时,是在tsung脚本里编写代码。我们今天重点讲解的是,当sourcetype="eval"时,如何在Tsung脚本里编写代码,看下面这段代码:
<setdynvars sourcetype="eval" code='fun({Pid,DynVars})-> Val="198", list_to_integer(Val) end.'> <var name="total_length_login_stream"/> </setdynvars>
首先,解释一下,这段代码的含义:
sourcetype="eval"意思是参数的值的来源,这里是脚本里的erlang代码处理的结果,code是指erlang代码,var是指定义一变量,name为变量名,在接下来的脚本里,可以直接利用%%_variablename%%这个mark-up来取代要用这个参数值的地方。
其次,来看一下code=后面的这段内容:
对比一下tsungusermanual里的代码:
<setdynvars sourcetype="eval" code="fun({Pid,DynVars})-> {ok,Val}=ts_dynvars:lookup(md5data,DynVars), ts_digest:md5hex(Val) end."> <var name="md5sum" /> </setdynvars>
大家可以看到,在xml里的元素属性值是以双引号括起来的,但是,我的代码里最外层却用了单引号,这是因为代码里,有双引号,防止在读取时匹配出现问题,而erlang代码里,单引号和双引号在定义变量里又有特殊含义, 所以,只能将最外部的双引号改为单引号。而其它的格式大体相同,其中,fun({Pid,DynVars})->..... end.定义了一个匿名函数,
其中,Pid和Dynvars代表的含义是:
where Pid is the Erlang process id of the current virtual user and DynData the list of all Dynamic variables ,Pid是当前虚拟用户的Erlang进程的id,也就是说,是默认的不用特殊处理,
DynVars是脚本里所有的动态变量的列表。tsungusermanual里这段代码,因为要再次处理md5data这个动态变量,所以,利用了{ok,Val}=ts_dynvars:lookup(md5data,DynVars)这段代码,这段代码执行以后,就将md5data的值赋给了变量Val,接下来的操作就是处理Val,最后将结果赋给Tsung脚本的变量md5sum。
没有评论:
发表评论