loadRunner12 设置关联 获取服务端动态数据

来源:互联网 发布:矩阵分析与计算 pdf 编辑:程序博客网 时间:2024/05/18 15:28
文章部分内容参考于博客:http://www.blogjava.net/qileilove/archive/2013/05/22/399597.html
关联:服务器返回给客户端一些动态变化的值,客户端使用这些值去访问服务器的时候,不能把这些值写死在脚本里面,而应该存放在一个变量里面。

  在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。



使用步骤:
1.录制脚本,选择协议

2.脚本包含三个部分:
1)vuser_init 只执行一次,用于录制登陆等功能
2)Action 中间的具体逻辑
3)vuser_end 登出功能

3.设置关联
脚本录制完之后,会记录当次操作的数据记录,包括请求的url以及请求的数据和返回值等。当我们再次回放执行脚本时,所用到的数据仍然是第一次执行记录的脚本数据,很多请求数据都已经写死在脚本中了。例如我有一个请求,需要提交表单中的数据进入订单,我点击提交之后会先向订单表插入一条数据,此时会返回一个订单id,成功之后会再向订单详情里插入一条数据,该条数据会关联订单表返回的订单id。此时我们要重复回放脚本模拟多用户提交表单的话,脚本里记录的永远是第一次录制时的订单id,此时是无法形成多条订单的,所以我们需要动态的获取每次插入表单时后台服务器返回给我们的订单id,然后再插入订单详情中。
具体做法:
1)创建脚本File-new script & solution,选择协议,输入url,选择浏览器,

2)先按流程录制脚本,录制过程中可在不同场景选择不同的录制目标选择录制到init还是Action中

3)录制完之后需要点击停止会自动生成脚本,然后进行回放,检查录制的脚本是否成功。
4)点击“运行时设置Runtime Settings”弹出“运行时设置”窗口,勾选“扩展日志”下的“参数替换”和“服务器返回的数据”。


5)下面两个请求就是我点击提交表单按钮后发出的两个请求:
web_custom_request("sendOrderSend", 
        "URL=http://127.0.0.1:19002/mecv-manager/custservice/sendOrderSend", 
        "Method=POST", 
        "Resource=0", 
        "RecContentType=application/json", 
        "Referer=http://127.0.0.1:19002/mecv-manager/custservice/orderSend", 
        "Snapshot=t45.inf", 
        "Mode=HTML", 
        "EncType=application/json", 
        "BodyBinary={\"productType\":\"01\",\"custId\":\"9F7D7E8BFD6D11E5A364ECF4BBC07A10\",\"sendAddress\":\"Caffe Beans\",\"sendContact\":\"xiaoxiao\",\"sendTel\":\"18661628193\",\"sendCoordinatesXY\":\"120.468750,36.103391,0532,370212\",\"dal\":[{\"deliveryAddress\":\"\\xE9\\x9D\\x92\\xE5\\xB2\\x9B\\xE5\\xB8\\x82\\xE7\\xAC\\xAC\\xE5\\x85\\xAB\\xE4\\xBA\\xBA\\xE6\\xB0\\x91\\xE5\\x8C\\xBB\\xE9\\x99\\xA2\",\"contact\":\"dada\",\"tel\":\"18661628192\",\"coordinatesXY\":\"120.419066,36.159446,0532,370213\"}]"
        ",\"goodsDesc\":\"\\xE6\\xB4\\x97\\xE8\\xA1\\xA3\\xE6\\x9C\\xBA\",\"goodsAmount\":\"1\",\"servicesId\":\"\",\"payType\":\"02\",\"carriageStructure\":\"\",\"confCustId\":\"D5820BEDFFC711E5A364ECF4BBC07A10\",\"yclx\":\"1\",\"remarks\":\"\\xE6\\xB5\\x8B\\xE8\\xAF\\x95\"}", 
        LAST);

BodyBinary:提交的表单数据

下面这个请求是表单提交成功后重新发起另外一个请求,将订单详情插入详情表,value中就是从上一个请求获得的服务端返回的数据,里面包含一个orderId属性。这部分数据是每次请求之后都会发生变化的数据,所以不能在下面的脚本中写死,需要通过关联动态的获取服务器的返回值然后替换掉这部分写死的内容。
    web_submit_data("invokePost",
        "Action=http://127.0.0.1:19002/mecv-manager/custservice/invokePost",
        "Method=POST",
        "Referer=http://127.0.0.1:19002/mecv-manager/custservice/orderSend",
        "Snapshot=t46.inf",
        "Mode=HTML",
        ITEMDATA,
        "Name=json", "Value={\"body\":{\"appreContent\":\"\",\"carsStructure\":\"\",\"counts\":\"1\",\"deliveryAddress\":\"Caffe Beans\",\"deliveryX\":\"120.468750\",\"deliveryY\":\"36.103391\",\"distance\":\"9402\",\"fetchTime\":\"2016-07-02 09:30:00\",\"oType\":\"01\",\"orderDriverPrice\":\"1000\",\"orderId\":\"{orderId}\",\"orderTotalPrice\":\"{orderAmounts}\",\"orderType\":\"1\",\"packageId\":\"D5820BEDFFC711E5A364ECF4BBC07A10\",\"takeType\":\"01\",\"trade\":[{\"receiveAddress\":\"闈掑矝甯傜鍏汉姘戝尰闄\xA2\",\"receiveX\":\"120.419066\",\"receiveY\":\"36.159446\"}],\"volume\":\"4000\"},\"header\":{\"messageID\":\"201607020930490000000002\",\"pageEndIndex\":0,\"pageStartIndex\":0,\"region\":\"370212\",\"resCode\":0,\"sign\":\"4452d82b880baae8893d4992f8175200\",\"timeStamp\":\"20160702093049\",\"transactionType\":2008}}", ENDITEM,
        LAST);

如何替换:
在第一个请求前面右键--》insert-->new setp添加关联函数 web_reg_save_param,该函数自动获取二次回访时程序中动态发生变化的部分,我们可以从变化的部分中通过定义边界截取我们想要的内容

在“添加步骤”的“查找函数”中输入“web_reg_save_param”,点击“确定”按钮。
在“将数据保存到参数中”,填写“参数名”,不写“左边界”和“右边界”,因为不知道左右边界,勾选“实例”、“搜索范围”、“忽略重定向”。点击确定按钮。同时如果不确定发生不同的地方是什么样可以将搜索范围选择All.

重新执行回放,在回放日志中查找orderId:

所有的动态变化的数据都会作为每次运行的不同之处显示在orderId的值内,假设我们可以将左边界定为:
"LB=\"obj\":", 这样系统就会自动为我们过滤出obj的值,将上面截图中obj后面的整个对象作为orderId的值(orderId在上面截图中json字符串的后面,本例没有截出来,就拿‘obj’作为例子,如果相处orderId的值就将左边界定义为"LB=\"orderId\":",).
找到左边界之后再次修改上面的关联函数,添加左边界:
    web_reg_save_param("orderId",//次处的名字只是作为一个变量,名字随便取,接受所有二次回放时数据上发生不同的地方
        "LB=\"obj\":",
        "RB=",
        "Ord=1",
        "Search=Body",
        "IgnoreRedirections=Yes",
        LAST);

然后将第二个请求中的 "Name=json"的value改为value="{orderId}",这样就会将服务器返回的值整体替换掉第二个函数中的value值,实现我们在第二次请求服务器时传入动态数据的目的。
改完之后两次请求的完整脚本:
web_reg_save_param("orderId",
        "LB=\"obj\":",
        "RB=",
        "Ord=1",
        "Search=Body",
        "IgnoreRedirections=Yes",
        LAST);

    web_custom_request("sendOrderSend", 
        "URL=http://127.0.0.1:19002/mecv-manager/custservice/sendOrderSend", 
        "Method=POST", 
        "Resource=0", 
        "RecContentType=application/json", 
        "Referer=http://127.0.0.1:19002/mecv-manager/custservice/orderSend", 
        "Snapshot=t45.inf", 
        "Mode=HTML", 
        "EncType=application/json", 
        "BodyBinary={\"productType\":\"01\",\"custId\":\"9F7D7E8BFD6D11E5A364ECF4BBC07A10\",\"sendAddress\":\"Caffe Beans\",\"sendContact\":\"xiaoxiao\",\"sendTel\":\"18661628193\",\"sendCoordinatesXY\":\"120.468750,36.103391,0532,370212\",\"dal\":[{\"deliveryAddress\":\"\\xE9\\x9D\\x92\\xE5\\xB2\\x9B\\xE5\\xB8\\x82\\xE7\\xAC\\xAC\\xE5\\x85\\xAB\\xE4\\xBA\\xBA\\xE6\\xB0\\x91\\xE5\\x8C\\xBB\\xE9\\x99\\xA2\",\"contact\":\"dada\",\"tel\":\"18661628192\",\"coordinatesXY\":\"120.419066,36.159446,0532,370213\"}]"
        ",\"goodsDesc\":\"\\xE6\\xB4\\x97\\xE8\\xA1\\xA3\\xE6\\x9C\\xBA\",\"goodsAmount\":\"1\",\"servicesId\":\"\",\"payType\":\"02\",\"carriageStructure\":\"\",\"confCustId\":\"D5820BEDFFC711E5A364ECF4BBC07A10\",\"yclx\":\"1\",\"remarks\":\"\\xE6\\xB5\\x8B\\xE8\\xAF\\x95\"}", 
        LAST);

    web_submit_data("invokePost",
        "Action=http://123.56.13.75:19002/mecv-manager/custservice/invokePost",
        "Method=POST",
        "Referer=http://123.56.13.75:19002/mecv-manager/custservice/orderSend",
        "Snapshot=t46.inf",
        "Mode=HTML",
        ITEMDATA,
        "Name=json", "Value={orderId}", ENDITEM,
        LAST);

0 0
原创粉丝点击