现在越来越多的项目都是多系统部署在多个环境但归属在一个项目,需要进行单点登录。
有一次协助别人做性能测试时,就遇到了单点登录的问题,脚本回放一直无法成功。
场景内容是:单点登录之后,点击一个系统进入,进行一个模块的新增保存的业务操作。
嘛……就是这样一个简单的场景,在重跑脚本时发现无法再新增一条记录,就发现脚本其实没有成功执行,就需要进行脚本的调试了。
当时因为测试时间比较紧急,就先绕过了单点登录,而是选择单系统做个登录页面进行操作新增保存动作,脚本是可以成功的。这也是备选方法之一
若是不绕过这个单点登录,可以尝试看以下内容:
首先先了解一下URL重定向的概念
URL重定向:URL redirection,或称网址重定向或网域名称转址,是指当使用者浏览某个网址时,将他导向到另一个网址的技术。
就是把一个URL重定向到另一个URL上去。
常见的重定向有301(永久重定向)及302(暂时重定向)
简单来说就是很多网站都有实现单点登录的功能,比如百度,淘宝这种平时用的比较多的网站。
举个栗子 ~~~~~~~~~~~~~~~~~~~~~
例:web_submit_data("login",
"Action=http://59.60.9.7/platformcas/login;jsessionid={PeopleSoftJSessionID2}?service=http%3A%2F%2F59.60.9.7%3A18081%2Fplatform-base%2Fplatformbase%2Fview%2Findex.jsp",
"Referer=http://59.60.9.7/platformcas/login?service=http%3A%2F%2F59.60.9.7%3A18081%2Fplatformbase%2Fplatformbase%2Fview%2Findex.jsp",
"Name=loginMethodCacheKey","Value={Key}", ENDITEM,
"Name=username", "Value=username", ENDITEM,
"Name=password", "Value=password", ENDITEM,
"Name=lt", "Value={lt}", ENDITEM,
EXTRARES,LAST);
上面的脚本session,key,lt已经做了关联,关联的具体操作可以查看本人的其他篇博客~~~
在脚本录制完毕后回放脚本,会在Replay log中发现Redirecting, To location字样,或切换到TreeHTTP View,查看该脚本
可以看到重定向的操作,会发现截图的Path的URL地址都带有动态变化的参数,这就意味着你每次的操作,服务器都会给你返回不一样的URL地址(因为参数每次迭代的时候都不一样),所以我们不能拿这样固定的脚本进行重复的操作,因为是无法成功的。
那解决方法是什么呢?
这时候我们就可以去关闭URL重定向
去除重定向
web_set_option("MaxRedirectionDepth", "0", LAST );
这时候把重定向给关闭了之后,就要我们去手工做url的访问
语法:Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTRARES,<Lists of Resource Attributes>,LAST)
例:web_url("getLocation1",
“URL={Location}”, //此处URL已做参数化
"TargetFrame=",
"Resource=0",
"Referer=http://59.60.9.7/platform-cas/login?service=http%3A%2F%2F59.60.9.7%3A18081%2Fplatform-base%2Fplatformbase%2Fview%2Findex.jsp",
LAST);
{Location}是前面做了关联获取到的值,然后在url手工请求中做了参数化,这样就可以进行该地址的一个访问请求,可以理解成我们帮程序做了重定向,但是这时候呢,我们是拿了动态关联到的数据做的重定向,所以每次迭代都能成功。
如果单点登录的重定向有多次,就可以一直往下取location,到最终获取到我们要的另一个session,什么?有另一个session?
是的……单点登录后到了一个系统中操作新增保存之前,会产生一个新的session值,之前做的所有工作就是为了取到这个隐藏颇深的session,这样才能在后面的请求当中将这个新的session值做参数化。
如有疑问,可以在评论问我~
欢迎提问。