发布新日志

  • 使用LoadRunner8.1的java Vuser协议调用jar文件(转载)

    2009-11-11 10:46:53

    今天我需要用loadrunner测试一个远程的java服务应用,在测试过程中controller加载脚本时总是报错:ClassLoader error,后来问题解决。
     
    我首先把这个java服务应用的客户端jar包拷贝到loadrunner脚本的目录下,这些jar包是定义服务接口的。然后编写脚本代码、调试。到此为止一切正常。然后我使用controller把这个脚本run起来,这时开始报错,错误信息主要是:GENERIC_FAILURE和ClassLoader error。
     
    为什么在Vuser Gen里面调试正常,在controller里运行却不正常,经过分析发现是ClassLoader的问题,很可能是,在controller的运行进程中,线程的ContextClassLoader没有被正确赋值,因此我们增加以下一句代码:
     
    Thread.currentThread().setContextClassLoader(ClassLoader.getSystemClassLoader());
     
    然后再run脚本,问题解决。如果大家使用loadrunner遇到类似问题,试试这个方法。
  • 关于LR的too many local variables错误

    2008-10-13 20:05:37

        记得在3ATESTING里看过一个视频,里面介绍了出现too many local variables的原因及解决的方法,下面将相应的内容贴出来,让路过的人都可以学习一下,程序如下:

    Action()

    {

     //若在此处加上:char bp[100000];则编译的时候就会出现too many local variables这个错误

     if (条件1){}

     else{}

     return 0;

    }

        为什么加上char bp[100000];就会有那个错误呢,原因其实是因为Action能分配的内存不多,所以若要直接使用占用内存大的变量,则建议将其定义成全局变量,或者是在Action里面使用malloc函数来进行分配。

        这是从3ATESTING那边学习来的,感谢~~~

       

  • 录制ORACLE协议

    2008-09-26 17:26:38

         今天学习录制ORACLE协议的脚本,发现录制完成时,INIT/ACTION中东西都很多,上网查找了些资源,最终在原有录制脚本的环境下,修改了下脚本,简化了很多.

    #include "lrd.h"

    vuser_init()

    {

    //初始化数据库部分

    lrd_init(&InitInfo, DBTypeVersion);

    lrd_initialize_db(LRD_DBTYPE_ORACLE, 2, 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);

     

    //连接数据库

    lrd_server_attach(OraSrv1, "oolong", -1, 0, 0);

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

     

    //设定数据库密码

    lrd_ora8_attr_set(OraSes1, USERNAME, "scott", -1, 0);

    lrd_ora8_attr_set(OraSes1, PASSWORD, "tiger", -1, 0);

     

    //初始化连接session

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

     

    //开始连接数据库

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

    return 0;

    }

     

    Action()

    {

    static LRD_VAR_DESC  NUM =

       {LRD_VAR_DESC_EYECAT, 15, 23, LRD_DBTYPE_ORACLE, {1, 1, 0},DT_NUMERIC};

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

     

    //设定查询语句

    lrd_ora8_stmt(OraStm1, "select count(*) NUM from test_scott t\n", 1, 0, 0);

    lrd_ora8_attr_set(OraStm1, PREFETCH_ROWS, "0", -1, 0);

    lrd_ora8_attr_set(OraStm1, PREFETCH_MEMORY, "0", -1, 0);

     

    //执行查询语句

    lrd_ora8_exec(OraSvc1, OraStm1, 0, 0, &uliRowsProcessed, 0, 0, 0, 0,

            0);

    lrd_ora8_bind_col(OraStm1, &OraDef25, 1, &NUM, 0, 0);

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

    lrd_ora8_fetch(OraStm1, 1, 1, &uliFetchedRows, 0, 2, 0, 0);

     

    lr_output_message("value : %s",  lr_eval_string("The  count is: {ROW}"));

    return 0;

    }

     

    vuser_end()

    {

     

    lrd_session_end(OraSvc1, OraSes1, 0, 0);

    lrd_server_detach(OraSrv1, 0, 0);

    lrd_handle_free(&OraSrv1, 0);

    lrd_handle_free(&OraSvc1, 0);

    lrd_handle_free(&OraSes1, 0);

    lrd_handle_free(&OraEnv1, 0);

    return 0;

    }

     

         ORACLE协议还有很多东西可以深究,比如在监控一个库时,我们一般要注意哪几个点,这个问题我还是不太明白,再研究吧~~~

Open Toolbar