07 tsung 参数化

Posted pymi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07 tsung 参数化相关的知识,希望对你有一定的参考价值。

很多时候,我们希望客户端发送的请求带有不同的参数,或者同样的请求带有不同的消息内容,这样能更加真实的模拟实际的使用场景。Tsung的动态替换能很好的帮助我们完成这样的测试。

1、Tsung中最常用的方式是将动态产生的内容保存在一个变量中,后续需要用到的地方引用这个变量完成动态替换。例如:

<setdynvars sourcetype="random_number" start="3" end="100">

    <var name="id" />

</setdynvars>

<request subst="true">

    <http url="/push?id=%%_id%%" version="1.1" method="POST" />

</request>

setdynvars元素及相关属性指定动态内容产生的方式,子元素var指定变量的名称,变量用于存储产生的动态内容,供后续使用替换。在request中使用这个变量完成动态替换,注意使用变量的方式是:下划线加变量名,并且包含在一对%%中。另外,request必须指定为需要进行动态替换(即subst="true"),否则不会进行动态替换。

上面的例子中在3到100中随机产生一个数字,并保存在变量id中,请求URL的参数中使用这个变量达到每次请求带有随机的参数。

实践:

<session name="http-example" probability="100" type="ts_http">

<!-- full url with server name, this overrides the "server" config value -->

<setdynvars  sourcetype="random_number" start="1" end="100">

<var name="id" />

</setdynvars>

<for from="1" to="10" var="i">

<transaction name="drmTest">

<request subst="true">

<match do="continue" when="match">22222</match>

<http url=\'http://192.168.38.46/post/request.php?username=%%_id%%&amp;name=1&amp;pwd=1&amp;email=1&amp;submit=submit\' met

hod="GET" version="1.1" ></http>

</request>

</transaction>

</for>

</session>

结果每每10个数都相同,现在调整for循环位置!

 

每次取的值都不一样;

2、除了产生随机的数字,还可以产生随机的字符串,或者自己编写函数产生随机的内容,甚至从文件中获取。随机产生长度为10的字符串:

<setdynvars sourcetype="random_string" length="10">

    <var name="param" />

</setdynvars>

 

 

3、从函数中获取随机内容:

<setdynvars sourcetype="erlang" callback="ts_user_server:get_unique_id">

    <var name="uid" />

</setdynvars>

唯一id,根据session来的,一次session产生一个uid,所有不管for在什么位置,for多少次,uid就会重复多少次;

4、从文件中获取:

<options>

    <option name="file_server" id="userdb" value="./user.csv" />

</options>

<setdynvars sourcetype="file" fileid="userd" delimiter=";">

    <var name="user" />

    <var name="passwd" />

</setdynvars>

<request subst="true">

    <http url="login?user=%%_user%%&amp;passwd=%%_passwd%%"

          version="1.1"

          method="GET"

    >

</request>

 

=====以下为user.csv文本的内容=====

Curry;123456;

Park;123;

Paul;111;

 

 

5、除了上面所说的方式,我们还可以将服务器响应的信息保存下来,在后续的请求中完成动态替换。例如:

<request>

    <dyn_variable name="date" header="date" />

    <http url="/test" method="GET" version="1.1" />

</request>

<request subst="true">

    <http url="/home/?date=%%_date%%" method="GET" version="1.1" />

</request>

在第一个请求中,从服务器响应信息的http头部中取出date对应的内容,保存在名为date的变量中,在下一个请求的参数中完成动态替换。

我们还可以使用正则表达式,XPATH,JSONPATH对响应消息的内容进行匹配获取我们所需要的数据。

<request>

    <dyn_variable name="mytitlevar" re=&lt;title&gt;(.*)&lt;/title&gt;"/>

    <http url="/testtsung.html" method="GET" version="1.0" />

</request>

 

<request>

    <dyn_variable name="title" xpath="/html/head/title/text()" />

    <http url="/testtsung.html" method="GET" version="1.0" />

</request>

 

<request>

    <dyn_variable name="title" jsonpath="field.array[3].value" />

    <http url="/testtsung.html" method="GET" version="1.0" />

</request>

以上是关于07 tsung 参数化的主要内容,如果未能解决你的问题,请参考以下文章

迭代的参数化查询

如何参数化 Pytest 夹具

使用 JDBC 的参数化查询

使用参数化查询时,TVF 慢得多

R RODBCext 和参数化 IN 语句?

参数化查询如何帮助防止 SQL 注入?