全栈工程师开发手册 (作者:栾鹏)
架构系列文章

Jmeter5.0

下载地址:http://jmeter.apache.org/download_jmeter.cgi

wget -c http://mirrors.hust.edu.cn/apache//jmeter/binaries/apache-jmeter-5.0.tgz

介绍

一、背景简介

测试人员有时需要分析系统在繁重的负载的整体性能,发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率;预估系统的承载能力,使我们能根据其做出一些应对措施。文档简单介绍一款压力测试工具JMeter。

二、简介与安装

2.1 JMeter简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库, FTP 服务器,等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。

2.2 JMeter安装

1)JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境。此处略过。

2)JMeter可以从Apache官网下载:

https://jmeter.apache.org/download_jmeter.cgi。

下载后解压即可使用。可以将${JMETER_HOME}/bin配置到环境变量中,避免每次都用绝对路径去启动JMeter.

Windows下,双击bin目录下的ApacheJMeter.jar即可用图形化界面操作配置测试任务。




Linux命令行下,则需要准备好jmx测试脚本,调用如下命令

${JMETER_HOME}/bin/jmeter.sh -n -t Test.jmx -l testReport.jtl

其中,${JMETER_HOME}是JMeter的解压目录,-n表示非图形化界面运行,-t指向jmx测试脚本,-l指定压测后产生的日志文件名。

jmx测试脚本怎么编写?可以先在windows下用图形化界面配置好测试任务,点击文件,保存测试计划为,选择保存路径。在该路径下即可获取相应测试脚本。


Jmx测试脚本其实是一个xml文件,可以在已有的脚本中修改配置,不一定每次都在windows下生成。例如,多少秒内启动的多少线程,修改如下两个值即可,以下表示的是1秒内启动50个线程执行测试。

命令行生成的测试报告testReport.jtl可以在windows下用图形界面打开:


三、JMeter使用

下面结合某次测试介绍JMeter的简单使用。

1、添加测试计划


2、设置线程数(线程数可以任务是并发用户数)

上述配置的含义:在10秒内,启动50个线程,循环20次进行压力测试。

关于Ramp-up period的说明:

(1)决定多长时间启动所有线程。如果使用50个线程,ramp-up period是10秒,那么JMeter用10秒使所有50个线程启动并运行。每个线程会在上一个线程启动后0.2秒(10/50)启动。Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动。 一般设置ramp-up=线程数启动,并上下调整到所需的。

(2)用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。

(3)Ramp-Up Period(in-seconds)代表隔多长时间执行,0代表同时并发.

可以选择永远循环


3、设置测试接口

本样例的测试接口是:用http协议给远程发送参数与图片。右击线程组,选择“添加”、“Sampler”、“http请求”



4、一般需要查看调用结果,则需添加“察看结果树”

5、执行测试计划

点击绿色右三角,即可执行测试计划。可能会弹框提醒是否保存测试计划,选择“是”,则需要选择保存路径,选择“否”,则直接执行测试计划。如果中途需停止测试,点击“stop”即可。



6、查看测试结果

调用结束后,可以通过设置的“察看结果树”,“响应数据”看到接口返回结果.。例如:本样例接口,如果调用成功则返回“ok”


查看发出的请求:

7、查看测试的统计报告:统计失败率、吞吐量、调用次数等

可以通过添加“聚合报告”实现


点击绿色右三角,开始执行任务后,点击“聚合报告”,可以查看测试统计:

1)Label - 请求对应的name属性值。

  1. Samples - 具有相同标号的样本数,总的发出请求数。

3)Average - 请求的平均响应时间。

4)Median - 50%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第50%的值。

5)90% Line - 90%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第90%的值。

6)95% Line - 95%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第95%的值。

7)99% Line - 99%的样本都没有超过这个时间。这个值是指把所有数据按由小到大将其排列,就是排列在第99%的值。

8)Min - 最小响应时间。

9)Max - 最大响应时间。

10)Error % - 本次测试中,有错误请求的百分比。

11)Throughput - 吞吐量是以每秒/分钟/小时的请求量来度量的。这里表示每秒完成的请求数。

12)Received KB/sec - 收到的千字节每秒的吞吐量测试。

13)Sent KB/sec - 发送的千字节每秒的吞吐量测试。

8、读取csv文件

本测试样例,需要多线程读取多个图片文件。实现方式:按行将所有图片文件的路径放在csv文件中,用JMeter去读取。

右击线程组,添加,配置原件,CSV Data Set Config

1)Filename: CSV文件路径。

2)File encoding: CSV文件编码,可选UTF8。默认为ANSI

3)Variable Names: 给csv文件中各列起个名字(有多列时,用英文逗号隔开列名)便于后面引用

4)Delimiter:与 .csv文件的分隔符保持一致。如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t;

5)Allow quoted data?:不知道。

6)Recycle on EOF:到了文件尾是否循环,True—继续从文件第一行开始读取,False—不再循环

7)Stop thread on EOF :到了文件尾是否停止线程,True—停止,False—不停止,注:当Recycle on EOF设置为True时,此项设置无效。

8)Sharing mode:共享模式,All threads –所有线程,Current thread group—当前线程组,Current thread—当前线程。


这里CSV文件只有一列,我们设置该列变量名为picFile,并在后面引用即可把图片路径作为变量传到请求中:

9、自定义函数处理特定操作

本样例需要在每次将图片发出请求后,删除该本地图片。可以通过添加Bean Shell Sampler实现。


编写java程序:

10、添加随机数变量


将表达式复制到需要用随机数的地方。

基本设置:

参考:https://blog.csdn.net/weixin_42350428/article/category/8003666

使用Jmeter进行RPC压力测试

java Request主要机制是:实现Jmeter自带接口完成java Request请求,具体操作如下:

实现Jmeter自带接口

1.打开Java编译器,我使用的是eclipse, 新建一个项目"TestLength",然后新建一个包"app".

2.从Jmeter的安装目录lib\ext中拷贝两个文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的项目中,然后引入这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法)

3.在"app"包中新建一个类,名字叫"TestLength",不过这个类要继承"AbstractJavaSamplerClient"类,如果项目引入步骤二中的两个文件,就可以找到"AbstractJavaSamplerClient"类了.

4.“TestLength"类在继承"AbstractJavaSamplerClient"类的同时也会继承四个方法,分别是"getDefaultParameters”,“setupTest”,"runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于设置传入的参数;"setupTest"方法为初始化方法,用于初始化性能测试时的每个线程."runTest"方法为性能测试时的线程运行体;"teardownTest"方法为测试结束方法,用于结束性能测试中的每个线程.

5.具体代码如下:

package app;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 PerformenceTest extends AbstractJavaSamplerClient {private SampleResult results;private String testStr;//设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中@Overridepublic Arguments getDefaultParameters() {Arguments params = new Arguments();//定义一个参数,显示到Jmeter的参数列表中,第一个参数为参数默认的现实名称,第二个参数为默认值params.addArgument("testStr","abc");return params;}//测试前工作@Overridepublic void setupTest(JavaSamplerContext context) {results = new SampleResult();testStr=context.getParameter("testStr","");if(testStr!=null && testStr.length()>0){results.setSamplerData(testStr);}}// 测试执行的循环体,根据线程数和循环次数的不同可执行多次,类似于LoadRunner中的Action方法@Overridepublic SampleResult runTest(JavaSamplerContext context) {int len=0;//定义一个事务,表示这是事务的起始点,类似于LoadRunner的lr.start_transactionresults.sampleStart();testStr = context.getParameter("testStr");len = testStr.length();//定义一个事务,表示这是事务的结束点,类似于LoadRunner的lr.end_transactionresults.sampleEnd();results.setDataEncoding("utf-8");if(len<5){System.out.println(testStr);results.setResponseCode("testStr."+testStr);//用于设置运行结果的成功或失败,如果是false表示失败,true表示成功。results.setSuccessful(false);}else{results.setResponseCode("testStr."+testStr);results.setSuccessful(true);}return results;}//测试后工作public void teardownTest(JavaSamplerContext context) {super.teardownTest(context);}//Jmeter不执行main函数。public static void main(String[] args) {Arguments params = new Arguments();params.addArgument("testStr", "1111");//设置参数,并赋予默认值 JavaSamplerContext arg0 = new JavaSamplerContext(params);PerformenceTest test = new PerformenceTest();test.setupTest(arg0);test.runTest(arg0);test.teardownTest(arg0);System.exit(0);}}

6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷贝到Jmeter的安装目录lib\ext下。

7.运行Jmeter,添加一个线程组,然后在该线程组下面添加一个Java请求(在Sampler中),在Java请求的类名称中选择咱们刚创建的类"app。TestLength",在下面参数列表的"testStr"后面输入要测试的字符串,然后添加一个监听器(聚合报告),设置一下模拟的用户数就可以测试了。如果测试不成功,Jmeter会在它自己个输出框中抛出这个字符串。

jmeter 压力测试教程全解相关推荐

  1. WEB网站压力测试教程详解

    WEB 网站压力测试教程详解 Web 服务处于分布式计算的核心位置,它们之间的交互通常很难测试.分布式开发.大型的开发者团队以及对代码日益组件化的期望都有可能使 Web 服务的开发变得越来越容易隐藏错 ...

  2. Jmeter压力测试教程(上)

    JMeter压力测试 一. 简介 1.1优点 1.2缺点 二.安装 2.1下载 2.2解决中文乱码问题 2.5配置环境变量 2.4启动 入门案例 三.线程组相关 3.1 创建多个线程组 3.2 并发和 ...

  3. Jmeter 压力测试步骤详解

    目录 1.准备工作:安装 Jmeter 2.开始压力测试 (1)首先需要创建线程组 (2)创建 HTTP 请求 (3)添加察看结果树 (4)添加聚合报告 3.完整的测试步骤图示 Jmeter 压力测试 ...

  4. 史上最全《JMeter压力测试教程》——通俗易懂,3天即可学会

    性能测试 为什么要进行性能测试? 满足真实场景的业务需求 招聘需要 性能测试概念: 性能:软件质量属性中的"效率"特性 性能测试:使用自动化工具,模拟不同的场景,对软件各项性能指标 ...

  5. 转载:Jmeter压力测试教程(入门篇)

    前言 Jmeter 是Apache组织开发的基于Java的压力测试工具,开源并且支持多个操作系统,是一款很好的HTTP测试工具.本篇文章主要的目的是帮助没有接触过Jmeter的人快速上手,迅速掌握Jm ...

  6. 【托管服务qin】WEB网站压力测试教程详解

    Web 服务处于分布式计算的核心位置,它们之间的交互通常很难测试.分布式开发.大型的开发者团队以及对代码日益组件化的期望都有可能使 Web 服务的开发变得越来越容易隐藏错误.这些类型的错误极难检测出来 ...

  7. 【性能测试】压力测试指标全解之TPS、响应时间

    hello,大家好!我是磨磨唧唧小蘑菇~ 接上期阐述了<TP50/90/99/999>的含义及计算方式,本期将阐述压力测试的其他指标,如TPS.响应时间等. 目录 一.TPS 二.响应时间 ...

  8. 软件测试技能,JMeter压力测试教程,监听器之每秒事务数与响应时间(十四)

    目录:导读 前言 一.监听器之每秒事务数 1.Transactions per Second 2.监听器-jp@gc - Transactions per Second 二.监听器之响应时间 1.每秒 ...

  9. 【性能测试】压力测试指标全解之TP指标(50/90/99/999)

    hello,大家好!我是磨磨唧唧小蘑菇~ 大促压测参与了好几次,每次监控压测指标的时候,都处于一知半解的状态,碰上有人问我啥意思只能尴尬的老脸一红,都不好意思承认自己是大厂软件测试.最近,经过一番恶补 ...

最新文章

  1. RDKit | 基于RDKit的PandasTools加速数据分析
  2. golang for android
  3. 5款强大的JVM 性能调优监控工具 !
  4. 有线电视网(洛谷-P1273)
  5. Epos消费管理系统复制迁移SQL SERVER 2005数据库
  6. C#实现AES加密和解密
  7. 将汉字以utf-8方式编码及解码
  8. 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
  9. matlAB gui 变成c,matlab改变GUI和figure左上角图标的方法,并生成exe文件
  10. python滑动验证_Python实现图片滑动式验证识别方法
  11. 360驱动大师要怎么操作安装打印机驱动
  12. 无线WIFI“信道”
  13. Python项目分析:预测双色球福利彩票中奖号码(随便玩玩,不要当真)
  14. 关系抽取调研-工业界
  15. openwrt中br-lan,eth0,eth0.1,eth0.2 已经 实际网口wan,lan对应的配置
  16. 【梳理】简明操作系统原理:银行家算法(内附文档高清截图)
  17. 失败的过去式英文翻译_失败的英语怎么说
  18. Fasttext(AG数据集---新闻主题分类)
  19. Linux系统下给.sh添加可执行权限并运行
  20. 浅谈JVM(六):方法调用过程

热门文章

  1. groupby java_Java流-在GroupBy之后获取内部元素
  2. 关于axios中'$router' of undefined问题
  3. 【设计模式笔记】抽象工厂模式
  4. OpenCV 使用光流法检测物体运动
  5. c语言用graphics画直线 带箭头直线_动漫人体比例怎么画?教你画出萌系少女!...
  6. 3d怎么把两个面拼接在一起_视频拼接怎么做?如何将多段视频拼接在一起?
  7. zedboard linux内核下载,zedboard学习-为Linux内核打补丁
  8. android 多个c文件编译成一个so,AndroidStudio使用CMakeLists.txt编译多个so库
  9. 一图看懂编程语言迁移模式:终点站是Python、Go、JS
  10. html5圆圈刷新 博客,html5话出带圆的波浪线