性能测试笔记

3、JMeter基础

JMeter简介

JMeter是免费、开源、纯Java开发的性能测试工具,JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下的测试它们的强度和分析整体性能。能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序是否返回了你期望的结果,JMeter允许使用正则表达式来创建断言

CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体

JMeter特点

  • 支持多种不同的应用程序、服务器、协议类型的性能测试和接口测试
  • 支持命令行模式和GUI模式
  • 支持Linux、Windows、macOS等操作系统
  • 测试完毕可以产生HTML报告
  • 支持响应HTML、JSON、XML等文本格式
  • 允许多线程并发采样
  • 具有高度可扩展的核心

注意:JMeter不是工作在浏览器端、而是工作在协议级别上的。所以JavaScript程序不能在JMeter运行,必须单独编写插件程序


为什么选择JMeter

优点

  • 免费、开源,并且能够实现LoadRunner95%以上的功能
  • 支持二次开发、能够针对企业产品做调整,更好的满足企业性能测试需求

缺点

  • 用户友好性及集成监控不如LoadRunner

友好性和集成监控非常差,几乎没有,只能配备小工具,甚至后面需要大量开发
Java语言开发,本身产生的负载量是不太好的,不如LoadRunner,如果是大的体系还是走LoadRunner


JMeter安装

JMeter是Java应用程序,需要有JDK8+环境
官网下载:http://JMeter.apache.org
解压文件到任意英文目录(避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题)

  • 一般启动:双击  bin/JMeter.bat 
  • 服务器模式启动:bin/JMeter-server.bat         

 性能测试笔记_第1张图片                                    


JMeter目录结构分析

Bin:放置了各项命令、配置文件(如JVM设置、日志设置)、证书、示例脚本等
JMeter.properties:JMeter的系统配置文件,可以针对JMeter做各种配置操作,比如:远程负载机等
    remote_hosts=127.0.0.1
    remote_hosts=127.0.0.1:1099,172.168.1.13:1099, 172.168.0.16:1099
    server_port=1099
Docs:放置了JMeter API离线帮助文档

Extras:JMeter辅助功能,提供与Ant、Jenkins集成的可能性,利用Ant与Jenkins来构建性能测试自动化构架
Lib: JMeter组件以jar包形式放置在lib/ext目录下,如果要扩展JMeter组件,扩展后的jar包即放在此目录
printable_docs:JMeter的离线帮助文件放置目录

提示:

  • Ant是一个功能强大的打包编译工具。我们使用他的目的是将xml文件转化为html格式的文件
  • HTTPs://www.cnblogs.com/reach296/p/3791489.html
  • Extras:附加设备
  • Jenkins+JMeter+Ant:HTTP://www.uml.org.cn/jchgj/201902223.asp

JMeter工作区介绍

性能测试笔记_第2张图片

  • 区域1:目录树,存放测试设计过程中使用到的元件;执行过程默认从根节点开始顺序遍历树上的元件(比如HTTP请求就是一个元件)
  • 区域2:菜单栏,图标是菜单快捷方式
  • 区域3:测试元件编辑区域


JMeter常用功能

常用功能

测试计划:用来描述一个性能测试,所有内容都是基于这个计划的
线程(虚拟用户)

  • 一般线程组:设置JMeter按照什么场景来运行(添加/Threads/线程组)
  • setUp Thread Group:可用于执行预测试操作。这些线程行为完全像一个正常的线程组元件。类似于LR 的init方法。
  • tearDown Thread Group:可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。类似于LR的end方法
  • 取样器:是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter原生支持多种不同的Sampler
  • 逻辑控制器:用来控制测试脚本的逻辑运行,编程中的逻辑控制if,循环等。
  • 定时器:用来指定请求发送的延时策略,没有定时器,发送请求是不会暂停的。
  • 前置处理器:发送请求之前执行的操作,例如生成入参数据。
  • 后置处理器:发送请求之后执行的操作,通常用于处理响应数据,从中提取需要的值。
  • 断言:请求是否返回期望的结果。
  • 监听器:可以在测试的过程中收集相关数据,并以树状图、图形、表格方式展示


JMeter运行原理

JMeter以线程方式运行,通过线程组来驱动多个线程(类似LoadRunner中的虚拟用户)运行测试脚本对被测试服务器发起负载,每个负载机上都可以运行多个线程组

性能测试笔记_第3张图片


JMeter初次使用

JMeter使用初体验

创建测试计划
新建线程组
开发脚本(手工书写、JMeter使用代理方式录制)
运行场景
查看监控

测试计划

测试计划:是JMeter测试的起点,是存放脚本的容器,JMeter中一个脚本即是一个测试计划
测试计划四要素:

  • 脚本中计划只能有一个
  • 至少要有一个线程组
  • 至少有一个取样器
  • 至少有一个监听器

在测试计划里面可以配置用户的一些全局变量
独立运行每个线程组:一个测试计划下面可能会包含多个线程组,勾选此项的话,则会顺序执行每个线程组,而不是同时启动所有的线程组

注意:

函数测试模式:主要是为了进行一些调试或者下载测试的时候才启用,会影响JMeter运行的性能。
Add directory or jar to classpath:如果在脚本中要是用到第三方的jar的时候,需要在这里将jar包添加到classpath。比如说在做数据库测试的时候,就需要在这里添加JDBC Driver的jar包,或者使用javascript或者Beanshell的时候要调用到第三方的jar也是需要在这里添加的。

线程组

线程组:

  • 相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值

启动线程组的方法:

  • Test Plan 右键——Adds——Threads—Thread Group

Http请求设置-保持默认
  • 名称:用于标识一个取样器,建议采用一个有意义的名称。
  • 注释:对于测试没有任何作用,仅记录用户可读的注释信息。
  • 端口号:目标服务器的端口号,默认80。
  • 协议:向目标服务器发送HTTP请求时的协议,可以是https或者是http,默认是http。
  • 方法:发送http请求的方法,可用方法包括GET、HEAD、POST、PUT、OPTIONS、TRACE、DELETE等。
  • Content encoding:内容的编码方式。
  • 路径:目标URL路径(不包括服务器的地址和端口)
  • 自动重定向:如果选中该选项,当发送HTTP请求后得到的响应是302/301时,JMeter自动重定向到新的页面
  • Use keep Alive:当该选项被选中时,JMeter和目标服务器之间是有Keep-Alive方式进行HTTP通信,默认选中。
  • Use multipart/from-data for HTTP POST:当发送HTTP POST 请求时,使用Use multipart/from-data 发送,默认不选中。
  • 同请求一起发送参数:在请求中发送URL参数,对于带参数的URL,JMeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数设置在本表中,表中的每一行是一个参数值对(对应URL中的名称1=值1)
  • 同请求一起发送文件:在请求中发送文件,通常,HTTP文件上传行为可以通过这种方式模拟
  • 从HTML文件获取所有内含的资源:选中时,JMeter在发出HTTP请求并获得响应的HTML文件内容后,还对该HTML进行Parse并获取HTML中包含的资源。默认不选中,如果用户只需要获取页面中的特定资源,可以在下方中的URLs must match文本框中填入需要下载的特定资源表达式,这样,只有匹配成功的资源才会被下载。
  • 用作监视器:此取样器被当成监视器,在Monitor Results Listener中可以直接看到基于该取样器的图形统计信息。默认不选中。
  • Save response as MD5 hash:选中时,在执行时仅记录服务器端响应数据的MD5值,而不记录完整的响应数据。在需要进行数据量大的测试时,建议选中该项以减少取样器记录响应数据的开销

线程组设置
  • 线程数:虚拟用户数
  • ramp up period:设置的虚拟用户需要多长时间全部启动。如果线程数为20,时间为10,也就是每秒钟启动2个线程
  • 循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为100,那么每个线程发送100次请求。总请求数为20*100=2000。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
  • 调度器:可以灵活设置运行时间

Scheduler:调度器

  • Duration(seconds):持续时间,测试计划持续多长时间
  • Startup delay(seconds):启动延时。点击启动按钮后,仅初始化场景,不运行线程,等待延时时间到才运行

JMeter使用初体验—添加监听器

JMeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。JMeter有各种不同的监听器类型,这里添加聚合报告来查看结果

性能测试笔记_第4张图片

监听器-聚合报告

注意:单位是毫秒,后缀是jtl

  • Label:定义请求的名称,就是我们在进行测试的httprequest sampler的名称
  • Samples:这次测试中一共发给服务器的请求数量
  • Average:单个请求的平均响应时间,单位是毫秒。当使用了Transaction Controller时,也可以以Transaction 为单位显示平均响应时长。
  • Median:中位数,50%的请求的响应时间
  • 90%Line:90%的请求的响应时间
  • 95%Line:95%的请求的响应时间
  • 99%Line:99%的请求的响应时间
  • Min:访问页面最小的响应时间
  • Max:访问页面最大的响应时间
  • Error%:错误率=错误的请求的数量/请求的总数
  • Throughput::吞吐量即表示每秒完成的请求数。当使用了Transaction Controller时,也可以表示Transaction per Second数。
  • Received KB/sec::每秒从服务器端接收到的数据量

View Results Tree:如果我们的请求成功发送给服务器,那么结果树里面的模拟请求会显示为绿色,可以通过取样器结果里面的响应状态码信息来判断

性能测试笔记_第5张图片

性能测试笔记_第6张图片

录制方式产生脚本—使用Badboy录制

  • Badboy是用C++开发的,被用于测试和开发复杂的动态应用。它提供了强大的屏幕录制和回放功能,同时也提供了丰富的图形结果分析功能
  • 下载Badboy:http://www.badboy.com.au/
  • 使用Badboy录制脚本,然后将录制的脚本导出为JMeter格式的脚本,最后将该脚本导入到JMeter,借助于JMeter强大的测试功能模拟大量的虚拟用户,进行复杂的性能测试
  • 在Badboy中,step就类似于Loadrunner中事务的概念,我们可以通过添加step的方式来定义事务

JMeter两种录制脚本方法-badboy
  • badboy下载:www.badboy.com.au
  • 点击工具栏上的红色原型按钮,在地址栏目输入被测地址。
  • 录制完成后,点击工具栏旁边的黑色按钮,结束录制。选择“文件”/“Export to JMeter”
  • 打开JMeter工具,选择“文件”/“打开”选择刚才保存的文件(.jmx类型),将文件导入

录制方式产生脚本—使用代理方式录制
  • 创建模板【录制方式】
  • 配置浏览器的代理为 “127.0.0.1” 端口是8888
  • HTTP(S) Test Script Recorder 点击【run】

第一个Demo

  • 测试步骤
  • 测试计划
  • 线程组(右键 测试计划/添加/Threads/线程组)
  • http请求
  • 监听器
  • 运行脚本
  • 查看报告

你可能感兴趣的:(笔记,压力测试,经验分享)