51Testing软件测试论坛
标题:
求助使用LR测试ORACLE存储过程的方法
[打印本页]
作者:
javaio
时间:
2006-2-16 09:43
标题:
求助使用LR测试ORACLE存储过程的方法
我们要对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("jdbc
racle:thin
localhost: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();
}
**/
}
期盼各位大侠的回复,谢谢
作者:
shengyan
时间:
2006-6-1 18:43
我是小菜菜
你用的是javascript vuser协议的吗
作者:
shengyan
时间:
2006-6-2 10:54
我把上面的代码写在脚本中,点run后vgen就会死掉,这是为什么呀,应该怎么操作呢
作者:
mm_louis
时间:
2006-6-2 15:47
我也不知道
作者:
snowflake
时间:
2006-6-2 16:22
你单独的测试SP可以通过sql plus
SQL>set timing on ;
SQL>exec p_get_account_list 参数;
运行过后将直接返回运行时间
也可以把SP当到JAVA代码中去,通过实现的功能来测试SP的效率
[
本帖最后由 snowflake 于 2006-6-7 16:23 编辑
]
作者:
shengyan
时间:
2006-6-2 16:33
那我想通过并发的形式来测试存储过程呢.那应该是在lr中写调用存储过程的代码吧?
作者:
snowflake
时间:
2006-6-2 16:48
没有必要那么做,如果是通过并发测试的话采用后面那种方法才测试.也就是通过SP实现的功能来测试它的性能,通过响应时间来查看效率
[
本帖最后由 snowflake 于 2006-6-2 16:49 编辑
]
作者:
shengyan
时间:
2006-6-5 09:44
谢谢snowflake 的回复,
按你说的方法能实现并发调用存储过程吗?
作者:
snowflake
时间:
2006-6-7 16:29
可以的,因为SP其实是实现的一个功能,比如:查询用户表,你可以录制查询功能,然后用LR做并发测试......
同时打开sql plus:
SQL>SELECT osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece; 通过执行该语句来查看用户调用SP的情况!
[
本帖最后由 snowflake 于 2006-6-7 16:30 编辑
]
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2