51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5391|回复: 1
打印 上一主题 下一主题

[原创] VSTS WEB测试遇到302问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-8-20 12:07:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天用VSTS 做WEB测试,录制完脚本,回放的时候,出现302  found 的错误提示。
我找到了 FTTP 状态码,查看,说明如下:
请求到的资源在一个不同的URL处临时保存。因为重定向有时会被更改,客户端应继续用请求URI来发出以后的请求。新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体 (Entity-Body)必须包括对新URL超链接的简要描述。
如果用POST方法发出请求,而接收到302回应状态码。在这种情况下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
注意:当在接收到302状态码后而自动重定向POST请求时,一些现存的用户代理会错误地将其改为GET请求。


当时我都晕了,为啥会这样了,当时就卡在这里做不下去了。
    过了N天,我在一次测试的时候发现输入的URI有点怪:
[urlss=http://www.xxxxxxxxx:8888/http://www.xxxxxxxxx:8888/]http://www.xxxxxxxxx:8888/http://www.xxxxxxxxx:8888/[/url](S(5fjqub552plofl553hvbqzjp))/LoginAdmin.aspx

注意红色的字,当时问开发,开发解释说是认证信息,这个啥东东了,我跑去问具体做这个页面的开发,他的回答让我大惊失色,他说不知道,没有注意到过。
他提到这段代码是从以前那个项目拷贝过来的,也不清楚怎么会有这段信息。
所以我们查啊查 最后发现原来如此。
原来他以前那个程序为了保证兼容性,在配置信息中把cookieless属性改成了UseUri,为什么会这样了 。
请请我详细道来:
为什么在asp.net 2.0 中,将原来cookieless属性只能设置true|false,改成了可以设置枚举HttpCookieMode的值,分别为:AutoDetect,UseCookies,UseDeviceProfile,UseUri 。

如果对表单验证很有经验的朋友可能会很清楚,可以有两种方式来保存当前的SessionID和用户的验证票信息,分别是使用Cookie和在URL地址加上
一串编码过的字符串来标识当前的SessionID和用户的验证票信息。
第一种方式非常普遍,对于使用URI来标识当前SessionID和验证票,
我相信如果不是特殊需要的话,相信很多人都会跟我一样还无法很好理解。我做了两个简单的页面,来模拟用户的验证过程。当我在web.config中设置 cookieless="AutoDetect"时,就跟我们平常一样,登录的URL是:
  http://localhost:1115/FormsAuthentication/Security/Default.aspx
  而当我设置cookieless="UseUri"时,这时URL地址就变成了:
   http://localhost:1115/FormsAuthentication/(F(V0-gEZNEzXUqevbOqKwNoBcMf6vBWnyNbdpa2UhZzrfOUkGPvyB91-9nFlnBDmCAgdpz4gJ6kq-QOVjbNsvKig2))/Security/Default.aspx
  在站点目录多了一级目录,这里的值就是当前会用户的验证票信息和SessionID信息。
在某些场合,这样做是非常有意义的(或者是必须的),因为在不支持cookie环境下,你要去标识一个是否属于同一个会话,当前用户是否已验证过,等等与会话相关信息的时候就会变得异常的困难。
  了解了这两个保存会话信息的方式后,我们再来讨论一下,asp.net team为什么把原来只能设置true | false的属性改成可以设置不同的枚举值.首先我们来看看这4个值的含意:
  AutoDetect:自动检测客户端实际是否支持cookie再来决定使用两种方式中的哪一种(最佳适应)。
  UseCookies:不管客户端是否支持cookie,反正都使用cookie来标识(第一种方式)。
  UseDeviceProfile:根据设备文件来判断是否支持cookie,进而决定使用哪种方式。
   UseUri :与UseCookies类似的,不管客户端是否支持cookie,反正都使用第二种方式。

   为什么要改cookieless属性的可选值呢?毫无疑问,是为了增加程序的可操控性。原来的值有点太过单一化了,二选一,没有商量的余地。现在我们可以根据各种不同的情况来让程序动态或程序员手动选择。我想这样做的一个目的就是为了能更好的兼容移动设备,兼容WAP的应用。目前还有很多的设备还并不支持cookie。
   解决办法有三种:
  1.设置cookieless = UseCookies,不管客户端是否支持cookie都使用cookie。
  2.因为默认cookieless = UseDeviceProfile,所以可以为搜索引擎建立一个设备文件.browser,弄虚作假一下。《Get GoogleBot to crash your .NET 2.0 site》就有给出了这样的做法了。
  3.修改程序,将里面的相对路径(~/)改成绝对路径表示(可以使用Resolve方法)。

其实是分享别人的成果,我这里就厚颜的占为己有了。

再回到我的测试这里,为什么会出302的提示了。
因为“(S(5fjqub552plofl553hvbqzjp))”这串编码过的字符串,每次打开网页都是不同的,而我们录制的时候却是死的,回放肯定回出错。

问题解决了,我和开发都心有感叹。
基本上很多开发都会在使用以前的代码,他潜意识认为以前用的好好,这里也肯定没问题,却没有考虑到大的使用环境变了,代码怎么能不跟着变;

  用VSTS测试不是很多,这个问题比较特殊,估计很都多人都不会遇见,不过还是希望可以给迷茫中的朋友一点小小的帮助

[ 本帖最后由 kings727 于 2008-8-20 12:13 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-9-21 17:15:34 | 只看该作者
302不是错误,重定向成功返回302.
据我观察,在C#中使用Response.Redirect方法定向到得url都是先返回302,然后再返回200.

[ 本帖最后由 piecehealth 于 2009-9-21 17:25 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-7 22:32 , Processed in 0.067425 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表