cs架构下,使用oracle,win sockets多重协议,回放报错。
本人初学录制时没有问题,回放时报错:
错误: socket0 - 对方将连接复位。错误代码: 10054
在登录界面初始化中,使用第一条sql语句查询oracle中的数据,出现Mismatch (expected 175 bytes, 0 bytes actually received),连着5个,中断回放。
vuser_init()代码:
{
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=192.168.10.248:1521", LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);
lrs_send("socket0", "buf2", LrsLastArg);
lrs_receive("socket0", "buf3", LrsLastArg);
lrs_send("socket0", "buf4", LrsLastArg);
lrs_receive("socket0", "buf5", LrsLastArg);
lrs_send("socket0", "buf6", LrsLastArg);
lrs_receive("socket0", "buf7", LrsLastArg);
lrs_send("socket0", "buf8", LrsLastArg);
lrs_receive("socket0", "buf9", LrsLastArg);
lrs_send("socket0", "buf10", LrsLastArg);
lrs_receive("socket0", "buf11", LrsLastArg);
lrs_send("socket0", "buf12", LrsLastArg);
lrs_receive("socket0", "buf13", LrsLastArg);
lrs_send("socket0", "buf14", LrsLastArg);
lrs_receive("socket0", "buf15", LrsLastArg);
lrs_send("socket0", "buf16", LrsLastArg);
lrs_receive("socket0", "buf17", LrsLastArg);
lrs_send("socket0", "buf18", LrsLastArg);
lrs_receive("socket0", "buf19", LrsLastArg);
lrs_send("socket0", "buf20", LrsLastArg);
lrs_receive("socket0", "buf21", LrsLastArg);
.....
return 0;
}
data.ws 部分buff:
sendbuf12 55
"\x00"
"7"
"\x00\x00\x06\x00\x00\x00\x00\x00\x03"
"b"
"\x00"
"\a"
"\x00\x01\x01"
" "
"\x01\x02\x01\x01"
" select ip,dk,yh,mm,bb,wj from sj"
回放日志:
虚拟用户脚本已启动
正在开始操作 vuser_init。
vuser_init.c(12): lrs_create_socket(socket0, TCP, ...)
vuser_init.c(14): lrs_send(socket0, buf0)
vuser_init.c(16): lrs_receive(socket0, buf1)
vuser_init.c(18): lrs_send(socket0, buf2)
vuser_init.c(20): lrs_receive(socket0, buf3)
vuser_init.c(22): lrs_send(socket0, buf4)
vuser_init.c(24): lrs_receive(socket0, buf5)
vuser_init.c(26): lrs_send(socket0, buf6)
vuser_init.c(28): lrs_receive(socket0, buf7)
vuser_init.c(30): lrs_send(socket0, buf8)
vuser_init.c(32): lrs_receive(socket0, buf9)
vuser_init.c(34): lrs_send(socket0, buf10)
vuser_init.c(36): lrs_receive(socket0, buf11)
vuser_init.c(36): Mismatch (expected 33 bytes, 22 bytes actually received)
vuser_init.c(38): lrs_send(socket0, buf12)
vuser_init.c(40): lrs_receive(socket0, buf13)
vuser_init.c(40): Mismatch (expected 175 bytes, 0 bytes actually received)
vuser_init.c(42): lrs_send(socket0, buf14)
vuser_init.c(44): lrs_receive(socket0, buf15)
vuser_init.c(44): Mismatch (expected 14 bytes, 0 bytes actually received)
vuser_init.c(46): lrs_send(socket0, buf16)
vuser_init.c(48): lrs_receive(socket0, buf17)
vuser_init.c(48): Mismatch (expected 44 bytes, 0 bytes actually received)
vuser_init.c(50): lrs_send(socket0, buf18)
vuser_init.c(52): lrs_receive(socket0, buf19)
vuser_init.c(52): Mismatch (expected 104 bytes, 0 bytes actually received)
vuser_init.c(54): lrs_send(socket0, buf20)
vuser_init.c(56): lrs_receive(socket0, buf21)
vuser_init.c(56): 错误: socket0 - 对方将连接复位。错误代码: 10054。
从操作调用了中止。 楼主可以录制同一次操作的脚本2次,然后用LR自带比较工具对比一下两个脚本的内容有什么不同.如果有不同的地方,那就要仔细分析一下了.看楼主提供的信息,很有可能是动态数据造成脚本回放错误.如果是那样,就需要做关联处理了. 谢谢分析,我看了看,是有地方不同,大概位置是在启动应用前:
第一个:
send buff8
.....
"FH\rAdministrator\t2816:3828"
"\x14"
"信息管理.exe"
第二个:
send buff8
.....
"FH\rAdministrator\t2252:1440"
"\x14"
"信息管理.exe"
楼上的aks5201314的能说说如何关联处理吗?谢谢:handshake 为什么我的loadrunner8.1 的vuser 菜单的 和关联的有关的菜单都是灰的啊,难道是安装的时候没有装全? c脚本的没有关联,如何解决上面的问题呢?
每次执行程序的时候会向数据库发送一个随机端口号作为和数据库的联系用,在没有关联可以使用的情况下如何能使用参数进行替代?
[ 本帖最后由 haifeng_j 于 2008-4-3 18:08 编辑 ] WINSOCKET协议的脚本做关联用到函数lrs_save_param()函数,处理方式和WEB的关联处理类似.首先找出动态数据,然后把它用函数lrs_save_param()保存,最后参数化lrs_send()发送的动态数据.注意lrs_save_param()要放在lrs_send()前面.
楼主要仔细检查2816:3828数据是否出现在lrs_send() 前面的lrs_receive()函数里,这点很重要!!! 研究了几天,还是未解决问题,但是感觉离问题近了,下面再描述一下问题:
试过了楼上的方法,最后发现,并不是2816:3828的问题,因为在lrs_send()前面的lrs_receive()函数中并没有出现,看了data.w文件的相关buff,在lrs_send()中没有和其前面的lrs_reveive()函数中关联的数据。我把几个buff及说明放上来:
sendbuf8 102
"\x00"
"f"
"\x00\x00\x06\x00\x00\x00\x00\x00\x03"
"R"
"\x00\x01\x01\x02\x00\x00\x00\x00\x00\x00\x01\x01\x02\x01\x01\x02\x01\x01"
"\r"
"\x02\x10\x00\x01\x01"
"\t"
"\x01\x01\x14\x00\x00\x00\x00\x01\x01\x10\x01\x02"
"xj"
"\x02"
"FH"
"\x02"
"FH\rAdministrator\t2286:7971"
"\x14"
"信息管理.exe"
recvbuf9 53
"\x00"
"5"
"\x00\x00\x06\x00\x00\x00\x00\x00"
"\b"
"\x01\x10\x10"
"D70D7754073EC84D"
"\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00"
注:数据"D70D7754073Ec84D"每次从服务器recv的数据都不一样,但是这个数据在后面的send的buff中并没有出现;
sendbuf10 121
"\x00"
"y"
"\x00\x00\x06\x00\x00\x00\x00\x00\x03"
"Q"
"\x00\x01\x01\x02\x01\x01\x11\x00\x00\x00\x00\x01\x01\x02\x01\x01\x02\x01\x01"
"\r"
"\x02\x10\x00\x01\x01"
"\t"
"\x01\x01\x14\x00\x00\x00\x00\x00\x01\x10\x00\x02"
"xj"
"\x11"
"D80C219558868D710"//这里是比send buf8多出的数据,应该是从服务器返回的吧,但和recv buf9中的数据是不一样的。
"\x02"
"FH"
"\x02"
"FH\rAdministrator\t{param1}:{param2}"
"\x14"
"信息管理.exe"
然后在 recv buf11 中就出现了和期望数据不一致的问题。 D80C219558868D710比D70D7754073Ec84D要大一些,把这两个16进制数转换成10进制数,计算一下他们的差值.然后对比两个脚本中这两个数的差值是不是一样.还有楼主提到"数据库发送一个随机端口号作为和数据库的联系用",如果这样的话,那就和以WINSOCKET协议录制的FTP服务的脚本的关联有点类似了. 碰到这种复杂协议,建议楼主不要用socket协议,否则在无法知道底层通信细节时,发送给server的信息确保正确以及服务器返回信息的验证都是一道难越的槛 。 我也是同样的问题,关键是如上的,lr_send()发送的BUF里面的数据是前面没有的,不能做关联,同时又不是随机数据.....LR中C/S下的协议,基本都试过的,不管怎么组合,没有选择WINSOCKER的话录制都是不成功的. 哎..
这样的问题到底怎么解决
错误: socket0 - 对方将连接复位。错误代码: 10054上面是错误提示,我分别并发30个 60个 100个用户,30个的时候出现了两个这样的错误,60个的时候还是两个,100的时候出现了7个,但是不知道这到底是那里的问题
页:
[1]