51Testing软件测试论坛
标题:
录制时因为cookies引发的问题(此贴观点有误)
[打印本页]
作者:
kursk
时间:
2008-6-20 17:02
标题:
录制时因为cookies引发的问题(此贴观点有误)
今天在录制登录scripts发现一个有趣的小问题,发出来共享一下。小弟是新手,如果问题肤浅,请给予解答,不要嘲笑。
windows版本:XP
LR版本:9.0
系统B/S架构,浏览器IE7.0
我最开始使用url base scripts 模式录制,发现在登录时没有录制到常见的用户名和密码,scripts如下:
**********************************************************************************************
web_add_cookie("SGCC_LOGIN_NAME=0xee9c8f6531f6b3bc; DOMAIN=192.168.1.1");
web_add_cookie("SGCC_LOGIN_PWD=0x48dceefe3ecc25f7; DOMAIN=192.168.1.1");
web_add_cookie("JSESSIONID=88F1C3F9F51F934BC41E80A7ABE9F44B; DOMAIN=192.168.1.1");
.................................................................
.................................................................
web_submit_data("SessionUtil",
"Action=http://192.168.1.1:8088/sgcc/servlet/SessionUtil?parent_id=0",
"Method=POST",
"RecContentType=text/html",
"Referer=http://192.168.1.1:8088/sgcc/login.do;jsessionid=88F1C3F9F51F934BC41E80A7ABE9F44B",
"Snapshot=t20.inf",
"Mode=HTTP",
ITEMDATA,
"Name=node", "Value=0", ENDITEM,
LAST);
因为在录制登录或各种会产生post request包时,我都会使用insert comment来插入提示注释,所以这个函数位置是绝不会搞错的。
于是我发现,平常登录需要有的登录用户名和密码在这个函数里没有了!
我最开始认为是cookie造成,因为在我录制的这个登录页面上有一个"保存登录信息"的单选框,如果打勾,就会把用户名和密码保存到本地的cookie里,
但是因为有验证码,所以每次登录还是要输入验证码,点击按钮才能登录注意,不管是否这个单选框是否被打勾,都要求点击按钮登录。
我查询了使用cookie不用输入用户名和密码的实现原理,但是资料上都只是简单地说会查询本地的cookie,但是如何验证用户名和密码?客户端是把cookie里的用户名和密码发给服务端验证,还是返回服务器一个验证正确的值,都没有说清楚!
实践是检验真理的唯一标准,于是我使用httpwatch这个工具,看看当 "保存登录信息"在打勾和不打勾的两种情况下,IE向服务器发送了什么信息?
结果是:无论这个单选框是否打勾,IE都会向服务器提交longinuser 和password的值,在httpwatch里看得非常清楚。
那么为什么在scripts里没有用户名和密码呢?为了高清楚规律,我按下面4种情况进行了录制:
url base scripts html base scripts
保存登录信息情况下登陆 无 有
不保存登录信息下登陆 有 有
有:脚本里录制到用户名和密码
无:脚本里没有录制到用户名和密码
从这个表可以清楚看出在相同的条件下url base scripts 并不如 html base scripts录制的信息完整
这是怎么回事呢?请大家指教一下
--------------------------------------------------------------------------------------------------------------------------
(4楼更新)
**************************************************************************************************************************
此贴观点完全错误,大家不要再被我原来的错误理解误导了
最近学习JSP时研究用servlet处理cookie才了解,cookie的校验是在服务器端完成的,所以浏览器发密文或明文给服务器都可以,关键是服务器端接收到cookie后是如何处理。
现在看这贴,整篇几乎在胡说八道,希望大家给予谅解,原谅我当时的无知
[
本帖最后由 kursk 于 2009-2-20 11:11 编辑
]
作者:
kursk
时间:
2008-6-20 17:04
对于这个现象,我自己的想法是这样的:
LR的函数实际经过编译后转为 request ,但是这个转换过程中是有失真的。看看web_submit_data这个函数说明,其参数并没有包括http1.1协议的所有报头,因此转换过程中肯定还是有些问题
作者:
hmilyjch
时间:
2008-6-20 17:08
很有意思,我要试试~~~~~
作者:
kursk
时间:
2008-6-21 13:43
昨天的帖子内容有误,但是为了详细说明过程,我没有删除昨天的帖。
今天重新用url base scripts在保存和不保存密码的情况录制了scripts,发现都可以录制下提交用户名和密码的动作,因此我又重新研究了一下原因,基本认定还是由于cookie原因造成的。
但是为什么有时能录制到这个过程,有时不能我还是不清楚!希望知道的朋友指正。
LR录制时cookie的保存大致如下图。
[attach]42994[/attach]
因为在录制时,ie的COOKIE里放的是密文,而IE在rquest 的header里会对这个密文解密,然后发给server
而LR 的web_add_cookies在save参数时把密文保存了,而且在replay时把这个参数(密文)发送给server,结果被server拒了。
有时struct架构的web服务会用servlet 的getcookie()方法来获取request里的header cookie值来验证用户名和密码。这里我发现一个现象,
当IE 的cookie里保存有该用户名和密码时会造成录制有时不能recording 用户名和密码提交的request(具体原因我也不清楚
),而且很多情况的request 是通过cookie来验证的。
这就会造成一个问题,当record时,因为IE可以解密cookie,所以整个录制过程包括登录等等都没有报错。
而在replay时,因为vgen web_add_cookie()的参数是个密文,保存在run-time 时的临时空间里,而vuser就把这个密文参数写到了request的cookie里发给了server ,结果就报错了——replay时的request可以通过replay log清楚地看见。
这就是为什么有时候录制时没问题,而replay时报错的原因。
具体为什么LR有时能录制到用户名和密码提交的request,有时不能录制到,我也不太清楚,希望知道的朋友提个醒。
因为我测试的产品都是以struct 架构BS系统,其他架构的我不太清楚。
建议有相同情况的朋友在录制时先delete对应的cookies文件,强迫系统通过新输入的用户名和密码来验证,并且不要选择在本地保存信息(实际就是将信息保存到cookies),这样就可以保证录制的脚本不受cookie影响。
当然,也可以把cookies里的值修改成变量,然后给这个变量赋值就可以了。
[
本帖最后由 kursk 于 2008-6-21 14:03 编辑
]
作者:
zj101582
时间:
2008-6-21 15:25
标题:
回复 4# 的帖子
关注中.....
作者:
kursk
时间:
2008-6-21 21:20
不能只关注,还是要多提意见啊
作者:
wfbobby
时间:
2008-6-22 20:04
不错的帖子。我在一个免费论坛上试验随机自动回复帖子的脚本时也发现了这个问题。完全没记录用户名和密码。我使用论坛永久保存用户名密码时就不会录到用户名密码。如果改成不记录就有。感觉是读了cookies。然后借用cookies去验证登陆的
作者:
feijimao
时间:
2009-1-13 17:16
佩服啊
作者:
U2GIGN
时间:
2009-1-14 10:40
"IE可以解密cookie"这个是错的,是服务器的CGI处理程序来解析的。
还有你上面的sessionid=88F1C3F9F51F934BC41E80A7ABE9F44B 有没有做关联。
作者:
星驰
时间:
2009-1-14 18:36
顶,收藏一下!
作者:
wangyong3552128
时间:
2009-1-15 11:18
直接使用html base scripts方式算啦。
作者:
trapezia
时间:
2009-1-15 17:24
直接传密服务器会拒收吧,难道楼主还遇到过直接传密文接受正常的吗?
作者:
chsh
时间:
2009-5-5 17:00
你用lr 9.0 和IE 7.0 搭配能够进行脚本录制吗 为什么我却录制不了呢 除了IE 我用TheWorld 2.4 录制还是可以录制的 就是IE不能录制 郁闷啦
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2