LR脚本开发之参数化之关联

1.1 关联
1.1.1 什么是关联
所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器发送的、动态的、每次都不一样的数据。在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。其实关联也属于一种特殊的参数化,只是与一般的参数化有些不同。一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值。

例如:我们去坐飞机,登机之前要检票(机票信息相对固定),通过可以登机。过了几天拿着同一机票再去登机,自然不能登机(机票信息已过期)。那怎样才能顺利登机?可以伪造机票信息…这里我们通过收集别人返回的信息(机票)伪造机票,从而满足登机的验证策略。在脚本中也有类似的情况

1.1.2 为什么要关联
LR录制的脚本只是忠实记录了所有从客户端发送到服务器端的数据,并在脚本回放的时候按照录制的顺序将录制下来的数据重新发送出去。但是,实际上许多的系统都采用SessionID或SeqID等方法来标识不同的任务和数据包,应用在每次运行时发送的数据并不完全相同。所以,为了让脚本能够支持测试的需求,就必然要用某种机制对脚本的数据进行出来了。总之一句话:通过关联可以在测试中保持动态值。

当录制脚本时,VuGen会拦截client端(浏览器)与server端(网站服务器)之间的对话,并且通通记录下来,产生脚本。在VuGen的Recording Log中,您可以找到浏览器与服务器之间所有的对话,包含通讯内容、日期、时间、浏览器的请求、服务器的响应内容等等。脚本和Recording Log最大的差别在于,脚本只记录了client端要对server端所说的话,而Recording Log则是完整纪录二者的对话。

201608261472142762119758.jpg LR脚本开发之参数化之关联 Tester 第1张

当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就是当初的浏览器,然后把网站内容传送给VuGen。
所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说的一样,是写死的(hard-coded)。这样的作法在遇到有些比较聪明的服务器时,还是会失效。这时就需要透过「关联(correlation)」的做法来让VuGen可以再次成功地骗过服务器。
举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。
下面的图示说明了这样的情形:
当录制脚本时,浏览器送出网页A的请求,服务器将网页A的内容传送给浏览器,并且夹带了一个ID=123的数据,当浏览器再送出网页B的情求时,这时就要用到ID=123的数据,服务器才会认为这是合法的请求,并且把网页B的内容送回给浏览器。
在执行脚本时会发生什么状况?浏览器再送出网页B的请求时,用的还是当初录制的ID=123的数据,而不是用服务器新给的ID=456,整个脚本的执行就会失败。
201608261472142763497261.jpg LR脚本开发之参数化之关联 Tester 第2张

要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它撷取下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部分,这样就可以成功骗过服务器,正确地完成整个交易了。
1.1.3 何时关联

  1. 登陆操作
  2. 业务需要(即后面的操作需要用到前面服务器返回的动态数据)
  1. 情况一
  2. 情况二
  3. 情况三
    1.1.4 如何关联
    1.1.4.1 关联的一般步骤
  1. 从服务器返回的数据中选取需要进行关联的数据,界定他的左边界和右边界
    举例:


    201608261472142763938685.jpg LR脚本开发之参数化之关联 Tester 第3张

    查看服务器返回信息发现:8a3c341d5252c1a8015252d205470001是需要进行关联的值,则开始设置这个值的左右边界,左边界:resultObject":" ;右边界:"
    注意:左边界和右边界要有独特性,能让系统直接定位到8a3c341d5252c1a8015252d205470001值,而不是定位到其他数值

  2. 将该数据存入脚本的一个参数中
  3. 将脚本中需要使用该数据的地方用参数来替换。
    Tip:对于web来说,一般会用一个hidden 的 field存放。所以可以在服务器返回的记录查找该字段值。
    1.1.4.2 手动关联
    1.1.4.2.1 手动关联原理
    手动关联是关联应用中的最有效手段,通过手动关联函数 web_reg_save_param()将想要的字符串保存到一个参数中。
    1.1.4.2.2 手动关联的注意事项
    web_reg_save_param函数一定要放在获取服务器返回值的请求前面,中间不能有其他的脚本,否则,将会获取不到服务器返回值,如示例所示。
    如要输出服务器返回值,也只能在请求的后面输出,不能放在请求的前面。

web_reg_save_param("TfFarmerDraftId",
"LB=farmerDraftId:"", "RB="", LAST ); ;

web_custom_request("tfFarmerDraftManager.getTfFarmerDraftById.dwr_2",
"URL=http://10.188.180.231/tlcr/dwr/call/plaincall/tfFarmerDraftManager.getTfFarmerDraftById.dwr",
"Method=POST",
"Resource=0",
"RecContentType=text/javascript",
"Referer=http://10.188.180.231/tlcr/tfFarmerDrafts.do?method=draftNormalFarmer&bsm=false",
"Snapshot=t175.inf",
"Mode=HTML",
"EncType=text/plain",
"Body=callCount=1\npage=/tlcr/tfFarmerDrafts.do?method=draftNormalFarmer&bsm=false\nhttpSessionId=\nscriptSessionId=529CFA712B612149367BF8EE3F9CB8A6615\nc0-scriptName=tfFarmerDraftManager\nc0-methodName=getTfFarmerDraftById\nc0-id=0\nc0-param0=string:8a3c34673ac05aad013ad87a93d00013\nbatchId=22\n",
LAST);

lr_error_message("TfFarmerDraftId: %s",lr_eval_string("{TfFarmerDraftId}"));
1.1.4.3 关联函数说明

1.1.5 FAQ

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 一:LoadRunner常见问题整理1.LR 脚本为空的解决方法:1.去掉ie设置中的第三方支持取消掉2.在系统属...
    0100阅读 3,864评论 0 11
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,507评论 6 13
  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,817评论 0 3
  • 一个五一,一场聚会,十多年前的同事,大部分已经离开公司多年,甚至有的已经离开深圳,但还是偶尔可以聚在一起,吃吃饭,...
    云沐妈妈阅读 215评论 0 0