51Testing软件测试论坛

标题: lr_db_getvalue获取参数长度疑问?????? [打印本页]

作者: hankliu520    时间: 2011-12-23 10:51
标题: lr_db_getvalue获取参数长度疑问??????
本帖最后由 hankliu520 于 2011-12-23 11:51 编辑

在用双协议进行一些操作时碰到一些问题,在使用lr_db_getvalue获取数据库中列值时会有截断现象。暂时不知道到底什么原因,谷歌了好久没找到答案,求助。下面截取其中操作数据库的一段代码

loadrunner代码如下:lr_db_connect("StepName=DatabaseConnection",
                      "ConnectionString=Data Source=*****;Initial Catalog=*****ersist Security Info=True;User ID=****assword=****",
                      "ConnectionName=DatabaseConnection",
                      "ConnectionType=SQL",
                      LAST );


lr_db_executeSQLStatement("StepName=PerformQuery",
                                          "ConnectionName=DatabaseConnection",
                                          "SQLStatement=select  HotelAddress,HotelName from *****",
                                           "DatasetName=MyDataset",
                                          LAST);
lr_db_getvalue("StepName=GetValue",
                      "DatasetName=MyDataset",
                      "Column=HotelAddress",
                      "Row=next",
                     "OutParam=HotelAddress1",
                     LAST);
lr_db_getvalue("StepName=GetValue",
                      "DatasetName=MyDataset",
                      "Column=HotelName",
                       "Row=next",
                     "OutParam=HotelName1",
                      LAST);
                      lr_output_message("The HotelAddress is: %s", lr_eval_string("{HotelAddress1}") );
                      lr_output_message("The HotelName is: %s", lr_eval_string("{HotelName1}") );

loadrunner输出结果如下:
Starting action Action.Action.c(20): DB Connection "DatabaseConnection" started ... Wait ....
Action.c(144): SQL Statement  execution "erformQuery" startedAction.c(144): ================================================
Action.c(150): Get db value "GetValue" started
Action.c(150): Notify: Saving Parameter "HotelAddress1 = 长春市朝阳区芍药居16号楼(靠近"
Action.c(150): ================================================
Action.c(156): Get db value "GetValue" started
Action.c(156): Notify: Saving Parameter "HotelName1 = 长春延\xb0"
Action.c(156): ================================================
Action.c(162): Notify: Parameter Substitution: parameter "HotelAddress1" =  "长春市朝阳区芍药居16号楼(靠近"Action.c(162): The HotelAddress is: 长春市朝阳区芍药居16号楼(靠近
Action.c(163): Notify: Parameter Substitution: parameter "HotelName1" =  "长春延"
Action.c(163): The HotelName is: 长春延
Ending action Action.
数据库中的数据如下:
[attach]76814[/attach]
表设计如下:
[attach]76815[/attach]

可以看到保存参数时就已经进行了截断处理了。
后面的打印输出就直接出来了。

进行了如下实验:
插入了一条纯数字数据长度为40位.
结果正常.
Action.c(18): ================================
Action.c(18): 1      012345678901234567890...
Action.c(18): ********End printing ***********
Action.c(18):
Action.c(29): Get db value "GetValue" started
Action.c(29): Notify: Saving Parameter "HotelName1 = 0123456789012345678901234567890123456789"
Action.c(29): ================================================
Action.c(36): Notify: Parameter Substitution: parameter "HotelName1" =  "0123456789012345678901234567890123456789"


对刚才的hotelname进行了单独实验,打印输入如下:
Starting action Action.
Action.c(5): DB Connection "DatabaseConnection" started ... Wait ....
Action.c(13): SQL Statement  execution "erformQuery" started
Action.c(13): ================================================
Action.c(18): Dataset action "rintDataset" started
Action.c(18):
Action.c(18): ******** Start printing ***********
Action.c(18): Number of records in dataset  = 1
Action.c(18): Num.   HotelName               
Action.c(18): ================================
Action.c(18): 1      长春延安西路店                  
Action.c(18): ********End printing ***********
Action.c(18):
Action.c(29): Get db value "GetValue" started
Action.c(29): Notify: Saving Parameter "HotelName1 = 长春延\xb0"
Action.c(29): ================================================
Action.c(36): Notify: Parameter Substitution: parameter "HotelName1" =  "长春延"
Action.c(36): The HotelName is: 长春延
Action.c(38): Dataset action "rintDataset" started
Ending action Action.


通过以上暂时可以看出来,是函数lr_db_getvalue对中文获取支持不好,会截断,函数lr_db_dataset_action 打印时中文可以全部打印出来。
不知道这个结论是否正确。
作者: hankliu520    时间: 2011-12-23 16:03
顶一小下。
作者: hankliu520    时间: 2011-12-23 17:31
该问题是sqlserver中字符存储采用unicode格式,ucs-2。
比如数据库中存的是:123abc一二三四五六七八九零一二三四五六
用LEN(**)获取到该长度为22位。
而lr中的lr_db_getvalue的获取参数时也是获取的22位,但是在lr中22位是按照每个字节来算的。
所以对于汉字的话,只能取到一半。
lr中用strlen 打印的长度也是22.但是值为123abc一二三四五六七八

找到好的解决办法在说。目前情况只能到这里了。




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