zoukankan      html  css  js  c++  java
  • jmeter 测试java协议经验总结

        对java协议的良好支持,是jmeter比loadrunner优秀的地方,但是坑也不少,本文将相关点都整理下来备忘   

    一. 依赖的jar包

      使用IDE开发jemter java协议脚本时,需要导入以下几个包,否则会报找不到Class或者其他诡异问题,以下的包在jmeterlib或者jmeterlibext下找得到: 

       avalon-framework.jar、
      jorphan.jar、
      commons-logging.jar、
      ApacheJMeter_core.jar、
      ApacheJMeter_java.jar、
       logkit-2.0.jar

       需要注意的是: jmeter的jorphan.jar非常古怪,如果我们开发的脚本也用到类似的jar,请务必保证jmeterlib下该jar不会被替换且不能存在多个版本,否则启动jmeter报错:

         Uncaught Exception java.lang.NoSuchMethodError: org.apache.jorphan.gui.GuiUtils.makeScrollableMenu(Ljavax/swing/JMenu;)V. See log file for details.

     二. 编码示范

          使用jmeter开发java测试脚本的常规格式如下:  

    /**
     * 
     */
    package test;
    
    import org.apache.jmeter.config.Arguments;
    import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
    import org.apache.jmeter.samplers.SampleResult;
    
    /**
     * 
     * 
     */
    public class PerformanceTest extends AbstractJavaSamplerClient {
    
    /**
             * 每个线程初始化时会调用且仅调用一次,可放一些初始化代码
             */
            public void setupTest(JavaSamplerContext arg0) {
    
                 // 开始时间
                 start = System.currentTimeMillis();
            }
    
            /**
             * 每个线程销毁时 会调用一次runTest()方法后会调用此方法.
             */
            public void teardownTest(JavaSamplerContext arg0) {
    
                 // 结束时间
                 end = System.currentTimeMillis();
                 // 总体耗时
                 System.err.println("cost time:" + (end - start) / 1000);
            }
    
            /**
             * JMeter界面中可手工输入参数,代码里面通过此方法获取
             */
            public Arguments getDefaultParameters() {
    
                 Arguments args = new Arguments();
                 return args;
            }
    
            /**
             * JMeter测试用例入口
             */
            @Override
            public SampleResult runTest(JavaSamplerContext arg0) {
            SampleResult result = new SampleResult();
            boolean isSuccessful = false;
            try {
              String strategy = arg0.getParameter("strategy");
              String pin = arg0.getParameter("pin");
              /*

      * 其他构造参数代码

      */
     result.sampleStart();

     /*

        执行测试代码

     */

     if(xxx==xxx){

      isSuccessful = true;
     } else {
      isSuccessful = false;

      //打印失败信息
      //logger.error("接口调用失败,结果信息");
     }
    } catch (Exception e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } finally {
      result.sampleEnd();
      result.setSuccessful(isSuccessful);
    }
    return result;

    }

    }

     三. 路径的一些说明

      开发java协议脚本时候常常需要读取一些配置文件的内容,这里又主要分两种情况,spring容器配置文件和普通文本类

     1. spring容器类配置

     读取 spring容器配置文件的读取建议使用 ClassPathXmlApplicationContext类而非FileSystemXmlApplicationContext,因为后者是要写死路径的,不利于后面的打包并部署到jmeter环  境里,示范代码:

     

      ApplicationContext applicationContext = null;  

    public void setupTest(JavaSamplerContext context) { try { applicationContext = new ClassPathXmlApplicationContext("jsf-consumer.xml"); } catch (Exception e) { e.printStackTrace(); } }

     

             非Spring容器的配置文件,则需要使用如下代码读取:

        

     InputStream is = null;
     try {
       String str = null;
       PropertiesTest pt = new PropertiesTest();
       Properties pro = new Properties();
       is = pt.getClass().getResourceAsStream("/ptest.properties");
       pro.load(is);
       System.out.println("PAGESIZE-->" + pro.get("PAGESIZE"));
        System.out.println("CURRENT_PAGE-->" + pro.get("CURRENT_PAGE"));
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }finally{
        try {
             if(is!=null){
                is.close();
             }
        } catch (IOException e) {
             e.printStackTrace();
        }
    }

      

         为了能让代码取到xml文件需要按照约定来配置:

             (1) 非maven项目,需要放在项目的src目录下,如下图

         

     

     

    (2) maven项目,除了src目录外还可以放在src/main/resource目录下

      四. 打包和部署

          测试代码打包步骤如下:

          1. 右键--->export

         

    2. 选择Runnable JAR file

     

    3. 进行配置信息和保存路径的设置

    注意,如果launch configuration找不到目标类,则可以执行一次这个类的Main函数

    4.单击"Finish",即可得到一个jar和一个对应名字的目录,比如abcTest.jar和abcTest_lib 目录

    5. 将上面的文件和目录直接拷贝到jmeter/lib/ext目录下即可

    通常情况下,以上步骤不会有任何问题,如果非常不幸遇到诡异问题,请参照以下文章:http://www.cnblogs.com/onmyway20xx/p/4260216.html

    将生成的abcTest.jar放在lib/ext目录,将abcTest_lib目录下文件去除jmeter本身自带的几个jar、剩余的jar拷贝到lib目录下!

     

       

  • 相关阅读:
    ###第五次作业###
    第四次作业
    第三次作业
    jquery cookie插件
    jquery.form.js(ajax表单提交)
    jquery 中 $.map 用法
    jQuery中的$.grep()使用
    jquery-validation验证插件
    软件工程实践2017第一次作业
    jQuery UI dialog 的使用
  • 原文地址:https://www.cnblogs.com/onmyway20xx/p/4514426.html
Copyright © 2011-2022 走看看