Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。

1. Jmeter安装

1.1 JDK安装

由于Jmeter是基于java开发,首先需要下载安装JDK (略)。

Windows环境下检测安装情况如下:

Linux环境下检测安装情况如下:

1.2 JMeter安装

1>官网下载地址:http://jmeter.apache.org/download_jmeter.cgi

2>下载:

3>下载完成后解压zip或tgz包即安装完成。

windows环境下,将包解压即可使用。

(注意:编辑jmeter目录/bin/jmeter.porperties文件中的language属性值将其设置为默认中文显示。)

Linux环境下,将包解压亦即可使用。推荐编辑/etc/profile文件配置Jmeter的环境变量并用命令source /etc/profile让配置生效,则在任意目录下可以使用jmeter命令。

2.Jmeter使用(自定义Java脚本)

2.1 windows环境下

双击JMeter解压路径(apache-jmeter-4.0\bin)bin下面的jmeter.bat即可

如下显示就是Jmeter的主界面:

右键点击“测试计划” -> “添加” -> “Threads(Users)” -> “线程组”,如下可在“线程组”界面中可以配置线程组名称,线程数,准备时长(Ramp-Up Period(in seconds))循环次数,调度器等参数:

线程组参数详解:
1> 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
2> Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
3> 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
4> Delay Thread creation until needed:直到需要时延迟线程的创建。
5> 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
6> 持续时间(秒):测试持续时间,会覆盖结束时间
7> 启动延迟(秒):测试延迟启动时间,会覆盖启动时间
8> 启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
9> 结束时间:测试结束时间,持续时间会覆盖它。

右键点击“线程组” -> “添加” -> “Sampler” -> “java请求”,如下可在“java请求”界面中可以选择对应的自定义的java类,也可以手动在界面上修改参数值。

然后选择保存即可生成xxx.jmx配置文件(可供在非GUI环境下即Linux上执行)

2.2 Linux环境下

首先,要把自己写的java脚本打包及其运行所依赖的其他jar包都放到apache-jmeter-4.0\lib路径下,然后若jar包有需要依赖的配置文件的话,通过配置apache-jmeter-4.0\bin\user.properties文件中的search_paths属性来进行指定,如下:

然后,在JMeter解压路径(apache-jmeter-4.0\bin)bin下执行类似如下命令即可。

sh jmeter -n -t test.jmx -l result.jtl -j test.log

下面是我们使用非GUI 模式运行测试脚本时可以使用的一些命令:

  • -h 帮助 -> 打印出有用的信息并退出

  • -n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
  • -t 测试文件 -> 要运行的 JMeter 测试脚本文件(可以在GUI模式下配置生成好直接再拿来用,需要的话再手动修改里面的一些参数
  • -l 结果文件 -> 记录结果的文件
  • -r 远程执行 -> 启动远程服务
  • -H 代理主机 -> 设置 JMeter 使用的代理主机
  • -P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
  • -j 保存日志 ->记录jmeter执行过程情况

通过jmeter -h查看更多指令用法。

(注意:如果安装部署jmeter时设置了环境变量,则可以在任意目录使用jmeter命令;如果未设置Jmeter的环境变量则在执行脚本的时候需要检查当前目录是否是jmetet的bin 目录下。)

运行效果如下:

xxx.jtl文件内容如下:

执行结果可以使用 GUI 模式下的聚合报告查看,比如你想要看xxx.jtl 的报告,可以在Windows环境上打开JMeter GUI 界面 -> 测试计划 -> 添加线程组 -> 添加聚合报告 -> 点击"所有数据写入一个文件"下的 "浏览..." 按钮找到你刚生成的jtl 文件就可以对执行结果进行直观分析了:

聚合报告参数详解:
1> Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
2> #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
3> Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
4> Median:中位数,也就是 50% 用户的响应时间
5> 90% Line:90% 用户的响应时间
6> Min:最小响应时间
7> Max:最大响应时间
8> Error%:错误率——错误请求数/请求总数
9> Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
10> KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

或者直接用如下指令则会在当前路径下生成html文件,直接用浏览器打开即可查看各种图形化报告。

sh jmeter -n -t test.jmx -l result.jtl -j test.log –e –o ./

3.jmeter执行java请求代码实例

在eclipse中新建maven项目,首先在pom.xml文件中加入jmeter的依赖:

            <!-- Jmeter dependency -->
	    <dependency>
	        <groupId>org.apache.jmeter</groupId>
	        <artifactId>ApacheJMeter_core</artifactId>
	        <version>4.0</version>
	        <scope>provided</scope>
	    </dependency>
	    <dependency>
	        <groupId>org.apache.jmeter</groupId>
	        <artifactId>ApacheJMeter_java</artifactId>
	        <version>4.0</version>
	        <scope>provided</scope>
	    </dependency>
然后新建测试方法类,具体如下代码:
public class TestDemo {
    public int Tdemo(int a,int b){
        int sum = 0;
        sum = a+b;
        return sum;
    }
}  

再新建一个class文件,继承AbstractJavaSamplerClient,

(备注:AbstractJavaSamplerClient类的四个方法.)

public Arguments getDefaultParameters();设置可用参数及的默认值,设置了在Jmeter中则要输入。
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;

并重写里面的方法,具体如下代码:

public class TestLength extends AbstractJavaSamplerClient{
    private SampleResult results; 
    private String a;
    private String b;
    private String sum;    
  //设置可用参数集的默认值;
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("num1","");
        params.addArgument("num2","" );
        return params;
    }
  
    //初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
    public void setupTest(JavaSamplerContext arg0) {
         results = new SampleResult();      
    }
    
    //测试执行的循环体,根据线程数和循环次数的不同可执行多次
    public SampleResult runTest(JavaSamplerContext arg0) {
         a = arg0.getParameter("num1");
         b = arg0.getParameter("num2");
         results.sampleStart();     //定义一个事务,表示这是事务的起始点
         try{
             TestDemo test = new TestDemo();
             sum = String.valueOf(test.Tdemo(Integer.parseInt(a), Integer.parseInt(b)));
            if (sum != null && sum.length() > 0) {
                 results.setResponseData("结果是:"+sum, null);
                 results.setDataType(SampleResult.TEXT);
             }//会显示在结果树的响应数据里  
             System.out.println(sum);//会输出在Jmeter启动的命令窗口中
             results.setSuccessful(true);
         }catch(Throwable e){
             results.setSuccessful(false);
             e.printStackTrace();
         }finally{            
             results.sampleEnd();     //定义一个事务,表示这是事务的结束点     
         }
       return results;
    }
    
    //结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
    public void teardownTest(JavaSamplerContext arg0) {
    }    
}  
使用eclipse的maven install打成jar包,并将其放入apache-jmeter-4.0\lib\ext路径下,然后在GUI模式中的Java请求界面中就能看到相应的类啦。通过此方法(jmeter运行Java脚本)的学习,在以后则可以直接测试开发写好的方法。

4.jmeter注意事项

1>程序中依赖的jmeter的jar包和Linux主机上安装的版本要一致(Windows环境中自己写的java的jar包中依赖的jmeter版本和所安装版本不一致时并未报错);

jmeter知识总结(一)的更多相关文章

  1. 【Linux】【Jmeter】配置Jmeter服务器和运行Jmeter

    以前整理过Linux下的Jmeter知识,所以此处看可以参考以下链接: 参考链接:http://www.cnblogs.com/conquerorren/p/7880604.html [root@-- ...

  2. 《jmeter接口自动化与性能实战-飞天小子.pdf》

    Jmeter作为开源测试工具,以其轻便,功能齐全的优点,正越来越受到企业的重视.作为纯java的工具,它的扩展性无比强大,既可以做功能测试,也可以做性能测试:既支持接口层面的测试,也支持webdriv ...

  3. Jmeter 接口测试知识梳理——应用基础篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter 接口测试知 ...

  4. Jmeter 接口测试知识梳理——持续集成篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! Jmeter + Ant ...

  5. Jmeter 接口测试知识梳理——环境搭建篇

    Jmeter 使用也有很长时间了,但是一直没有做一下知识梳理,近期会对公司同事做一下这方面的培训,借此机会,把使用过程中应用到的知识,或是遇到的问题,整理出来,方便大家学习! 环境搭建篇 很多文章介绍 ...

  6. JMeter性能测试的基础知识和个人理解

    JMeter性能测试的基础知识和个人理解 1. JMeter的简介   JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常 ...

  7. JMeter基础知识

    JMeter介绍 JMeter是开源的性能测试工具和接口测试工具,工作原理和Loadrunner一样:作为浏览器和WebServer之间的网关,捕获Browser请求和WebServer响应,然后通过 ...

  8. Jmeter+Badboy实战经验三 Jmeter关联相关知识

    1. 什么时候需要使用关联? 有些参数是动态变化的,获取之后,再次操作的时候,参数的值已经发生了变化,这种情况下就会出现脚本不可运行的问题,就需要用到了关联 2. 关联是什么概念? 3.jmeter ...

  9. Jmeter性能测试之基础知识(一)

    1. 官网下载Jmeter: 点这里, 下载完成解压即可 2. 启动: 进入解压后的bin目录, Windows点击jmeter.bat, Linux执行jmeter 3. 添加线程组(user) : ...

随机推荐

  1. Jmeter二次开发代码(3)

    package org.apache.jmeter.functions; import java.io.FileInputStream;import java.io.FileNotFoundExcep ...

  2. think

    https://github.com/crossoverJie/Java-Interview Java-Interview https://github.com/aalansehaiyang/tech ...

  3. python 迭代器、生成器、枚举的使用

    迭代器 器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 遍历:被遍历的对象必须是有序容器 ls = [1, 2, 3, 4, 5] ...

  4. awk 计算某一列的和

    awk 计算某一列的和 我需要通过nova list 显示所有虚拟机的cpu总和,即用awk计算某一列的综合 [root@control01 ~]# nla | awk -F '|' 'BEGIN{s ...

  5. windows下安装oracle11g测试是否成功与监听器问题和网页控制台登录

    测试步骤1:请执行操作系统级的命令:tnsping orcl 测试步骤 2:请执行操作系统级的命令:sqlplus system/password@orcl 安装完oracle后要启动oracle服务 ...

  6. Python学习day17 迭代器&生成器

    迭代器&生成器 1. 迭代器 1.1 迭代器 迭代:迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代" 迭代器:帮助对某种对象 ...

  7. nowcoder300J Mex

    题目链接 题意 给出一个长度为\(n(n \le 10^5)\)序列,求其每个子序列之和所组成的集合的\(mex\) 思路 这么水的题都没想出来,感觉自己脑子瓦特了. 假设前\(i\)位可以组成区间\ ...

  8. (N叉树 BFS) leetcode429. N-ary Tree Level Order Traversal

    Given an n-ary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  9. linux/ubantu 安装 mysql 并且使其支持远程连接

    前言:打开ubantu的 控制台 或者 远程连接到 ubantu的服务器  其他的 linux 基本类似 可能下载 方式稍微不同 开始吧! [第一步]首先是安装(目前是2019-4-9 默认安装的是 ...

  10. Java 集合系列之一:JCF集合框架概述

    容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(Lis ...