51Testing软件测试论坛

标题: 一个脚本乱码转义的研究! [打印本页]

作者: yuanhangwto    时间: 2010-3-9 17:40
标题: 一个脚本乱码转义的研究!
我用socket协议录制了 一段脚本, 里面有乱码,
我就像把乱码 转义,只有先转义才能做参数化。
提供参考资料:
lr_convert_string_encoding 这个可以转义分4种
   int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
    该函数有4个参数,含义如下:
    sourceString:被转换的源字符串。
    fromEncoding:转换前的字符编码。
    toEncoding:要转换成为的字符编码。
    paramName:转换后的目标字符串。

请问怎么把这个socket 中action录制的buf12这个包里 对应data.ws里面buf12里面的数据进行转义后,在参数化。能写句例子吗?先谢谢。
作者: 云层    时间: 2010-3-9 18:35
参考这个帖子http://www.51testing.com/index.p ... space-itemid-200711

ps,你要data.ws里面的东西参数化直接在这个文件里面写<参数名>就可以了
作者: yuanhangwto    时间: 2010-3-16 18:57
标题: 不行啊
data.ws里面都是乱码怎么直接参数化呢?
send  buf8 271
        "ddt"
        "\x00\x01"
        "\n"
        "\x00\x00\x00"
        "`"
        "\x10\x05"
        "RH"
        "\x11\x11\x11\x11\x12"
        "\"\"\"44444444455
我想把这些数据参数化,应该怎么办
作者: 云层    时间: 2010-3-16 20:24
这不是乱码,本来就是这个,用了socket 你必须知道编码的格式和含义,内容封包后是16进制而已
作者: Fin    时间: 2010-3-17 00:18
把以下函数加入到你的 global.h 文件下,调用这个函数,可以输出你要的字符串对应的16进制编码,将此编码作为参数到你要参数的地方就OK 了。

void fdk_out_message_to16(void *_hexbuf, int _bufsize)
{
   /************************************
                说明:16进制方式方式打印出参数内容
                参数: _hexbuf = string
                        _bufsize = 3 (字符串长度)
                copyright 2009/07/07 by Fin.
        *************************************/
        int _i;
        unsigned char *_buf_str;
        unsigned char *_x;

        _buf_str = (unsigned char *)malloc(_bufsize * 4 + 1);
        _x = _buf_str;       
        memset(_x, 0, _bufsize*4+1);

        for(_i = 0; _i < _bufsize; _i++)
        {       
                sprintf(_x, "%x ",((unsigned char *)_hexbuf)[_i]);
                _x = _x+3;
        }

        lr_message("[Fin] =>(to16) %s = #%s# \n", _hexbuf, _buf_str);

        free(_buf_str);
}
作者: yuanhangwto    时间: 2010-3-17 15:19
标题: global.h 文件

global.h 文件这个文件在哪没找到,
我还没有弄清楚,能在详细说下吗?
作者: yuanhangwto    时间: 2010-3-18 09:34
标题: 急啊
data.ws里面都是乱码怎么直接参数化呢?
send  buf8 271
        "ddt"
        "\x00\x01"
        "\n"
        "\x00\x00\x00"
        "`"
        "\x10\x05"
        "RH"
        "\x11\x11\x11\x11\x12"
        "\"\"\"44444444455
我想把这些数据参数化,应该怎么办,哪个知道下这段参数的步骤实现及说明啊
作者: 丰肚翩翩    时间: 2010-3-18 11:06
云层大师说的对,你先搞明白你抓的数据的含义

举个例子:
比如第一行“ddt”代表一个用户的帐号,你就把其他帐号写在参数列表里对“ddt”进行参数化就行了
再比如第二行“\x01”意思是这个字节是十进制数1,这个1代表一个标志位,标志男性(0标志女性),你就可以把0也参数化进去了

以上所说的这些含义你可以问开发人员,是他开发的他就一定知道


我不知道我说这么多你明白没!
作者: yuanhangwto    时间: 2010-3-18 18:49
标题: 我明白你的意思
我就是开发人员,这个数据原来不是这样的,但是录下来就是这样的了,我想把他转成我能看得懂的显示形式,在参数化。ddt后面跟的 是 十六进制字符串格式的,一些数据。比如说这些相当于 64647400010A0500000000530100001877000000601....数据。
我现在想 参数化这些数据继续发送。但录下来的东西没弄懂还。
作者: 丰肚翩翩    时间: 2010-3-19 09:29
你要参数化的地方应该不会很多吧,如果不多的话,把需要参数化的地方自己人工翻译成字符串吧(自己参照assic码表)
作者: yuanhangwto    时间: 2010-3-19 12:10
标题: 呵呵
谢谢楼上的方法,让我弄了几个小时,还好数据不多,但不知道有没有更简便的方法,如果数据量大怎么办呢,写函数行吗?可惜我不会写脚本,希望楼下的继续讨论。
作者: 丰肚翩翩    时间: 2010-3-19 14:47
一个土点的办法:
先查找替换,把你录的十六进制数中“\”替换成“0”,然后再复制到一起,
比如“\x01\x02\x03”替换成“0x010x020x03”

然后就可以用这个函数了(在loadrunner中执行)
        char* end;
        long l;
        char buf[]="0x010x020x03";(把刚才替换完的串粘到这)
        char buf2[5];
        int i;
        int j;
        j=strlen(buf);
        for(i=0;i<j;i=i+4)
        {
        memset(buf2,0,sizeof(buf2));
        memcpy(buf2,buf+i,4);
        l=strtol(buf2,&end,16);
        lr_output_message ("%s 是 %c",buf2,l);
        }
    return 0;

这样程序就自动替你翻译了,你就不用自己查assic表了
作者: yuanhangwto    时间: 2010-3-24 17:59
标题:
我就是用的这个土办法,但是也感觉不方便哈。




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