oracle++dtcol,转-LoadRunner动态访问Oracle数据库+多协议录制解决方案

一、LoadRunner9.0动态访问Oracle数据库

#include "lrd.h"

static LRD_INIT_INFO lnitlnfo = {LRD_INIT_INFO_EYECAT};

static LRD_DEFAULT_DB_VERSION DBTypeVersion[] = {{LRD_DBTYPE_NONE,LRD_DBVERSION_NONE}};

//这里的LRD_VAR_DESC数据结构声明是很重要的,他是用来存储sql结果数据集的结构体,第一个参数头文件中就是这么写的,第二个参数是最

大行数,第三个参数是每一行的最大长度,如果获得的查询结果比定义的长,运行时就会报错,提示列被截断,最后一个参数是查询结果的类型,可以再帮助中的索

引输入data types, database,列出的表格中是各种变量类型的名称

static LRD_VAR_DESC OBJECT_NAME_D1;

static LRD_VAR_DESC NUM ={LRD_VAR_DESC_EYECAT, 10, 32, LRD_DBTYPE_ORACLE, {1, 1, 0},DT_LONG_VARCHAR};

//定义初始化数据库的各种变量

static void FAR * OraEnv1;

static void FAR * OraSvc1;

static void FAR * OraSrv1;

static void FAR * OraSes1;

static void FAR * OraStm1;

static void FAR * OraDef1;

static  unsigned long uliFetchedRows;

unsigned long     rownum;

//初始化数据库

lrd_init(&lnitlnfo, DBTypeVersion);

lrd_initialize_db(LRD_DBTYPE_ORACLE,3,0);

lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1,0,0);

lrd_ora8_handle_alloc(OraEnv1,SVCCTX,&OraSvc1,0);

lrd_ora8_handle_alloc(OraEnv1,SERVER,&OraSrv1,0);

lrd_ora8_handle_alloc(OraEnv1,SESSION,&OraSes1,0);

//连接数据库,我的是oracle,odbc中连接数据库名称就是这个

lrd_server_attach(OraSrv1,"数据库名",-1,0,0);

lrd_ora8_attr_set_from_handle(OraSvc1,SERVER,OraSrv1,0,0);

//用户名和密码

lrd_ora8_attr_set(OraSes1,USERNAME,"用户名",-1,0);

lrd_ora8_attr_set(OraSes1,PASSWORD,"密码",-1,0);

//初始化连接session

lrd_ora8_attr_set_from_handle(OraSvc1,SESSION,OraSes1,0,0);

//开始连接数据库

lrd_session_begin(OraSvc1,OraSes1,1,0,0);

lrd_ora8_handle_alloc(OraEnv1,STMT,&OraStm1,0);

//设定sql语句

lrd_ora8_stmt(OraStm1, "select XXX from XXX", 1, 0, 0);

//执行sql语句,并且将结果行数返回到rownum中

lrd_ora8_exec(OraSvc1, OraStm1, 0, 0,&rownum, 0, 0, 0, 0, 1);

//绑定该列

lrd_ora8_bind_col(OraStm1,&OraDef1,1,&NUM,0,0);//设定保存列中的某个数据到row中,第二个参数为第几列,第三个参数为第几行(只能保存一个值),最后一个参数就是你想要保存到的parameter名称

lrd_ora8_save_col(OraStm1, 1, 1, 0, "resu1");

lrd_ora8_fetch(OraStm1, -2, 2, &rownum, 0, 2, 0, 0);

lr_error_message("sql result: %s", lr_eval_string("{resu1}"));

//释放连接数据库的各种变量

lrd_handle_free(&OraStm1, 0);

lrd_session_end(OraSvc1, OraSes1, 0, 0);

lrd_server_detach(OraSrv1, 0, 0);

lrd_handle_free(&OraEnv1, 0);

(1)首先要安装oracle客户端,通过客户端连接oracle数据库。如果不装数据库客户端会报错,如下:illegal character `\0241'

(2)写访问oracle数据库的脚本用oracle(2-tier)+web协议新建脚本,否则执行时会报错,如下:Error -- Unresolved symbol : lrdfnc_init 然后将录制的脚本拷到写好的访问oracle数据库脚本中。

(3)数据库连接不上 Action.c(47): Error: lrdo_server_attach: "OCIServerAttach" return-code=OCI_ERROR, error-code=12154: Action.c(47): Error:     ORA-12154: TNS: 无法解析指定的连接标识符 Action.c(47): server_attach: ERROR, return-code=LRDE2009.  ServerHandle=OraSrv1, ServerID="XXXX"

(4)sql语句错误,报如下错误 Action.c(81): Error: lrdo_ora8_fetch: "OCIStmtFetch" return-code=OCI_ERROR, error-code=24338: Action.c(81): Error:     ORA-24338: 未执行语句句柄 Action.c(81): lrd_ora8_fetch: ERROR, return-code=LRDE2009.  StmtHandle=OraStm1, 0 row(s) fetched

(5)

如果用controller执行涉及好的脚本报如下错误:you do not have a license for this vuser

type please contact mercury interactive to renew your license    解决方案:原因是由于目前使用的License不支持Socket场景运行,将License替换一下就可以了。    使用的License也就是目前网络上比较通用的两个:    global 100user:AEAMAUIK-YAFEKEKJJKEEA-BCJGI    10000 web clients:AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB    一开始使用的10000 web clients的,出现该问题,后来替换成global 100 user 就可以了。具体视情况而定。

二、多协议录制脚本,协议web(http/html),ie打开后没有反应了   在recording options中advanced里选择support charset utf-8

三、多协议录制脚本,协议web(http/html),ld根本没反应    修改ie设置,工具-高级,把启动第三方浏览器扩展(需要重启动)

四、单协议录制脚本,系统中有些东西出不来    原因:客户端安装了插件,插件会向服务器发送请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值