luxiuxiu1987 发表于 2011-6-20 11:23:16

用loadrunner如何取ajax Response中的内容,显示乱码啊?

ajax Response body返回值如下:
<a href="javascript:void(0)" onclick=ShowRoomOtherInfo('6daefad473ae4f9c8067b62ddf7adec5')><u>鍗曚汉鎴?/u></a></td><td align=center valign=middle class=btgry> RMB 3278</td><td align=center valign=middle class=btgry>銕?/td><td align=center valign=middle class=btgry></td><td align=center valign=middle class=btgry></td><td align=center valign=middle class=btgry><a href="javascript:void(0)" onclick="AddToOrder('2125411','PLAZA(PLAZA ROOM) 骞垮満閰掑簵锛堝箍鍦烘埧锛?,'鍗曚汉鎴?,'','','','2011-7-1,3278','2011-07-01','2011-07-02')" >
红色标示部分为要取的值
写的脚本如下:
//匹配hotelid和hotelname
                web_reg_save_param_ex(
                "ParamName=RoomName",
                "LB=<u>",
                "RB=?/u>",
                SEARCH_FILTERS,
                "Scope=Body",
                "RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
                LAST);
                web_reg_save_param_ex(
                "ParamName=RoomPrice",
                "LB=\'\',\'\',\'",
                "RB=\'",
                SEARCH_FILTERS,
                "Scope=Body",
                "RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
                LAST);
        //酒店房型返回值
        web_custom_request("HotelInternational.ashx_2",
                "URL=http://hotel.xxx.com/Ajax/HotelInternational.ashx",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/plain",
                "Referer=http://hotel.xxx.com/HotelInternationalDetail.aspx?strCityId={CityCode}&strInfoCode={HotelCode}&checkin={StartDay}&checkout={EndDay}",
                "Snapshot=t14.inf",
                "Mode=HTML",
                //"Body=type=pricelist&hotelcode={HotelCode}&hotelid={hotelIDName}&checkin={StartDay}&checkout={EndDay}&cityid={CityCode}",
                "Body=type=pricelist&hotelcode={HotelCode}&hotelid={HotelId}&hotelname={HotelName}&checkin={StartDay}&checkout={EndDay}&cityid={CityCode}",
                LAST);
运行脚本后提示错误没找到rooname?我应该如何处理ajax返回内容中的乱码数据??能否取值后转成正常的中文显示?请高手指教

云层 发表于 2011-6-20 14:43:50

对于ajax的返回内容由于无法被lr直接做utf-8的转换所以你需要自己用LR的转换函数对编码进行变化

函数貌似是lr_convert_string,记得不是很清楚了

lix43420 发表于 2011-6-20 15:27:51

楼上所说函数应该是lr_convert_string_encoding才是,具体参数可以看看帮助文档,希望对你有帮助。

luxiuxiu1987 发表于 2011-6-20 18:01:56

回复 3# lix43420
回楼上,小弟愚钝,话说网上找到的始终都是将中文转为utf-8,没说咋把utf-8转成中文啊。。。

luxiuxiu1987 发表于 2011-6-20 18:03:52

怎么把utf-8转成中文嘞,请高手们赐教,
容忍俺问这个小白问题吧。。实在是走投无路了。。请指教啊。。。

云层 发表于 2011-6-20 20:24:56

look this
http://www.51testing.com/index.php?uid-104-action-viewspace-itemid-200711

luxiuxiu1987 发表于 2011-6-21 09:39:27

回复 6# 云层
谢谢云层提供的资料,终于转成中文了,哈哈
lr_convert_string_encoding(lr_eval_string("{RoomName}"),"utf-8",NULL,"my");
这里使用函数lr_convert_string_encoding函数,将RoomName参数中的utf-8编码转换为当前系统的编码

luxiuxiu1987 发表于 2011-6-21 09:40:54

本帖最后由 luxiuxiu1987 于 2011-6-21 09:45 编辑

话说,匹配roomname的时候,
web_reg_save_param_ex(
"ParamName=RoomName",
"LB=<u>",
"RB=?/u>",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
LAST);
显示无法找到,只能把问号去掉进行匹配,
web_reg_save_param_ex(
"ParamName=RoomName",
"LB=<u>",
"RB=/u>",
SEARCH_FILTERS,
"Scope=Body",
"RequestUrl=*hotel.xxx.com/Ajax/HotelInternational.ashx*",
LAST);
才能得到的结果是:鍗曚汉鎴?,进行转码后变成:单人房<;
多出个单边的尖括号,咋处理呢?为啥不能一开始的时候就把尖括号去掉呢?

云层 发表于 2011-6-21 10:20:39

你关联的时候多做点,或者回头用lr_save_var自己去过滤掉最右边的几个字符

luxiuxiu1987 发表于 2011-6-21 11:12:27

再次感谢云层大人的回答,
本人查找相关资料如下
lr_save_var
C Language
int lr_save_var (const char * param_value, unsigned long const value_len, unsigned long const options, const char * param_name);
param_value:参数值
value_len:值的字节长度
options:参数选项,一般为0。
param_name:参数名称。
lr_save_var函数把指定的变长字符串赋值给参数。这个函数在关联查询的时候非常有用。需要使用lr_eval_string来确定参数的值。
例子:
在下面的例子中, lr_save_var 用来限制参数的长度。
Action()
{
       #define MAX_NAME_LEN 4
// 创建参数, InName
       lr_save_string("Fitzwilliam", "InName");
// 把 "InName"的前四个字节保存到 "ShortName"
       lr_save_var( lr_eval_string("{InName}"),
            MAX_NAME_LEN, 0, "ShortName");
       return 0;
}
Output:
Action.c(8): Notify: Saving Parameter "InName = Fitzwilliam"
Action.c(10): Notify: Saving Parameter "ShortName = Fitz"
前面关联的左右边界都是静态的。
但因为我需要取值得roomname,左边界是动态的,并且系统返回的RoomName是不定长度的,仅仅通过一个关联函数是无法处理的,这个时候还需要使用一个函数strtok()来进行字符内容切割(类似于正则表达式)。

云层 发表于 2011-6-21 11:14:36

帮助有东西没有告诉你
lr_save_var可以这样写lr_save_var(x+2,...,....)你可以指定第几位开始取多少位的

luxiuxiu1987 发表于 2011-6-21 11:36:07

使用方法如下:
char *token;
char temp;
lr_convert_string_encoding(lr_eval_string("{RoomName}"),"utf-8",NULL,"myroom");//将utf-8转成系统当前的编码
strcpy(temp,lr_eval_string("{myroom}"));//取出参数值,并且赋值给变量temp
token=(char *)strtok(temp,"<");//使用<符号作为分隔符
lr_error_message(token);
能取出正常房间名称

almarao 发表于 2011-7-1 15:28:00

学习了,都是高手,受菜鸟一拜。

hujing1229 发表于 2015-1-4 13:55:17

谢谢分享,写得有始有终 赞一下

suifang21 发表于 2016-10-14 09:26:13

luxiuxiu1987 发表于 2011-6-21 09:39
回复 6# 云层
谢谢云层提供的资料,终于转成中文了,哈哈
lr_convert_string_encoding(lr_eval_string(" ...

在吗?请问这段代码要放置在哪里啊?
页: [1]
查看完整版本: 用loadrunner如何取ajax Response中的内容,显示乱码啊?