51Testing软件测试论坛

标题: 怎么在Buffer里面读取想要的信息 [打印本页]

作者: holysword2    时间: 2006-5-23 12:31
标题: 怎么在Buffer里面读取想要的信息
我是用Winsocket协议录制的脚本,现在想要从返回的结果里面去读取想要的信息.
现在查询关键字是动态的,用lr_save_searched_string函数获取,可是无法确想要
的字符串的长度.  
   还有用Winsocket协议录制的脚本要参数化一个参数,是不是直接到data.ws里找到相应的BUF
,再把面要的内容Replace with a parameter 就可以 了.

........我是一个新手,第一次用这个测试软件,问的问题可能很肤浅,望各位LR高手不要见怪
作者: Zee    时间: 2006-5-23 12:41
嗯,参数化data.ws里的buffer就行了。
作者: holysword2    时间: 2006-5-23 13:25
谢谢!
作者: holysword2    时间: 2006-5-23 13:29
我还有个问题:
lrs_get_static_buffer("socket0","buf11",178,i,NULL); 这个函数,我想把它的最后第二个参数,用变量代替,结果就显示这样的错误:
c:\\program files\\mercury interactive\\mercury loadrunner\\scripts\\commonselecttest\\\\combined_CommonSelectTest.c (4): 1 errors, not writing pre_cci.ci

请教..什么原因
作者: chris_328    时间: 2006-5-23 13:46
lrs_get_static_buffer ( char *s_desc, char *buffer, int offset, int length, char *encoding );
offset  The offset inside the buffer (binary representation of the data).  
length  The length of the data to retrieve (binary representation of the data).Specify -1 to ignore the offset and retrieve the whole buffer.  
encoding  The encoding method for the returned data. The possible values are "ascii" or "ebcdic". A NULL value indicates the original client format.
作者: holysword2    时间: 2006-5-23 13:50
谢谢..英文不好理解
作者: wawa133    时间: 2006-5-23 14:03
不是吧。我也是用win socket测试,但是像Zee所说的那样去参数化,好像不怎么行得通喔。我测试的是一个聊天工具(就像聊天室的那种,不过采用的是C/S架构的)

send buf0 76
        "+IG&"
        "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
        "<<Pid>"    //这里就是我要参数化的地方啦。录制的时候是0001的
        "\x00\x00\x00\x00\x00\x00"
        "aaa"
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
        "\x00\x00\x00\x00\x00\x00\x00\x00"
        "111"
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

但是参数化后,运行就会出错:
Action.c(14): lrs_send(socket0, buf2)
Action.c(14): 错误: socket0 - 软件造成连接终止。错误代码: 10053。

请问有谁知道是什么原因啊??请指教。。。在线等。

[ 本帖最后由 wawa133 于 2006-5-23 14:06 编辑 ]
作者: holysword2    时间: 2006-5-23 14:11
说明你在14行的地方有错误,你再去查查lrs_send函数的格式.
作者: holysword2    时间: 2006-5-23 14:12
lrs_send 这函数是这样的:
lrs_send("socket0", "buf10", LrsLastArg);
作者: wawa133    时间: 2006-5-23 14:21
lrs_send("socket0", "buf2", LrsLastArg);
这句吗?不觉得有错啊。
send buf2 28
        "+IG&"
        "\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00"
        "\fGA(E01"
        "\x00\x00\x00\x00"
        "1&"

实在是看不出有什么地方错。

参数化的时候是不是要按照软件的数据库定义的名称啊?我只想参数化登录时的用户号,用户昵称,和密码。
ID,Name,Pwd
001,11,11
002,22,22

不知道这样定义对不对。但是不论我怎么运行都是出同样的错喔。

[ 本帖最后由 wawa133 于 2006-5-23 14:24 编辑 ]
作者: holysword2    时间: 2006-5-23 14:25
你脚本里是这么写的吗?
但是,你的错误提示是:
Action.c(14): lrs_send(socket0, buf2)  <--这个!  再仔细看看
作者: holysword2    时间: 2006-5-23 14:27
可以啊,不过你的用户名,密码要一一对应起的!  parameter list 里面你一个一个选项要注意看的
作者: wawa133    时间: 2006-5-23 14:29
vuser_init:#include "lrs.h"


vuser_init()
{
   
   lrs_startup(257);

    lrs_create_socket("socket0", "TCP", "RemoteHost=ntm034.ntm789vr.com:5000",  LrsLastArg);

    lrs_send("socket0", "buf0", LrsLastArg);

    lrs_receive("socket0", "buf1", LrsLastArg);

    return 0;

}
action:#include "lrs.h"


Action()
{
    lr_think_time(7);

    lrs_send("socket0", "buf2", LrsLastArg);

    lrs_receive("socket0", "buf3", LrsLastArg);

    lrs_send("socket0", "buf4", LrsLastArg);

    lr_think_time(7);

   lrs_send("socket0", "buf5", LrsLastArg);
   
   
   
    return 0;
}
vuser_end:#include "lrs.h"


vuser_end()
{
    lrs_cleanup();

    return 0;
}
data.ws:
;WSRData 2 1

send buf0 76
        "+IG&"
        "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
        "<0001"
        "\x00\x00\x00\x00\x00\x00"
        "aaa"
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
        "\x00\x00\x00\x00\x00\x00\x00\x00"
        "111"
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

recv buf1 20
        "+IG&"
        "\x80\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00"

send buf2 28
        "+IG&"
        "\x00\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00"
        "\fGA(E01"
        "\x00\x00\x00\x00"
        "1&"

recv buf3 20
        "+IG&"
        "\x80\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00"

send buf4 28
        "+IG&"
        "\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00"
        "\f"
        "\x00\x00\x00"
        "\b44545545"

send buf5 36
        "+IG&"
        "\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x14\x00\x00\x00\x10"
        "this is / test!!"



-1


这就是所有的脚本啦。都在这里了。搞得我头都大了。
作者: holysword2    时间: 2006-5-23 14:37
你可以用HTTP加Winsocket两协议一起录,即然你要参数化登陆,那么你就不要分开录了,全部录在action里面吧.这样录出来的脚本好读一点.你再试试吧!
作者: wawa133    时间: 2006-5-23 14:42
用http加winsocket录制不了脚本,c/s架构的。不过我可以试试看把登陆的也录进ACTION里看看。谢谢楼上的。
作者: holysword2    时间: 2006-5-23 14:52
呵呵,不客气,我也是第一次用的,帮助上提到每次回收的时候LR只运行ACTION里的脚本,如果你要参数化登陆,就要把vusr_int 里的录到action里了.


我现在头也不比你好多少,有好几个函数比如lrs_save_searched_string();最后第二个参数是要求一个明确的数字,可是查询条件各种各样,我哪知道那个条件的字符串有多少长啊.哎,字母它一个不认识,即使我知道有多少,我也只能通过函数得到,到这里就死了,做不下去了.LR里这个函数的参数是死的.现在证在头痛中................
    找寻其它解决办法.
作者: holysword2    时间: 2006-5-23 14:53
是回放!!写错字了!
作者: wawa133    时间: 2006-5-23 14:53
试过了。我把 lrs_send("socket0", "<NewParam>", LrsLastArg); buf0参数化,但是运行的时候出错:Action.c(14): lrs_send(socket0, <NewParam>)
Action.c(14): 错误: 指定的缓冲区 <NewParam> 不存在。错误代码: 9011。

请问这个是什么问题啊?
作者: holysword2    时间: 2006-5-23 14:54
晕!!不能直接把BUF参数化的
作者: holysword2    时间: 2006-5-23 14:57
你要到data.ws里面到那个buf,再到里面打到你要参数化的用户名,密码什么的,再参数化,如果还不行你就要写脚本了!用什么函数就看HELP吧.我第一次玩这东西,被他玩死了要................
作者: wawa133    时间: 2006-5-23 14:57
喔。那就是要在data.ws里进行参数化吗?
send buf0 76
        "+IG&"
        "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
        "<222"  //这里要参数化
        "\x00\x00\x00\x00\x00\x00\x00"
        "222" //这里要参数化
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
        "\x00\x00\x00\x00\x00\x00\x00\x00"
        "222"  //这里要参数化
        "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

如果是这样的话,那我不就是要用到三个表啦?那表中的字段名是可以根据自己定的吗?开发的人没有跟我说字段名称喔。

我参数化了"<222" 这里,就会出错:
Action.c(20): lrs_receive(socket0, buf3)
Action.c(20): 错误: socket0 - 软件造成连接终止。错误代码: 10053。
不知道是软件的问题还是什么问题。晕。。。

[ 本帖最后由 wawa133 于 2006-5-23 15:01 编辑 ]
作者: holysword2    时间: 2006-5-23 15:04
是的,要三个表.用户名一个表,密码一个表,ID一个表,
注意:第一行的数据要一一对应的,比如说,ID,用户名,密码一一对应,不能随机取!
叫开发人员给你弄这三张表!

本来是一张表三列的,现在要分成三张表,每张只一列!
第一张表,用户名表,只用户名一例.密码表,只密码一例,如此.........
作者: wawa133    时间: 2006-5-23 15:11
呵呵。谢谢holysword2 。我再去试试看。呵呵。。。。如果成功了,那就要写上一份心得啊。毕竟这个东西弄了几天啦。到时候上传上来,希望有这方面的经验的人可以指导一上,没有这方面经验的可以做为一个参考。哈哈。。。

对了,还有一个问题就是。我用controller的时候为什么运行后的结果是这样呢?都是0喔。
作者: holysword2    时间: 2006-5-23 15:51
具体场景里怎么设置你去网上下个说明吧.....其实也没什么难的.

数据这么牛啊...你有没有连上局域网啊?!
作者: wawa133    时间: 2006-5-23 16:40
原帖由 holysword2 于 2006-5-23 15:04 发表
是的,要三个表.用户名一个表,密码一个表,ID一个表,
注意:第一行的数据要一一对应的,比如说,ID,用户名,密码一一对应,不能随机取!
叫开发人员给你弄这三张表!

本来是一张表三列的,现在要分成三张表,每张只一列 ...


试了你说的那种方法后,还是会出错:
Action.c(20): lrs_receive(socket0, buf3)
Action.c(20): 错误: socket0 - 软件造成连接终止。错误代码: 10053。


应该不是软件本身的问题吧?
软件本身用户登录的时候不会用到数据库的。都是变量传的值。但是我参数化后还是不行。

狂晕中。。。。。。。
不知道holysword2 有没有一些成功的例子可以上传给我看看呢?
邮箱:szptwawa@163.com

[ 本帖最后由 wawa133 于 2006-5-23 16:42 编辑 ]
作者: yuxingxin    时间: 2006-5-23 17:40
大哥,用英文版吧
作者: wawa133    时间: 2006-5-23 18:42
英文版没有这个问题吗?那我明天试试看用英文版吧.
作者: wawa133    时间: 2006-5-24 11:12
用了英文版的,然后参数化。还是出一样的问题啊
错误: socket1 - 软件造成连接终止。错误代码: 10053。

请问还有没有什么方法可以解决啊?
作者: holysword2    时间: 2006-5-24 16:44
不可能啊,我昨天还成功的在data.ws里参数化的啊!让后用lr_output_message("%s",lr_evet_string("<NewPatam>"))成功的输出了参数化的变量的值.  

不过问题一直出在从Buffer里面读取数据lr_save_searched_string();这个函数上,编译也通过了.
就是运行的时候说lr_save_searched_string();这个函数的参数有误.

有人知道怎么读取buffer的长度吗?  i=strlen("buf11");这句话行不行?    我用lr_output_message()一直读不出来"i"的值
作者: holysword2    时间: 2006-5-24 17:48
给大家一个网站:
http://blog.video.com.cn/andy/archives/2006/5419.shtml
作者: wawa133    时间: 2006-5-25 08:27
谢谢holysword2 ,我用  lr_output_message("the value is : %s",lr_eval_string("<IDC_EDT_LOGINID>"));可以把参数输出来了,那就说是说我参数化的时候是正确的。但是还是会出现:
Action.c(12): lrs_create_socket(socket0, TCP, ...)
Action.c(14): lrs_receive(socket0, buf1)
Action.c(14): 错误: socket0 - 软件造成连接终止。错误代码: 10053。

LoadRunner 常见问题:
(1)sofeware caused connction:这种情况,一般是脚本有问题,或者loadrunner有问题。解决方法:重新启动机器,或者重新录制脚本,估计是loadrunner的bug。

但是我重启然后重新录制脚本也会也现这个问题喔。不知道大家有什么解决方法呢?


我迭代的时候第一次(后面的4次都失败了)成功了。但为什么服务器上没有看到有人登录呢?

[ 本帖最后由 wawa133 于 2006-5-25 09:03 编辑 ]
作者: Hbxlhm    时间: 2011-11-15 16:47
如果测试数据不满足交易要求,后台程序强行断开socket连接也会出现这个情况。
作者: Hbxlhm    时间: 2011-11-15 16:47
如果测试数据不满足交易要求,后台程序强行断开socket连接也会出现这个情况。
作者: Hbxlhm    时间: 2011-11-15 16:48
如果测试数据不满足交易要求,后台程序强行断开socket连接也会出现这个情况。
作者: Hbxlhm    时间: 2011-11-15 16:48
如果测试数据不满足交易要求,后台程序强行断开socket连接也会出现这个情况。




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