背景:录制预约流程的脚本,但是脚本中有一个token,是动态的值。每一次进行预约,必须token正确,才能预约成功。类似LR示例网站中进行登录操作中需要的sessionid。
过程:由于之前在湖南版本的项目中遇到过这个问题,因此此次早有准备,知道必须对token的值进行关联。而且上海版本是复用的湖南版本的代码,因此决定复用之前湖南版本的关联函数。如下:
web_reg_save_param_ex(
"ParamName=TokenNum",
"LB=<input type=\"hidden\" name=\"token\" value=\"",
"RB=\" />",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/submitOrder.action*",
LAST);
在回放脚本的过程中,发现脚本报错了,提示检查左右边界是否正确。于是找到token第一次出现的地方,发现token是在web_submit_data();第一次出现,因此明确,token肯定是放置在web_submit_data();之前。然后在服务器返回值中,找到了token,如下:
<input type="hidden" name="token" value="1bf770fb-de49-4b65-8734-9400e077da6b" />
对比上面缩写的检查点,发现并没有写错。于是怀疑是不是左右边界不对,于是继续各种找,通过在网站中F12查找,找到网站中如下显示token:
<input type="hidden" value="6c317bd2-abec-4260-aaee-1e61188f2644" name="token">
于是修改关联函数,重新回放脚本,发现还是报错。
到这里的时候,非常的困惑。和湖南版本几乎一样,整个预约流程传递的数据也一样,不知道为什么就是在关联token这里出错了。其中各种尝试,各种出错。然后今天决定重新录一次脚本,因为脚本已经被我修改得面目全非了。录了之后,也是各种找token在服务器返回值出现的地方。在点中的时候,无意中发现可以通过在服务器返回值中直接关联,于是就尝试了一下,如下操作:(选中需要关联的内容,然后创建关联,LR就会自动创建)
LR创建的关联如下:
web_reg_save_param_ex(
"ParamName=CorrelationParameter_token",
"LB= value=\"",
"RB=\" ",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/submitOrder.action*",
LAST);
LR自动创建之后,点了回放,回放成功了,而且网站中也有了预约的订单。但是打开的扩展日志中却发现,token的值并不是正确的。意识到可能LR写的边界值能够符合的范围太多了,于是决定多写一点边界值,如下:
web_reg_save_param_ex(
"ParamName=CorrelationParameter_token",
"LB=name=\"token\" value=\"",
"RB=\" ",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*/submitOrder.action*",
LAST);
然后回放回放回放,回放了多次,发现成功了,而且回访日志中token取值是正确的。如下:
token=2b6e69be-35d6-4167-a071-3b6179351933
而且网站中也有了实际预约的订单了,真的非常高兴,终于解决了!
总结:1.其实我现在还是不知道问题出在了那里。Token的左右边界其实是我第一次在服务器返回值中找到的那样。但是不知道为什么不成功。对比第一次的和后面成功的关联函数,我只是边界值写多了一点而已。
2.所以呢,关联函数要注意的就是就算认为找准了边界值,也可以尝试边界值写长或者写短一点,各种尝试。
3.还有就是关联函数的位置也很重要,一定要放对位置。
后续:今天又录制了一整个预约流程的脚本,包括预约和退号。按照昨天录制的预约流程的脚本,一样设置的关联,结果回放又报错了。Token关联又失败。这次真是奇了怪了,一样的脚本,只是后面多了一些业务流程,怎么会错呢?
于是我决定把昨天上半部分的脚本(预约)+今天录制的后半部分脚本(退号)放到一个新的脚本中,看是否能够成功。结果显示,还是报错。于是决定一个一个业务进行排除。首先把昨天成功了的预约脚本中的登录操作,放到今天新的脚本中,结果发现报错了。于是就发现了,原来错误出现在登录的用户名和密码那块。因为录制出来的登录名和密码是加密显示,类似于MTg3NzQ5NzAwNjM=,我在脚本中,硬是改成了实际网站中登录的用户名,因此导致之后脚本中的token获取失败,因为根本就没有登录成功,也没有进行预约操作。回想起之前,在登录处设置了检查点检查用户名是否存在,一直检查不到,还很奇怪,也没有深究,看来问题是出现在这里。
于是新的问题出现了:这样的用户名和密码,我如何参数化呢?