51Testing软件测试论坛

标题: LR在socket协议处理特殊字符的问题 [打印本页]

作者: lijian422202    时间: 2007-8-22 18:12
标题: LR在socket协议处理特殊字符的问题
求助大虾,,,实在搞不定了!


现测试一个socket通讯的业务,碰到一个问题,具体如下:

系统是一个售票系统,通讯的业务包是一个锁票和卖票的过程,脚本说明吧。。。。。

action部分
#include "lrs.h"

Action()
{

unsigned char databuf[] = {0x30,0x00,0x00,0x00,0x31,0x30,0x31,0x30,0x31,0x31,0x33,0x30,0x31,0x30,0x31,0x0d,0x31,0x2c,0x32,0x2c,0x33,0x2c,0x34,0x2c,0x35,0x0d,0x32,0x30,0x30,0x37,0x2d,0x30,0x38,0x2d,0x32,0x32,0x09,0x33,0x38,0x33,0x09,0x31,0x09,0x35,0x09,0x31,0x0a};
unsigned short i;
unsigned char high,low;
char buff[10];
/*------------调用CRC算法-----------*/
lr_load_dll("FrontCRC.dll");
i=CRC16( databuf, sizeof( databuf));

lr_output_message("==========%x",i);
/*------------计算2个字节的值,并转换成char-----------*/
high = (i >> 8) & (unsigned short)0x00FF;
low = (i & (unsigned short)0x00FF);
sprintf(buff, "%c%c", high,low);


lr_save_string(buff, "CRC");
lr_output_message("===============%s",lr_eval_string("<CRC>"));

lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=LINUXSERVER2:2908",  LrsLastArg);

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

lrs_receive("socket0", "buf1", LrsLastArg);
    return 0;
}

data.ws部分---------由于没有通过第一步,所有没有把后面的BUF加上
;WSRData 2 1

send  buf0 49
        "0"
        "\x00\x00\x00"
        "10101130101\r1,2,3,4,5\r2007-08-22\t383\t1\t5\t1\n"
        "<CRC>"

recv  buf1 41
        "380&"
        "\x9a"
        "1"
        "\x00\x00\x00"
        "$010113020310708021\r31070802,1鐝"


-1


问题:unsigned char databuf[]定义的数据为售票一些信息,比如哪一场电影,哪一个座位等等,为了跑起这个脚本,需要做参数化的,但一旦参数化后,系统有个算法来算出CRC码,加在发送信息的后2个字节,脚本中已经完成。
问题出来了,由于CRC码是以16进制表示,如果转换成正常字符LR可以识别,但如果转换成特殊的就不能识别了,导致在data.ws里面的参数会出问题,请求解决。。。。
这里给大家一个LOG看看情况:
脚本中红色位置的输出
Action.c(14): ==========7276
Action.c(22): ===============rv   如果是这样脚本就可以通过

把数组里面的数据改动下,经过算法后
Action.c(14): ==========74d7
Action.c(22): ===============t?  这里的?号 在LR里面实际显示是一个方的黑点。  
这样脚本在SENT的时候就报错了。。真不知道怎么解决了,

请大家有时间帮帮忙。

[ 本帖最后由 lijian422202 于 2007-8-22 18:17 编辑 ]
作者: lijian422202    时间: 2007-8-22 18:15
发个字符的对照表:
十进制    字符
65           A
这样的就话脚本就不会出问题;
十进制    字符
58           :
这样有特殊字符的,就玩完了。。。。   

另外在录制发送的时候,录制到了特殊字符,是可以执行的,但由于售票系统的限制,一个场次一个座位只能卖一次,所以录制出来的不能用。。。而且脚本返回的最后2个字节显示也是特殊字符,但返回不影响脚本,呵呵,所以想解决发送的问题。
作者: lijian422202    时间: 2007-8-23 09:38
有没有高手帮忙解答...
作者: lijian422202    时间: 2007-8-24 10:45
哎 有点难度的问题,,就这样没有人过问,,
作者: lijian422202    时间: 2007-8-24 14:57
搞定这个问题了。。。。其实很简单。。
作者: tesge    时间: 2007-8-24 17:58
请问怎么解决的,谢谢
作者: nataliedu    时间: 2007-11-2 16:08
怎么解决的啊,楼上的共享一下,急~~~~~
作者: nataliedu    时间: 2007-11-2 16:40
我找到的解决方案~~~~~共享一下

LoadRunner VuGen WinSocket Patch
使用VuGen开发Win Socket脚本的时候,当Send Buffer中含有类似于"\"之类的特殊字符时,VuGen会报一个Can't transmit ... to send buffer之类的错误。

据HP(Mercury)官方解释,这是由于中国地区编码格式与美国英文编码格式不兼容造成。
建议将区域由中国更改为美国即可解决这个问题。

但是这个方法颇麻烦,于是我们有个高手修改了LR的wsrun32.dll文件,解决了这个问题。
经过我多次测试,未发现问题,但是由于不是官方提供的补丁,请大家慎用。

使用方法:

1.关闭所有打开的VuGen

2.备份LR\bin目录下的wsrun32.dll文件,将附件中的wsrun32.dll文件拷贝至LR\bin目录下

3.开始->运行,输入VuGen.ini,回车,修改VuGen.ini文件。在VuGen.ini文件中添加如下内容:
[ws_config]
LegacyLrsSend=1

4.保存并关闭VuGen.ini

5.现在重新使用VuGen打开并执行脚本
作者: dier1011    时间: 2012-10-25 11:49
回复 8# nataliedu


   附件在哪里,如果可以麻烦发送我邮箱一下,dier1011@163.com,O(∩_∩)O谢谢!
作者: sophia_923    时间: 2012-11-12 16:44
附件共享,谢谢!我的邮箱:sophia_923@hotmail.com
作者: 51lyfcslt    时间: 2012-11-30 10:26
我也急需这个DLL附件文件,麻烦也发给我一份:951918768@qq.com    非常感谢




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