一个基于JUnit 的存储过程自动化测试的 Eclipse 插件

发表于:2008-5-19 12:59

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

如何设置存储过程调用参数的默认值?
        代码生成时会为各种类型的参数初始化一个对应的默认值,这样可以保证生成的测试代码是可以立即运行的,默认值列表如下:

ww

        在代码生成之后,程序员需要把这些默认的值修改为一些具体的测试用例的值。
 
    如何调用执行存储过程?
        在已经生成的测试代码中,如何运行存储过程也是一个问题。将大批的数据库操作写在测试代码中是不合适的,真正对测试有用的代码可能会被淹没在这些大量的辅助代码之中,而造成代码的混乱和维护困难。因此我们封装了一个类,用它专门来运行存储过程,这个类叫做 SPProcessSample,它提供了以下主要方法有:

www

        其中的 StoredProcedureInfo 是记录存储过程信息的类,包括存储过程名、存储过程参数列表等。因此,只需要首先创建存储过程信息,然后调用 runSP 方法即可运行存储过程。而这部分代码也是由系统自动生成的,程序员真正需要做的就是修改调用参数的值。

    如何定制测试用例?
        可以假设有这样一种场景,即程序员需要在所有生成的代码中增加一个新的逻辑,或者增加一条公共的 Assert 语句,这时可能需要修改所有已经生成的代码,无异于一场噩梦。为了使程序员能够统一控制生成的代码,必须让他能够干预代码生成的逻辑,这样就可以保证代码生成功能的灵活性和扩展性。
        我们采取的办法是提供一个用户可以修改的代码模板,这个模板是一个 .txt的文本文件。系统生成代码时,会根据这个模板文件来生成新的代码。除了其中的保留字之外,用户可以更改代码的任何部分。并且用户可以根据此模板制作若干针对不同测试目的的模板,以便生成各自的测试代码。例如对于一个只需要进行存储过程性能的测试代码而言,只要能统计出存储过程的运行时间即可,但是对只需要验证存储过程正确性的测试代码而言,就可以把这些时间统计功能的代码去掉。方法就是针对这两种应用,制作两个模板文件,分别使用这两个文件生成代码即可。
        下面就是代码模板中用于生成其他测试用例的示例代码,这段代码起到示范作用,所有测试例将按照此代码样式生成。用户只需要修改这段代码,就可以统一定制代码的格式和内容:
  final public void do*ROUTINESCHEMA*_*ROUTINENAME*() {
 SPTestResult result = new SPTestResult();
 long currentTestStartTime = System.currentTimeMillis();
 result.setNames(
  "*CLASS_NAME*",
  "do*ROUTINESCHEMA*_*ROUTINENAME*",
  "*ROUTINESCHEMA*.*ROUTINENAME*");
 int rows = 0;
 StoredProcedureInfo spInfo = new StoredProcedureInfo("*ROUTINETYPE*");
 spInfo.setRoutineSchema("*ROUTINESCHEMA*");
 spInfo.setRoutineName("*ROUTINENAME*");
 spInfo.setRowsReturnedParmId(11);
 //TODO If this procedure has a parameter returning the rows of the result set, please
//change the parm_id to the real id, int value is needed.
 //spInfo.setRowsReturnedParmId(parm_id);
 ArrayList parms=new ArrayList();
 //TODO Please modify the last parameter of the 'new ParmInfo()'
// function to set the proper parameters.
 *PARAMETERS_LIST*
 spInfo.setParmList(parms);
 try {
  rows = spProcess.runSP(spInfo);
       result.setDurationTime(spProcess.getDurationTime());
  result.setMemo(spInfo.getParmString());
  result.setRowsReturned(rows);
  testResultList.add(result);
 } catch (Exception e) {
  System.err.println(e.getMessage());
  result.setMemo(e.getMessage());
 }
}

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号