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