51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3112|回复: 8
打印 上一主题 下一主题

[原创] 求助使用LR测试ORACLE存储过程的方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-2-16 09:45:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们要对ORACLE数据库的存储过程进行性能测试,不知道如何直接录制脚本,所以改用JAVA代码调用存储过程,不知到各位还有没有更好的方法,我们的存储过程主要完成查询,更新,删除操作,其中查询占据了大多数。
我们在LR中写的代码如下,其余的测试脚本于此类似。
/*
* LoadRunner Java script. (Build: 609)
*
* Script Description:
*                     
*/

import lrapi.lr;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.CallableStatement;

import oracle.jdbc.driver.OracleTypes;
import oracle.sql.ARRAY;


public class Actions
{
        ResultSet rs=null;
    CallableStatement cs;
    Connection con;
    private String[] anArrayIn;
        public int init() {

        String prcname = "p_get_account_list";//修改为对应存储过程名

      final   String sql = "{call " + prcname + " (?,?,?,?,?,?,?,?,?,?,?,?)}";
        //String[] anArrayIn = new String[]{"CID156","01","156"};//修改为对应数组参数
      
                   cs = null;
       try{
                        Class.forName("oracle.jdbc.driver.OracleDriver");

                        con=DriverManager.getConnection("jdbcracle:thinlocalhost:1521:ADMIN","abc","abc");
                        //System.out.println(con);
                        System.out.println("连接已打开");
            //oracle.sql.ArrayDescriptor anArrayDescriptor = new oracle.sql.ArrayDescriptor("ANESTEDTABLETYPE",con);
                        //oracle.sql.ARRAY anARRAYin =  new ARRAY(anArrayDescriptor,con,anArrayIn);
                        cs = con.prepareCall(sql);

                        cs.setString(1,"001");
                        cs.setString(2,"0086");
                        cs.setString(3,"");
                        cs.setString(4,"");
                        cs.setString(5,"");
                        cs.setString(6,"");
                        cs.setString(7,"");
                        cs.setString(8,"");
                        cs.setString(9,"");
                        cs.setString(10,"");
                               

            cs.registerOutParameter(11,OracleTypes.CURSOR);
            cs.registerOutParameter(12,OracleTypes.VARCHAR);

                       

            //System.out.println("注册失败!!!");
                }catch(ClassNotFoundException e){
                        System.out.println("注册失败!!!");
                }catch(SQLException e){
                        System.out.println("连接失败!!!");
                        e.printStackTrace();
                }
     
                return 0;
        }//end of init


        public int action() {
       
                try {
                       
                        cs.execute();
           rs=(ResultSet)cs.getObject(11);// 取得得數据結果集合
ResultSetMetaData rmeta = rs.getMetaData();//
int numColumns=rmeta.getColumnCount();// 确定數据集的字段個數
// 取得字段名
for(int i=1;i<=numColumns;i++)
{
if(i<numColumns)
System.out.print(rmeta.getColumnName(i)+" | ");
else
System.out.println(rmeta.getColumnName(i));
}

while(rs.next())
{
for(int i=1;i<=numColumns;i++)
{
if(i<numColumns)// a,b表中的字段不一定是字符類型,我在此沒有判斷並全部使用getString方法
System.out.print(rs.getString(i)+" | ");
else
System.out.println(rs.getString(i));
}
}

            
                       
                } catch (SQLException e) {
                        e.printStackTrace();
                }
                return 0;
        }//end of action



        public int end() {

            if (cs != null){
                                try {
                                        cs.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                        }
                        if (con != null){
                                try {
                                        con.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                        }
        System.out.println("关闭成功!!!");
                return 0;
        }//end of end
/**
        public static void main(String [] args){
           Actions actions = new Actions();
           actions.init();
           actions.action();
           System.out.println("查询ACCOUNT_LIST存储过程调用结束!!!");
           actions.end();
        }
**/
}

期盼各位大侠的回复,谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-2-21 08:44:54 | 只看该作者
可以在pl/sql中执行存储过程,将整个过程录制下来!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-2-21 09:21:27 | 只看该作者
怎么录制啊,LOADRUNNER好像没有办法直接录制PL/SQL的执行过程啊,哥们说详细点如何?
等待回复
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2006-2-21 09:23:57 | 只看该作者
期待中~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2006-2-21 11:44:59 | 只看该作者
协议选择oracle 2层,录制时要求选应用程序,就选pl/sql。
然后登陆pl/sql,打开你要测试的存储过程,写入参数,执行。
这些过程LR都会录制下来。
我这样是可以的,不知道能不能满足你的要求!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-3-31 18:13:17 | 只看该作者
原帖由 xyuan007 于 2006-2-21 11:44 发表
协议选择oracle 2层,录制时要求选应用程序,就选pl/sql。
然后登陆pl/sql,打开你要测试的存储过程,写入参数,执行。
这些过程LR都会录制下来。
我这样是可以的,不知道能不能满足你的要求!

我使用这种方法,但是录制不了。在选择了PL/SQL然后点击确定后,就没有任何反映了,始终为“0 events”。这是为什么呢?
协议就是oracle 2层
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-3-31 18:14:45 | 只看该作者
原帖由 xyuan007 于 2006-2-21 11:44 发表
协议选择oracle 2层,录制时要求选应用程序,就选pl/sql。
然后登陆pl/sql,打开你要测试的存储过程,写入参数,执行。
这些过程LR都会录制下来。
我这样是可以的,不知道能不能满足你的要求!


不知是否与Oracle或者PL/SQL的版本有关?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-4-5 14:28:36 | 只看该作者
原帖由 xyuan007 于 2006-2-21 11:44 发表
协议选择oracle 2层,录制时要求选应用程序,就选pl/sql。
然后登陆pl/sql,打开你要测试的存储过程,写入参数,执行。
这些过程LR都会录制下来。
我这样是可以的,不知道能不能满足你的要求!

可以录制了,回放的时候还需要修改什么吗?因为我重新回放的时候,脚本会在执行到存储过程执行的部分,就停滞不前,没有任何反应,也不抱错。
这是为什么?
谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2007-4-12 10:36:40 | 只看该作者

TO:Ironside

TO:
我使用这种方法,但是录制不了。在选择了PL/SQL然后点击确定后,就没有任何反映了,始终为“0 events”。这是为什么呢?
协议就是oracle 2层

我以前也遇到过这个问题,后来在别人的提示下,用了ORACLE 9i的客户端+PL/SQL 就可以正常录制.ORACLE 10g +PL/SQL 就只是0 events
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-26 03:40 , Processed in 0.085762 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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