51Testing软件测试论坛

标题: 请教:LoadRunner可以用于模拟大量玩家吗? [打印本页]

作者: primo    时间: 2010-1-7 20:55
标题: 请教:LoadRunner可以用于模拟大量玩家吗?
没有用过loadrunner,想了解一下:
如果loadrunner可以“录制”一个玩家从登录到进入游戏打怪的整个过程,那么用LoadRunner来模拟一个玩家应该是没有问题的。
如果想扩展到多个玩家,LR可以做到吗?可以修改录制的网络包的内容吗(改为其他用户的用户名和密码)?


当然,上面仅仅是我的一些猜测,请各位大大不吝赐教啊!
作者: diu    时间: 2010-1-7 22:49
标题: 回复 1# 的帖子
貌似不能
因为网络包加密了,能解密就可以修改了
作者: 云层    时间: 2010-1-8 17:32
基本上不太合适
作者: 阿弥陀佛    时间: 2010-1-8 18:36
大哥想法不错,可以和HP商量下加入下个版本的需求中。
作者: tk00544    时间: 2010-1-12 11:38
应该可以。这需要你首先对LR有所了解。录制游戏时通常使用windows sockets协议。
首先,录制一个登录脚本。如果没有加密,就简单很多。录制后要查看并了解通讯包内容(可能请教程序),找出登录参数,比如角色ID。
然后,你需要做的就是修改脚本,将角色ID参数化,比如角色ID为\x11\x00\x00\x00,只需将其替换为参数即可(比如<GamerID>)。如果该ID是需要从接收包中获取的,可以从包中截取出来做参数化。下面几个函数比较常用:lrs_save_param()用来获取包中某位置的字段(详细查看LR的帮助);lr_save_string()用来将变量保存入参数;lr_eval_string()取出参数值;
一个例子:
lrs_save_param ("socket0","buf4","GamerID",16,4);//截取buf4(一个数据包)中的字段(从第16开始截取4个字符),保存到GamerID
lr_output_message ("GamerID值为:%s",lr_eval_string ("<GamerID>"));//打印出该参数值,用来查看是否正确。

如果参数是加密传送的,可以使用外部的dll对参数加密,这个库文件(dll文件)有游戏对参数进行加密的接口,可以向程序求教或索要。
一个例子:动态链接库(dll)的局部调用
一个参数<GamerID>将其加密,先配置好参数。然后使用前将其加密。
char *str1;
char *str2;
str1=lr_eval_string ("<GamerID>");//取出GName值赋给str1
lr_load_dll("encode.dll");// 加载动态连接库,encode.dll是一个加密库的文件全名。
str2=(char*)encodeGID(str1);//调用库文件里面的接口函数,对str1进行加密。
lr_save_string (str2,"GamerID");//将str2的值,存入参数GamerID。
lr_output_message ("GamerID值为:%s",lr_eval_string ("<GamerID>"));//打印出该参数值,查看是否正确。
解密的方式与其类似。

配置好参数后,运行脚本,基本的登录一类的操作应该可以实现。由于游戏中收发包内容大都变化较大,做起脚本来比较困难,我目前也是处于探索阶段,希望大大们指点,大家一起多多尝试,多多交流。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2