【IT168技术分析评论】
测试对象:某Web即时通讯系统(以下称WebIM)
开发语言:XML
数据通讯协议:Web(HTTP/HTML)协议、Windows Sockets协议
底层数据库:Mysql
服务器操作系统:Redhad 4
脚本实现功能:登入系统后,再退出系统。
问题1:录制开发的脚本可以成功回放,但是数据库的logout表里却查不到“登出”的用户?
分析:录制的时候只选用了单协议:Web(HTTP/HTML)协议,而WebIM的实现不只用到了Web(HTTP/HTML)协议,也用到了 Windows Sockets协议。在定位了问题的"原因"之后,笔者尝试录制多协议的脚本,结果回放失败。回放失败是因为Webim在登录的过程中有个加密验证的过程。脚本回放时提交了上一次的经过Sha1加密后的密文,而此时服务器端的Sha1密文已经发生了改变。从而导致了失败。
解决方法:
a、使用双协议录制脚本
b、开发Sha1算法的DLL文件并在脚本中调用。
问题2:录制的脚本中并没有捕获到服务器返回的Session ID?
分析和方案:Webim的开发用到了XML和Windows Sockets协议,因此按照正常的思路,Loadrunner在录制脚本时,也应该采用XML和Windows Sockets协议,但实际情况是这样的,录制的脚本中并没有捕获到服务器返回的Session ID。既然公司内网的Jabberd服务器有专门的测试客户端,笔者决定通过这个客户端录制脚本,由于这个客户端和服务器的通信协议是Windows Sockets,因此录制协议也采用了这个最底层的协议。这一次,录制的脚本中捕获到了服务器返回的Session ID。为了保证脚本回放时能够动态的获取到这个Session ID,需要做“关联”操作,笔者使用了lrs_save_searched_string()函数,对脚本做了处理。
问题3:如何调用Dll来对服务器返回的序列和Password加密,以产生Sha1的密文?
分析和方案:脚本中加载了Dll库文件后,在调用库文件中的加密函数对Session ID+Password字符序列加密时,必须采用如下格式endes(a,b),其中的a代表源序列,b代表密文。经过这样的步骤处理后,调试脚本,就可以看到密文了。
问题4:Buf中参数化密文后,脚本还是不能编译通过,存在语法错误?
分析和方案:发现Loadrunner参数化,是按照它内置的机制执行的,符合这个机制,编译就能通过。后来在Gen中的Tools—>general option中找到了可以更改这个机制的地方,修改完了之后,脚本再次编译,这次OK了。
问题5:错误提示:没有足够的虚拟用户分配给这个NewPara?
分析和方案:loadrunner中在对用户名和密码或其他数据参数化了以后,不要将参数删除后,重新参数化,否则就会出现上述问题。笔者决定重新录制脚本,重新参数化,重新修改脚本。事实证明这样做是正确的,编译运行后,5个虚拟用户的脚本正确无误的通过。