web_custom_request("CALL-H001I",
"EncType=text/xml; charset=UTF-8", 通过以上的两点试验,说明直接参数化的方法是行不通的,我们必须另找办法。在LoadRunner中,为我们提供了一个字符串编码转换的函数lr_convert_string_encoding,用法如下:
int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);
该函数有4个参数,含义如下:
sourceString:被转换的源字符串。
fromEncoding:转换前的字符编码。
toEncoding:要转换成为的字符编码。
paramName:转换后的目标字符串。
在本例中可以看到,我们需要把字符编码转换为UTF-8格式,因此用法如下:
lr_convert_string_encoding("汽车",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
这样一来,就成功地完成了字符串的编码转换。此时我们就可以对"汽车"这个参数进行参数化,参数化的方法很简单,地球人都知道!于是最终的脚本编码看起来像这样:
lr_convert_string_encoding("lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");
完整的示例代码如下: char string[5000]; char tmp[10]; lr_convert_string_encoding(lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str"); strcpy(tmp,lr_eval_string("{str}")); sprintf(string,"BodyBinary=CALL H001I 1 04 0 %s 01 鏆傛棤鍙风爜 1 1 1000000 1000000.00 A110102641122043#1 闇嶈景榫""x99 1 0 0 01 鍘﹂棬 100 A1 442000050 031 "r"n",tmp); web_custom_request("CALL-H001I", "EncType=text/xml; charset=UTF-8", string, LAST);
"BodyBinary=CALL H001I 1 04 0 浣忔埧 01 鏆傛棤鍙风爜 antorgan>1 1 1000000 1000000.00 A110102641122043#1 闇嶈景榫""""x99" " 1 0 0 01 鍘﹂棬 100 A1 442000050 031 "r"n" "", LAST);
从上面脚本的黑体部分可以看出,LoadRunner向服务器提交的请求body部分,输入的中文字段被变成了诸如“浣忔埧”这样的乱码。遇到这样的情况,相信大多数人和我最开始一样,只能不加理会,直接点击回放,然后我们很高兴地发现,脚本回放成功了!这些乱码是可以被LR识别的,而且到应用系统中查看运行的结果,也没有问题,显示的是正确的中文。但是且慢!先不要高兴得太早,我们很快就会意识到:如果这个字段我们是需要进行参数化的怎么办?我们应该如何造出这种乱码的字呢?
首先,我们直接用正常的字去参数化,这里只举其中的一个例子来说明,比如这个字段,我们用参数值“汽车”直接在脚本中替换“浣忔埧”,脚本回放失败。然后就想到会不会是所有的中文字段都需要用才行呢?于是把所有的乱码都用简体字替换,脚本回放还是失败。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/