51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 5933|回复: 10
打印 上一主题 下一主题

[求助] LR在socket协议处理特殊字符的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-22 18:12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助大虾,,,实在搞不定了!


现测试一个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 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-8-22 18:15:22 | 只看该作者
发个字符的对照表:
十进制    字符
65           A
这样的就话脚本就不会出问题;
十进制    字符
58           :
这样有特殊字符的,就玩完了。。。。   

另外在录制发送的时候,录制到了特殊字符,是可以执行的,但由于售票系统的限制,一个场次一个座位只能卖一次,所以录制出来的不能用。。。而且脚本返回的最后2个字节显示也是特殊字符,但返回不影响脚本,呵呵,所以想解决发送的问题。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2007-8-23 09:38:56 | 只看该作者
有没有高手帮忙解答...
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-8-24 10:45:31 | 只看该作者
哎 有点难度的问题,,就这样没有人过问,,
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2007-8-24 14:57:02 | 只看该作者
搞定这个问题了。。。。其实很简单。。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-8-24 17:58:39 | 只看该作者
请问怎么解决的,谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-11-2 16:08:12 | 只看该作者
怎么解决的啊,楼上的共享一下,急~~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-11-2 16:40:31 | 只看该作者
我找到的解决方案~~~~~共享一下

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打开并执行脚本
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2012-10-25 11:49:40 | 只看该作者
回复 8# nataliedu


   附件在哪里,如果可以麻烦发送我邮箱一下,dier1011@163.com,O(∩_∩)O谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2012-11-12 16:44:12 | 只看该作者
附件共享,谢谢!我的邮箱:sophia_923@hotmail.com
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2012-11-30 10:26:22 | 只看该作者
我也急需这个DLL附件文件,麻烦也发给我一份:951918768@qq.com    非常感谢
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-9 00:35 , Processed in 0.076391 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表