关联:服务器返回给客户端一些动态变化的值,客户端用这些值去访问服务器,不能把这些值写死在脚本里面,而应该存放在一个变量里面。

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

 
使用步骤:
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 ); 
 
参考:https://blog.csdn.net/zzrshuiwuhen/article/details/51811071

loadRunner12 设置关联 获取服务端动态数据的更多相关文章

  1. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  2. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 客户端获取服务端自定义类数据 z

    客户端获取服务端自定义类数据 问题一:超时问题,在最后获取数据的时候突然提示服务超时,服务已断开 解决:配置文件添加: <bindings> <wsHttpBinding> & ...

  4. Diango之通过form表单向服务端发送数据

    通过form表单向服务端发送数据 表单元素 表单:form></form>表单用于向服务器传输数据.另外一种向服务端传输数据的方式为ajax. form属性: action:提交表单 ...

  5. java Socket Tcp示例三则(服务端处理数据、上传文件)

    示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...

  6. socket网络编程登录实现及多客户端和服务端的数据交互

    一.TCP/IP 客户端 package com.demo.entity; import java.io.Serializable; public class UserInfo implements ...

  7. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  8. jsp获取服务端的访问信息

    获取服务端访问信息 public static String getUrl(HttpServletRequest request){ String url = ""; if(req ...

  9. JAVA Socket获取服务端信息

    1.Socket.getInetAddress(),获取服务端地址. 2.Socket.getPort(),获取服务端端口.

随机推荐

  1. 如何理解 jmeter 的线程数与并发数之间的关系

    https://blog.csdn.net/weixin_39955351/article/details/110548162 多个线程组的并发是如何计算的?

  2. Windows下升级Python3.7.7后(原Python3.6.2版本)如何切换Python版本

    笔者:风起怨江南 出处:https://www.cnblogs.com/mengjinxiang 笔者原创,文章欢迎转载,如果喜欢请点赞+关注,谢谢! 问题:window系统下,如果升级了最新的Pyt ...

  3. 【原创】linux mint 17.3 kvm 安装windows7虚拟机

    一.安装windows7虚拟机 linux mint 17.3是一个不错的桌面发行版本,我下载了 linux mint 17.3 for xfce 桌面版本,运行速度没得说,而且安装设置都挺简单,非常 ...

  4. Java安全之 ClassLoader类加载器

    Java安全之 ClassLoader类加载器 0x00 前言 前面这里抛出一个问题,Java到底是什么类型的编程语言?是编译型?还是解释型?在这个问题是其实一直都都有疑惑,如果说是解释型语言的话,那 ...

  5. HTML的一些技巧

    清除form表单 this.$refs.formName.resetFields() 验证表单 this.$refs.createForm.validate((valid) => {}) 当im ...

  6. HashMap扩容和ConcurrentHashMap

    HashMap 存储结构 HashMap是数组+链表+红黑树(1.8)实现的. (1)Node[] table,即哈希桶数组.Node是内部类,实现了Map.Entry接口,本质是键值对. stati ...

  7. 实验1:SDN拓扑实践

    作业链接:实验1:SDN拓扑实践 一.实验目的 能够使用源码安装Mininet: 能够使用Mininet的可视化工具生成拓扑: 能够使用Mininet的命令行生成特定拓扑: 能够使用Mininet交互 ...

  8. maven指令安装jar包到本地仓库

    在项目配置过程中,偶尔会遇到jar包下载不来的情况,而同事又有相应的jar包,那么就可以通过maven安装指令直接将jar包安装到自己的本地仓库了. 安装指令: mvn install:install ...

  9. HttpServletRequest 入门

    1. request对象和response对象的原理 request和response对象是由服务器创建的.我们来使用它们 request对象是来获取请求消息,response对象是来设置响应消息 2 ...

  10. 项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)

    需求   在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习.   工具和源码下载地址   本篇文章的应用包和源码包可在 ...