首页 > 技术文章 > Jmeter应用大全

liuhaixia 2017-06-30 17:42 原文

1、Jmeter安装

Apache Jmeter是完全基于JAVA的桌面应用程序,需安装JDK1.4以上版本的JDK,并设置环境变量JAVA_HOME。下载apache-jmeter-2.13.zip,解压即可。

2、Jmeter运行

命令启动:jmeter  -n  -t  xxx.jmx

双击apache-jmeter-2.13\bin\jmeter.bat文件,出现如下视图:

 

 

3、创建线程组

右键测试计划依次选择添加—>Threads(users)—>线程组,此时创建了一个默认线程组。

 

 

Ramp-up Period(in seconds)决定多长时间启动所有线程。0代表同时并发;假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

Delay Thread creation until needed 延迟创建线程,直到该线程开始采样,即之后的任何线程组延迟和加速时间为线程本身。这样可以支持更多的线程,但不会有太多是同时处于活动状态。

4、添加取样器

所有的测试任务都由取样器承担,有很多种,如:HTTP 请求、JAVA请求等,以HTTP请求为例:

4.1 HTTP请求

右键线程组,依次选择添加—>Sampler—>HTTP请求。

 

 

服务器名称或IP:被测服务器的域名或IP地址,如果是本机可写localhost或127.0.0.1。

端口号:被测服务所占端口。比如tomcat默认端口为8080。

Implementation:选择httpClient4标准,可空。

协议:输入http,可空。

方法:选择Post。

Content encoding:输入utf-8。

路径:要测试的URL,不需要包含服务器IP和端口。

 

 

 

 

 

 

 

4.2 webservice接口测试

右键线程组,依次选择添加—>Sampler—>SOAP/XML-RPC Request:

URL:webservice地址

SOAP/XML-RPC DATA 格式如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://ws.yiibai.com/"> 接口所在包名倒置

<soapenv:Header/>

<soapenv:Body>

<web:getHelloWorldMessage> 接口名称

<arg0>abc</arg0> 参数名称,默认为arg0、arg1,依次类推,如果指定参数名,不可用arg。

</web:getHelloWorldMessage>

</soapenv:Body>

</soapenv:Envelope>

 

 

 

4.3 JAVA请求

右键线程组,依次选择添加—>Sampler—>Java请求,在类名称中选择要测试的类,将自动回显参数项,输入参数值即可启动。此处的类需要编写,可选择Java、Python等语言。可参见6、Jmeter脚本开发

 

 

 

 

 

5、添加监听器

5、1查看结果树

它的功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。

右键测试计划,依次选择添加—>监听器—>察看结果树。

使用快捷键ctrl+R或者点击绿色按钮,启动测试计划。在察看结果树中将看到取样器结果、请求、响应数据。

 

 

 

 

5、2聚合报告

Average:平均响应时间

Throughput:吞吐量,每秒处理的请求数(设备能够承受的最大速率),

吞吐量=请求总数/(测试结束时间-测试开始时间)

测试结束时间= MAX(请求开始时间+Elapsed  Time)

测试开始时间=MIN(请求开始时间)

监听器中添加Simple Data Writer,可以查看时间。

10Mbps带宽,吞吐量大概为2Mbps

KB/Sec:每秒从服务器接收的数据量

6、Jmeter脚本开发

开发工具:MyEclipse

第一步:工程中添加jmeter相关jar包。

第二步:创建测试类JmeterTest.java,继承AbstractJavaSamplerClient,会生成四个方法。

getDefaultParameters()设置方法参数及默认值

setupTest(JavaSamplerContext arg0)每个线程测试前执行一次,做一些初始化工作

runTest(JavaSamplerContext arg0)开始测试,从arg0参数中获得参数

teardownTest(JavaSamplerContext arg0)测试结束时调用

 

package com.z2sci.Jmeter.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 JmeterTest extends AbstractJavaSamplerClient{

         private String a;

    private String b;

    private String resultData;

    // 这个方法是用来自定义java方法入参的。

    // params.addArgument("num1","");表示入参名字叫num1,默认值为空。

    //设置可用参数及的默认值;

    public Arguments getDefaultParameters() {

        Arguments params = new Arguments();

        params.addArgument("num1", "");

        params.addArgument("num2", "");

        return params;

    }

 

    //每个线程测试前执行一次,做一些初始化工作;

    public void setupTest(JavaSamplerContext arg0) {

    }

 

    //开始测试,从arg0参数可以获得参数值;

    public SampleResult runTest(JavaSamplerContext arg0) {

        a = arg0.getParameter("num1");

        b = arg0.getParameter("num2");

        SampleResult sr = new SampleResult();

        sr.setSampleLabel( "Java请求哦");

        try {

            sr.sampleStart();// jmeter 开始统计响应时间标记

            Hello test = new Hello();

            // 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。

            resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer

                    .parseInt(b)));

            if (resultData != null && resultData.length() > 0) {

                sr.setResponseData("结果是:"+resultData, null);

                sr.setDataType(SampleResult.TEXT);

            }

            sr.setSuccessful(true);

        } catch (Throwable e) {

            sr.setSuccessful(false);

            e.printStackTrace();

        } finally {

            sr.sampleEnd();// jmeter 结束统计响应时间标记

        }

        return sr;

    }

 

    //测试结束时调用;

    public void teardownTest(JavaSamplerContext arg0) {

        // System.out.println(end);

        // System.out.println("The cost is"+(end-start)/1000);

    }

}

第三步:将工程导出jar包,放到jmeter/lib/ext目录下。

7、保持session

登录之后保持session配置方法。

第一步:jmeter.properties 配置文件中设置 CookieManager.save.cookies=true 。

第二步:在登录线程组中添加Debug Sampler,执行后取出COOKIE_JSESSIONID的值。

 

 

第三步:添加HTTP Cookie管理器中设置

 

 

8、参数化

第一步:将准备的数据写到CSV,或其他格式的文件(多个参数,用逗号或tab键分隔)

第二步:添加CSV Data Set Config,

 

 

Filename:文件所在路径

File encoding:编码

Variables Names(comma-delimited):变量名称

Delimiter(use ‘\t’ for tab):分隔符

Recycle on EOF:线程是否循环取值

 

 

第三步:在取样器中引用变量

 

 

推荐阅读