51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3551|回复: 2
打印 上一主题 下一主题

[原创] lr_db_getvalue获取参数长度疑问??????

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-12-23 10:51:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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.
数据库中的数据如下:

表设计如下:


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

进行了如下实验:
插入了一条纯数字数据长度为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 打印时中文可以全部打印出来。
不知道这个结论是否正确。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2011-12-23 16:03:03 | 只看该作者
顶一小下。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2011-12-23 17:31:19 | 只看该作者
该问题是sqlserver中字符存储采用unicode格式,ucs-2。
比如数据库中存的是:123abc一二三四五六七八九零一二三四五六
用LEN(**)获取到该长度为22位。
而lr中的lr_db_getvalue的获取参数时也是获取的22位,但是在lr中22位是按照每个字节来算的。
所以对于汉字的话,只能取到一半。
lr中用strlen 打印的长度也是22.但是值为123abc一二三四五六七八

找到好的解决办法在说。目前情况只能到这里了。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-5-1 22:43 , Processed in 0.074984 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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