holysword2 发表于 2006-5-23 12:31:47

怎么在Buffer里面读取想要的信息

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

........我是一个新手,第一次用这个测试软件,问的问题可能很肤浅,望各位LR高手不要见怪

Zee 发表于 2006-5-23 12:41:25

嗯,参数化data.ws里的buffer就行了。

holysword2 发表于 2006-5-23 13:25:19

谢谢!

holysword2 发表于 2006-5-23 13:29:16

我还有个问题:
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:52

lrs_get_static_buffer ( char *s_desc, char *buffer, int offset, int length, char *encoding );
offsetThe offset inside the buffer (binary representation of the data).
lengthThe length of the data to retrieve (binary representation of the data).Specify -1 to ignore the offset and retrieve the whole buffer.
encodingThe 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:41

谢谢..英文不好理解

wawa133 发表于 2006-5-23 14:03:25

不是吧。我也是用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:04

说明你在14行的地方有错误,你再去查查lrs_send函数的格式.

holysword2 发表于 2006-5-23 14:12:19

lrs_send 这函数是这样的:
lrs_send("socket0", "buf10", LrsLastArg);

wawa133 发表于 2006-5-23 14:21:45

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:50

你脚本里是这么写的吗?
但是,你的错误提示是:
Action.c(14): lrs_send(socket0, buf2)<--这个!再仔细看看

holysword2 发表于 2006-5-23 14:27:49

可以啊,不过你的用户名,密码要一一对应起的!parameter list 里面你一个一个选项要注意看的

wawa133 发表于 2006-5-23 14:29:15

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:58

你可以用HTTP加Winsocket两协议一起录,即然你要参数化登陆,那么你就不要分开录了,全部录在action里面吧.这样录出来的脚本好读一点.你再试试吧!

wawa133 发表于 2006-5-23 14:42:18

用http加winsocket录制不了脚本,c/s架构的。不过我可以试试看把登陆的也录进ACTION里看看。谢谢楼上的。

holysword2 发表于 2006-5-23 14:52:38

呵呵,不客气,我也是第一次用的,帮助上提到每次回收的时候LR只运行ACTION里的脚本,如果你要参数化登陆,就要把vusr_int 里的录到action里了.


我现在头也不比你好多少,有好几个函数比如lrs_save_searched_string();最后第二个参数是要求一个明确的数字,可是查询条件各种各样,我哪知道那个条件的字符串有多少长啊.哎,字母它一个不认识,即使我知道有多少,我也只能通过函数得到,到这里就死了,做不下去了.LR里这个函数的参数是死的.现在证在头痛中................
    找寻其它解决办法.

holysword2 发表于 2006-5-23 14:53:05

是回放!!写错字了!

wawa133 发表于 2006-5-23 14:53:17

试过了。我把 lrs_send("socket0", "<NewParam>", LrsLastArg); buf0参数化,但是运行的时候出错:Action.c(14): lrs_send(socket0, <NewParam>)
Action.c(14): 错误: 指定的缓冲区 <NewParam> 不存在。错误代码: 9011。

请问这个是什么问题啊?

holysword2 发表于 2006-5-23 14:54:27

晕!!不能直接把BUF参数化的

holysword2 发表于 2006-5-23 14:57:20

你要到data.ws里面到那个buf,再到里面打到你要参数化的用户名,密码什么的,再参数化,如果还不行你就要写脚本了!用什么函数就看HELP吧.我第一次玩这东西,被他玩死了要................
页: [1] 2
查看完整版本: 怎么在Buffer里面读取想要的信息