关联小结

关联:从响应消息中取出我们需要的字段值。
每一次执行时都会变动的值,就有可能需要做关联。

一.关联操作的条件
客户端需要从服务端返回的数据中获取部分数据,并将这部分数据处理后作为自己下一次请求的一部分发出。

二.如何找出要关联的数据呢
序列号和随机数一般需要关联。
常见的需要关联的情景:
1.登录操作
2.先查后修改,先查后删除
3.并发控制:防止两个用户同时修改或同时删除一条记录

订单号和Token。
下单页面生成的订单号,需要在下单页面的响应消息里抓取,在放到收银台页面的相关参数中,才能够完成一个完整的支付。

还有一类必填参数但是会被我们忽略的叫做Token。
原文:http://zhidao.baidu.com/link?url=8VKmfz4OA6vUKWsDdaasG8Fwi71TMQ15eLUVBVSOIYtNu4NEDZxL4H2sFaDf0cw7VJA8-a6g2p_HLh8TGJXii9LWV15_T8l4V21rk2JtxLW
Token是一个用户自定义的任意字符串。在成功提交了开发者自定义的这个字符串之后,Token的值会保存到微信后台。只有服务器和微信后台知道这个字符串,也就是说只有微信后台和公众账号服务器知道这个字符串。于是Token就成了这两台服务器之间的密钥,它可以让公众账号服务器确认请求是来自微信后台还是恶意的第三方。

我觉得这个蛮好理解,token就是防恶意攻击,客户机和服务器之间的秘钥。

和Token类似的Session ID

举例:
响应消息
<body>
			<tr>
			  <th>序号</th>
				<th>手机号</th>
				<th>验证码</th>
				<th>描述</th>
				<th>有效时间</th>
				<th>随机数(单号)</th>
			</tr>
				<td>1</td>
				<td>11000020000</td>
				<td>592976</td>
				<td>余额支付</td>
				<td>2014-08-09 14:33:31</td>
				<td>191590175</td>

手动抓关联
  web_set_max_html_param_len("1024");
	web_reg_save_param("yzmsj",
		"LB=<td>",
		"RB=</td>",
		"Ord=2",
		"Search=Body",
		LAST);

	web_submit_data("online-user!queryMobileValidateCode.action", 
		"Action=http://192.168.157.199:8090/epp-test/cm/onlineuser/online-user!queryMobileValidateCode.action", 
		"Method=POST", 
		"RecContentType=text/html", 
		"Referer=http://192.168.157.199:8090/epp-test/cm/onlineuser/online-user!inputMobileValidateCode.action", 
		"Snapshot=t19.inf", 
		"Mode=HTML", 
		ITEMDATA, 
		"Name=struts.token.name", "Value=struts.token", ENDITEM, 
		"Name=struts.token", "Value=42A7OLO7K5HIS745JJDR52C8M7XY5K2O", ENDITEM, 
		"Name=id", "Value=", ENDITEM, 
		"Name=dataSourceFlag", "Value=PRE环境", ENDITEM, 
		"Name=mobileNum", "Value=11000020000", ENDITEM, 
		LAST);

	web_reg_save_param_ex(
		"ParamName=yzm",
		"LB=<td>",
		"RB=</td>",
		"Ordinal=4",
		SEARCH_FILTERS,
[color=red]		"RequestUrl=*online-user!queryMobileValidateCode.action*",[/color]
		LAST);

		lr_output_message("--------------------yzmsj:%s",lr_eval_string("{yzmsj}"));
		lr_output_message("--------------------yzm:%s",lr_eval_string("{yzm}"));

运行日志:
Action.c(35): --------------------yzmsj:11000020000
Action.c(36): --------------------yzm:{yzm}}


1.多个相同边界的处理
在抓关联中加入 "Ord=2",可以定位到第几个。

2.去掉边界,抓取整个响应消息报错
使用web_set_max_html_param_len
报错翻译:没抓到能匹配的参数yzm,检查边界的正确性。整个响应消息的字节数**byte,使用web_set_max_html_param_len函数。
Error -26377: No match found for the requested parameter "yzm". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1516000 bytes, use web_set_max_html_param_len to increase the parameter size   [MsgId: MERR-26377]


3.跑场景时报错
200用户时,web_set_max_html_param_len (1024);没问题。
400用户时就报错。
400用户时,设置成web_set_max_html_param_len (20480)就OK了。
原文:http://blog.163.com/the_show_27@yeah/blog/static/10788729320122651647346/

4.位置错误报错
web_reg_save_param_ex()函数里有个RequestUrl=,以为带了地址函数就可以放任意位置,结果报错如下:
Error -27257: Pending web_reg_save_param/reg_find/create_html_param[_ex] request(s) detected and reset at the end of iteration number 1  	[MsgId: MERR-27257]

	web_reg_save_param_ex()SEARCH_FILTERS,
"RequestUrl=*online-user!queryMobileValidateCode.action*",

web_reg_save_param的位置一定要放在正确的请求消息前面,放在请求消息前面,放在请求消息前面。重要的事情说三遍。

5.八、转义字符总结
有一次抓关联的时候传递的参数怎么都报错,后来使用了
在做手动关联时,取边界值的时候,会经常用到转义字符,现将转义字符整理如下:
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表
\v 垂直制表
\\ 反斜杠
\? 问号字符
\' 单引号字符
\" 双引号字符
\0 空字符

猜你喜欢

转载自124358959.iteye.com/blog/2236345