LoadRunner javavuser错误排查

时间:2021-10-24 17:18:08

Loadrunner 9.5/11 使用java 开发vsuer script需要的环境配置

本文从两个方面来讲:windows 32位操作系统;windows 64 操作系统
开始之前,先说下java环境变量配置(共3处):
(1)JAVA_HOME: C:\Program Files\Java\jdk1.6.0_45  (请根据实际情况配置)
(2)PATH: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
(3)CLASSPATH: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar(前边是点号分号)

一、windows 32位操作系统安装Loadrunner 9.5/11 使用java vuser 必要的配置
(1)操作系统:windows 32位系统(windows7 32 位 测试通过)(2)JDK版本:jdk1.6 32位(jdk1.6测试通过,目前LR不支持1.7及以上的)(3)对jdk1.7及以上开发的脚本,运行会报错,原因 LR不支持JDK1.7及以上,如果环境OK,需要新建测试脚本。这几点非常重要,不然会报各种问题的错误,例如:Error: Java VM internal error:Error Loading javai.dll..[MsgId: MERR-22995]Warning: Extension java_int.dll reports error -1 on call to function ExtPerProcessInitialize[MsgId: MWAR-10485]Error: Thread Context: Call to service of the driver failed, reason - thread context wasn't initialized on this thread.[MsgId: MERR-10176]

二、 windows 64 位操作系统安装Loadrunner 9.5/11 使用Javavuser 必要的配置

(1) 操作系统 windows 64(windows 7 64位测试通过)
(2) jdk 1.6  必须是32位的(虽然操作系统是64位的),不能是64位jdk,目前jdk 1.6 32位的再windows 7 64位上测试通过。
64位系统 安装64位jdk 1.6,运行脚本会报如下错误:
Error: Failed to find java.exe.
Please add the <JDK>\bin to the path and try again.[MsgId: MERR-22968]
Warning: Extension java_int.dll reports error -1 on call to function ExtPerProcessInitialize[MsgId: MWAR-10485]
Error: Thread Context: Call to service of the driver failed, reason - thread context wasn't initialized on this thread.[MsgId: MERR-10176]

特别强调:

以上两点非常重要,请大家核对自己的配置。

知道loadrunner可以使用java写脚本,今天就试了一下,遇到了两个第一次写Java Vuser脚本普遍都会遇到的问题。
第一个问题:Error: Java VM internal error:Error Loading javai.dll.没有找到java的Jdk
解决:LoadRunner javavuser错误排查选择Use specified JDK,在JDK后面贴上你的java jdk地址,例如:D:\Program Files\Java\jdk1.6.0_20,点击OK即可。(loadrunner11,可以使用jdk1.6,1.7,没试还不知道)
第二个问题:Error: at java.lang.ClassLoader.defineClass1(Native Method)
解决:loadrunner在编译Java Vuser的时候会加载我们配置环境变量中的path,如果path中有不同版本的java jdk就会造成冲突,删除path中的其它版本的jdk路径,重启loadrunner。
在测试中,运用java vuser编写脚本时,如果要导入一些jar包,loadrunner的操作方式是在 Runtime settings里的Java Environment Settings 的classpath里面添加,但是,在这里面只能通过点击右上角的 第三个(形如文件夹)按钮加jar包,点一次加入一个,如果测试过程中需要大量的jar包,那么这种方法显然很慢很头痛,现在简述一下我的处理方式。可以方便快捷的将一个文件夹下的所有jar包加入到测试环境中。

(1)新建一个java vuser脚本,然后点击保存,输入脚本名称,如test,将脚本保存到你想保存的位置,假如  C:/,这样loadruner会在c:/盘建立一个test文件夹 
             
   (2)[size=x-large]在virtual  user generator 里按F4,或者点击右上角工具栏的最后一个按钮,调出runtime setting, 
       定位到Java Environment Settings 的classpath,你将看到loadrunner自动加载了系统的环境变量,你在这里可以删除一些不需要的jar,只保存jre即可。点击确定 
   
   (3)来到你脚本保存的目录(本例为c:/test),找到default.cfg文件,用记事本或者任何文本编辑器打开,你将看到文件的底部有 
       [JavaVM:Options] 
        Java_Env_ClassPath= 
         。。。。。。。。。。。 
    将你想要加入的jar包的路径加在“Java_Env_ClassPath=”后面就可以了(只需修改这里,其他项不用改)。例如: 
Java_Env_ClassPath=.;E:\jdk1.5.0_05\lib;E:\jdk1.5.0_05\jre;E:\lib\activation-1.1.jar;E:\lib\axiom-api-1.2.8.jar; 
E:\lib\axiom-impl-1.2.8.jar;E:\lib\com.ibm.mq.jar;E:\lib\com.ibm.mqjms.jar;E:\lib\commons-logging.jar;E:\lib\connector.jar;E:\lib\dhbcore.jar;E:\lib\javamail_1.4_spec-1.3.jar;E:\lib\jetty-6.1.9.jar;E:\lib\jetty-util-6.1.9.jar;E:\lib\jms_1.1_spec-1.1.1.jar;E:\lib\log4j.jar;E:\lib\logging\jcl104-over-slf4j-1.5.0.jar;E:\lib\logging\logback-classic-0.9.8.jar;E:\lib\logging\logback-core-0.9.8.jar;E:\lib\logging\slf4j-api-1.5.0.jar;E:\lib\org.springframework.ws-2.0.0.M1-sources.jar;E:\lib\org.springframework.ws-2.0.0.M1.jar;

(这串字符串你可以写一个程序,直接获取某给目录的jar包,附件中是我的程序,只需修改你jar包放在的目录就可以了)

保存后,再回到runtime settings    你将看到loadrunner把你加入的包加载了进去,至此你就可以进行其他工作啦。[/size]

  • GetFileNameUnderDIR.rar (722 Bytes)
  • 下载次数: 54
  • package com.ecjtu.guosxu;

    import java.io.File;

    public class GetFileNameUnderDIR {

    /**
    * 获取某文件夹下所有文件,并返回该文件夹下的文件名
    *
    */

    private static final String fromFileDIR = "E:\\lib\\";//

    public static void main(String[] args) {
    long start = System.currentTimeMillis();
    FindFile(fromFileDIR);
    System.out.println("\n");
    System.out.println(" the App cometo end ,total time : "
    + (System.currentTimeMillis() - start));
    }

    public static void FindFile(String fromFile) {

    File findFile = new File(fromFile);
    if (findFile.isDirectory())
    {// 判断输入是否为目录
    File[] findFiles = findFile.listFiles();
    for (int i = 0; i < findFiles.length; i++)
    {
    if (findFiles[i].isDirectory()) {// 如果是文件夹,则遍历
    FindFile(findFiles[i].getAbsolutePath());
    }
    else{// 如果是文件,则读取内容
    System.out.print(findFiles[i].getAbsolutePath()+";");
    }
    }
    }
    else {//如果输入的就是一个文件
    System.out.println(findFile.getAbsolutePath()+";");
    }
    }
    }