loadrunner之Transaction关于LR_AUTO、 LR_PASS、 LR_FAIL、 LR_STOP

本文介绍LoadRunner中事务的设置方法及用途,包括手动添加关键字和录制过程中直接设置两种方式,并详细解释了不同事务状态的应用场景。

对于集合点、检查点的设置有两种方法,一种是在录制完脚本以后,手工在脚本中添加相关的关键字例如lr_start_transaction等,这种方法对脚本语言的理解能力要求较高。另一种是直接在录制的过程中添加集合点、检查点,这样lr就会自动把集合点、检查点的关键字添加到脚本中。

事务:就是用户某一步或者某几步操作的集合。当我们需要通过某一步或是某几步操作从而衡量服务器的性能的时候,这时我们就把这些操作设置成一个事务,当事务开始执行的时候lr就开始计时当事务运行结束计时停止,执行事务的时间会在在最后的结果中显示出来。

实例:登录sina网站,把点击“天气”设置成一个事务,衡量服务器处理处理该事务的性能。

1,点击红色的录制按钮,输入URL开始录制。弹出sina的首页,点击<!--[if !vml]--><!--[endif]-->设置事物的开始位置,这时弹出事务开始对话框要求输入事务的名称,一般来讲我们都会把事务名称命名为容理解的名字,此处我们命名为“天气”

点击OK完成事务的开始点设置。

2,在sina页面上点击“天气”的连接,出现天气页面

3,点击<!--[if !vml]--><!--[endif]-->设置事务的结束点,这时弹出事务结束对话框

lr根据匹配原则已经自动把事务名字一栏填入“天气”,我们只需要选择事务的状态。状态有三种LR_AUTO、 LR_PASS、 LR_FAIL、 LR_STOP,

LR_AUTO:事物的状态被自动设置,如果事务执行成功,状态设置为PASS,如果执行失败,状态设置为FAIL,如果由于异常中断,状态被设置成STOP.

LR_PASS:事务如果执行成功,代码的返回状态就是PASS。

LR_FAIL:事务如果执行失败,代码的返回状态就是FAIL。

一般我们选择LR_AUTO。 那么我们会有疑问什么时候我们选择PASS或者是FAIL呢?

Lr的帮助文档中有一条例子,可以很好的帮助我们理解

lr.start_transaction("GetStocks");
try {

String stocks[];
stocks = orStockServer1.getStockList();
if (stocks.length == 0)

throw new Exception("No stocks returned/available");
lr.end_transaction("GetStocks", lr.PASS);
}

catch (Exception e1) {

lr.end_transaction("GetStocks", lr.FAIL);

lr.message(" An exception occurred : " e1.toString() );

}

代码说明:这时一个得到stock list的例子,程序中设置了异常检查来确保getStockList()方法返回非零的长度。

同时我也进行了如下的脚本修改

………………

lr_start_transaction("天气");

lr_think_time( 3 );

web_add_cookie("mysinal=ai_erica; DOMAIN=weather.news.sina.com.cn");

web_add_cookie("SINAGLOBAL=221.219.31.58.924471172571904604; DOMAIN=weather.news.sina.com.cn");

………………

lr_end_transaction("天气", LR_FAIL);

在最后我把该事物的结束状态设置为FAIL,然后运行该脚本,其实该事物的运行是没有任何错误的,完全可以运行成功,只是在最后我把事务的状态手工设置为FAIL。当脚本执行完后,查看Ececution Log看到这样一条log语句:

Action.c(297): Notify: Transaction "天气" ended with "Fail" status (Duration: 5.1436).

那么这样做的意义是什么呢?为什么要设置事务结束状态呢?原因就是在Analysis中生成结果图表的时候我们就能看到这个名为“天气”的事务执行是失败的。如果语句是这样:

Action.c(297): Notify: Transaction "天气" ended with "Pass" status (Duration: 5.1436).

Analysis中生成结果图表的时候我们就能看到这个名为“天气”的事务执行是成功的。

设置事务结束状态的用途就在这里。试想Lr为什么能自动生成结果图表?无非就是Analysis通过一些定义好的API获取执行脚本过程中的返回值,从而显示出事务执行的正确还是错误,或是显示出响应时间等信息,然后调用GUI使我们很直观的看到测试结果。

<think>嗯,用户专门询问了LoadRunnerlr_db_connect函数的用法和示例,看来是遇到数据库连接测试的具体实现问题了。从引用的资料来看,用户已经查阅过部分技术文档,但对具体参数配置和实际代码实现还有疑问。用户提供的引用内容很有价值:[3]详细展示了Oracle连接示例,[1][2][4]补充了关联函数的信息。需要重点整合这些材料,特别要注意用户标记的OLEDB连接Oracle的案例。用户可能是性能测试工程师,正在编写数据库压测脚本。技术上要强调三个关键点:函数参数结构必须严格遵循"ConnectionType=OLEDB"这样的键值对格式;连接字符串的拼接规则(引号闭合);SQL执行前后的连接/断开必须成对出现(防止资源泄漏)。虽然引用里没提结果集处理,但用户提供的示例包含lr_db_getValue循环,这个实用技巧可以补充。考虑到LoadRunner版本兼容性,需要提醒连接方式差异(如Oracle可能需要Provider版本更新)。错误排查部分特意增加了防火墙提示,这是实践中容易忽略的点。最后用不同数据库类型收尾,帮助用户举一反三。用户给出的代码片段风格显示ta习惯写详细注释,所以提供的示例也保持了这种风格,包括事务分块和内存释放建议。最后特意留了事务时间监控的延伸问题,因为性能测试者通常关心这个。</think> 以下是根据LoadRunner官方资料整理的`lr_db_connect()`函数详解,包含用法、参数说明和完整示例: ### 一、函数功能 用于在Web Services协议脚本中建立数据库连接,支持以下数据库类型: 1. **SQL** (原生SQL Server) 2. **OLEDB** (Oracle/SQL Server等) 3. **ODBC** 4. **ORACLE** (专用连接) [^3] --- ### 二、函数原型 ```c int lr_db_connect( "StepName=<step_name>", "ConnectionString=<connection_string>", "ConnectionName=<connection_name>", "ConnectionType=<connection_type>", LAST ); ``` --- ### 三、参数详解 | 参数 | 说明 | 示例值 | |------|------|--------| | **StepName** | 步骤名称(在结果报告中显示) | "StepName=DB_Connect" | | **ConnectionString** | 数据库连接字符串 | Oracle: `"Provider=OraOLEDB.Oracle.1;Data Source=ORCL;User ID=scott;Password=tiger;"` | | **ConnectionName** | 连接标识(后续操作需引用) | "ConnectionName=db_orcl" | | **ConnectionType** | 连接类型(必须大写) | `"ConnectionType=OLEDB"` [^3] | --- ### 四、完整示例(连接Oracle数据库) ```c Action() { // 1. 建立数据库连接 lr_db_connect( "StepName=Connect_to_Oracle", // 步骤名称 "ConnectionString=Provider=OraOLEDB.Oracle.1;" "Data Source=ORCL;" // Oracle服务名 "User ID=scott;" "Password=tiger;", // 账户密码 "ConnectionName=conn_db", // 连接标识 "ConnectionType=OLEDB", // 连接方式 LAST ); // 2. 执行SQL查询 int rowCount = lr_db_executeSQLStatement( "StepName=Query_Users", "ConnectionName=conn_db", // 引用上面建立的连接 "SQLStatement=SELECT * FROM lr_auto_users", "DatasetName=user_data", // 结果集名称 LAST ); lr_output_message("查询到%d条记录", rowCount); // 3. 断开连接(必须调用) lr_db_disconnect( "StepName=Disconnect_DB", "ConnectionName=conn_db", // 指定要断开的连接 LAST ); } ``` **关键点说明**: 1. 连接字符串中的空格和分号需严格匹配[^3] 2. `ConnectionName`在后续操作中作为连接句柄使用 3. 必须调用`lr_db_disconnect()`释放资源[^1] --- ### 五、常见问题解决 1. **连接失败** - 检查`Provider`版本(Oracle需安装对应客户端) - 关闭数据库防火墙(如Oracle 1521端口) - 使用`tnsping ORCL`验证网络连通性 2. **中文乱码** 在连接字符串中添加: `"Charset=UTF8;"` 或 `"NLS_LANG=AL32UTF8;"` 3. **连接泄漏** 每个`lr_db_connect()`必须对应一个`lr_db_disconnect()`[^1] --- ### 六、不同类型数据库连接示例 ```c // ODBC连接SQL Server lr_db_connect( "ConnectionString=DSN=my_dsn;UID=sa;PWD=123456;", "ConnectionType=ODBC", ... ); // 原生Oracle连接 lr_db_connect( "ConnectionString=User=scott;Password=tiger;Server=ORCL;", "ConnectionType=ORACLE", // 注意类型名全大写 ... ); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值