zoukankan      html  css  js  c++  java
  • 转:应用JMeter测试solr请求

    使用JMeter测试solr请求

    一.安装JMeter

        在官网http://jmeter.apache.org/download_jmeter.cgi下载JMeter

        直接解压JMeter安装包

        Linux下运行 $JMETER_HOME/bin/jmeter.sh

        Windows下运行  $JMETER_HOME /bin/jmeter.bat 启动图形界面

    二.编写JMeter测试类

        1.在Eclipse中建立java工程,加入jmeter的一些基础包ApacheJMeter_core.jar,ApacheJMeter_java.jar,这两个jar包在$JMETER/lib/ext下面.同时为了方便调试,还需要加入一些日志包,avalon-framework-4.1.4.jar,commons-logging-1.1.1.jar,jorphan.jar,logkit-2.0.jar,加入之后具有如下的包结构:

         

        2.新建SolrJmeterTest类,并继承AbstractJavaSamplerClient

        

    package test.solr;
    
    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;
    
    /** 
     * 使用Jmeter测试solr请求
     *
     * @author wuwen
     * @date Feb 17, 2013 10:30:55 AM 
     * 
     */
    public class SolrJmeterTest extends AbstractJavaSamplerClient {
    
    	private static String label = "SolrRequest";	// 定义label名称,显示在jmeter的窗口
    	
    	private	SolrRequest solrRequest;
    	/**
    	 * 定义测试初始值,setupTest只在测试开始前使用,类似于LoadRunner中的init方法
    	 */
    	@Override
    	public void setupTest(JavaSamplerContext context) {
    		super.setupTest(context);
    	//	System.out.println("setupTest.....");		
    		String url = context.getParameter("url");	// 获取Jmeter中设置的外界参数
    		solrRequest = SolrRequest.getInstance(url);
    	}
    	
    	/**
    	 * 参数定义,也可以直接在Jmeter界面手工输入参数
    	 * 代码里面可以通过Map<String, String> map = getDefaultParameters().getArgumentsAsMap()获取相关值
    	 */
    	@Override
    	public Arguments getDefaultParameters() {
    		Arguments arg = new Arguments();
    		arg.addArgument("url", "http://172.16.19.68:5631/solr/zw");
    		arg.addArgument("q", "${q}");
    		return arg;
    	}
    	
    	/**
    	 * 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法
    	 */
    	@Override
    	public SampleResult runTest(JavaSamplerContext context) {
    	//	System.out.println("runTest.....");			// System.out的输出会显示在启动的Jmeter命令窗口内,输出过多会影响性能的准确性
    		SampleResult results = new SampleResult();	// SampleResult封装了所有测试结果(如:测试是否成功,程序执行时间等)
    		results.setSampleLabel(label);
    		boolean success = true;
    		results.sampleStart();						// 定义一个事务,表示这是事务的起始点,类似于LoadRunner的lr.start_transaction
    		try {
    			/** 这里就是需要测试的代码 */
    			solrRequest.query(context.getParameter("q"));	// 调用solr请求
    		} catch (Exception e) {
    			e.printStackTrace();
    			success = false;	
    		} finally {
    			results.sampleEnd();					// 定义一个事务,表示这是事务的结束点,类似于LoadRunner的lr.end_transaction
    			results.setSuccessful(success);			// false表示失败
    		}	
    		
    		return results;
    	}
    
    	/**
    	 * 结束方法,实际运行每个线程仅执行一次,在测试方法运行结束后执行,类似于LoadRunner中的end方法
    	 */
    	@Override
    	public void teardownTest(JavaSamplerContext context) {
    		super.teardownTest(context);
    	//	System.out.println("teardownTest.....");
    	}
    	
    	public static void main(String[] args) {
    		SolrJmeterTest jt = new SolrJmeterTest();
    		JavaSamplerContext context = new JavaSamplerContext(jt.getDefaultParameters());
    		// 初始值执行
    		jt.setupTest(context);
    		// 执行部分调用
    		jt.runTest(context);
    		// 执行结束处理
    		jt.teardownTest(context);
    	}
    }

           3.将工程打包成jar,放到$JMETER_HOME/lib/ext目录下面

           4.启动JMeter

    三.运行JMeter

           1.添加线程组,选中主界面左侧的“测试计划”,右键菜单->添加->Threads(Users)->线程组

            

           线程组面板设置说明:

           

           2.添加java请求,选中刚才新增的"线程组",右键菜单->添加->Sampler->Java请求

           

           java请求面板说明:

           

           在类名称中选择之前打包的jar里面的类即可

           3.添加动态参数(CSV Data Set Config设置),选中刚才新增的"JAVA请求",右键菜单->添加->配置元件>CSV Data Set Config

          

          参数设置说明:

          

          Filename:文件名,指保存信息的文件目录,可以相对或者绝对路径(比如:D:word.txt)

          File Encoding --- 文件编码

          Variable Names:参数名称(如:有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符在下面的“Delimitet”中定义,为了和文件中的“,”对于,这里也用“,”分割每个参数名,(比如:use,password)

          Delimitet:定义分隔符,如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写

          Recycle on EOF? --- True=当读取文件到结尾时,再重头读取文件

                                            False=当读取文件到结尾时,停止读取文件
         Stop thread on EOF? --- 当Recycle on EOF?一项为False时起效;True=当读取文件到结尾时,停止进程

          4.结果监听,选中刚才新增的"Java请求",右键菜单->添加->监视器->聚合报告

          5.保存测试用例之后,Ctrl + R,开始运行, Ctrl + E,清除历史结果。

          6.查看测试结果:

          聚合报告中基本已经包含我们所关心的几个数据了:

          Samples -- 本次场景中一共完成了多少个Transaction

          Average -- 平均响应时间

          Median -- 统计意义上面的响应时间的中值

          90% Line -- 所有transaction中90%的transaction的响应时间都小于xx

          Min -- 最小响应时间

          Max -- 最大响应时间

          PS: 以上时间的单位均为ms

          Error -- 出错率

          Troughput -- 吞吐量,单位:transaction/sec

          KB/sec -- 以流量做衡量的吞吐量

  • 相关阅读:
    Comparison of MPTCP & CMT-SCTP
    Wireshark
    MPTCP协议相关分析
    抑郁
    MPTCP 源码分析(七) 拥塞控制
    MPTCP 源码分析(六) 数据重发
    MPTCP 源码分析(五) 接收端窗口值
    MPTCP 源码分析(四) 发送和接收数据
    MPTCP 源码分析(三) 子路径选择
    MPTCP 源码分析(二) 建立子路径
  • 原文地址:https://www.cnblogs.com/lci05/p/4810195.html
Copyright © 2011-2022 走看看