• 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>

  • 相关阅读:
    [C语言]变长函数参数和变长参数宏
    [转载]腾讯机智团队分享--AllReduce算法的前世今生
    (三)opencv_py之阈值处理
    (二)opencv_py之彩色空间转换
    neo4j 一些常用的CQL
    Neo4j (1)创建节点
    tensorflow实现siamese网络 (附代码)
    早停!? earlystopping for keras
    关于 ESIM 网络的 资料 集合
    聊天机器人资源合集:项目,语聊,论文,教程
  • 原文地址:https://www.cnblogs.com/pymi/p/9139577.html
Copyright © 2020-2023  润新知