jmeter全程实战-从入门到精通

jmeter从入门到精通

目录

jmeter从入门到精通

jmeter是什么

jmeter的特点

jmeter的下载和安装

jmeter工作原理

jmeter目录结构

线程(用户)

jmeter的两种录制方法

jmeter badboy脚本开发技术详解

jmeter性能测试小试

jmeter元件作用域

jmeter参数化

jmeter集合点


jmeter是什么

Apache JMeter 是Apache组织开发的基于Java的压力测试工具。

JMeter可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用表达式创建断言。

jmeter的特点

1、对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过JDBC)

2、完全可移植性和100%纯java

3、完全多线程,框架允许通过多个线程并发取样和通过单独的线程组对不同功能同时取样。

4、各种负载统计表和可链接的计时器可供选择。

5、数据分析和可视化插件提供了很好的可扩展性以及个性化。

6、具有提供动态输入到测试的功能。

jmeter的下载和安装

前置条件:安装好idk(最好是1.6版本以上的)

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

一般启动:解压,bin目录里的jmeter.bat即可启动

服务器模式启动:jmeter-server.bat允许在远程节点上以服务器模式允许jmeter,并通过jmeter gui来控制。

jmeter工作原理

jmeter全程实战-从入门到精通

jmeter目录结构

bin目录是可执行文件,jmeter.bat启动,里面可以设置jvm参数

根据经验,heap最多设置为物理内存的一半,默认设置为512M。如果超过物理内存的一半,可能运行jmeter会很慢。

查看jmeter的log在jmeter.log中查看

配置文件:jmeter.properties文件有一个属性log_level.JMeter

相关参数:

属性

描述

需要

ssl.provider

你可以为你的SSL实现指定类。如果你想使用来自sun的JSSE,是这 样:com.sun.net.ssl.internal.ssl.Provider。JMeter默认提供https支持。如果你正在使用JDK1.4, 或者你使用带JSSE类的jar文件在JMeter的classpath里的JDK1.4。

No

com.sun.net.ssl.internal.ssl.Provider。

JMeter默认提供https支持是在你使用 JDK1.4或者你使用把JSSE类的jar包放到JMeter classpath中的JDK1.3时候。

No

xml.parser

你可以指明一个你的XML解析器实现。 默认值是:org.apache.xerces.parsers.SAXParser

No

remote_hosts

逗号分割远程JMeter主机列表。如果你在一个分布式环境运行JMeter,列出你用JMeter远程主机运行的机器。这允许你使用机器的用户界面控制那些服务器。

No

not_in_menu

在JMeter选项屏中你不想看到的组件列表。 如果JMeter被添加越来越多的组件,你会希望定制JMeter只出现那些你感兴趣的组件。你可以在这儿列出那些类名和他们的类标签(JMeter的用户界面出现的字符串), 它们将在选项屏中不出现。

No

search_paths

列出那些JMeter搜索JMeter附加类的路径(以;分割);例如附加的取样器。被添加到lib/ext目录的任何jar包都被发现。

No

user.classpath

JMeter搜索的公用类库的路径列表。被添加到lib目录的任何jar包都被发现。

No

user.properties

附加的JMeter属性文件名。 初始化属性文件后它们被添加,但是在-q和-J选项被处理之前。

No

system.properties

附加的系统属性文件名。 -S和-D选项被执行前添加。

No

可以设置改变日志详细度。默认info,可改为debug。

docs目录里面放的一些jmeter文档。

printable_docs的usermanual子目录下是jmeter用户手册,其中componet_reference.html是最常用的核心元件帮助手册。

extras目录下的文件提供了对ant支持,可以利用ant来实现自动化。如执行脚本,产生html报告

运行jmeter的时候会产生jtl文件,把他放到extras目录下,运行ant-Dtest=文件名report就可以生成测试统计报表。

lib目录下的ext子目录是jmeter核心jar包;Junit子目录是放在Junit脚本的。用户扩展所依赖的包直接放在lib下即可,不要放在lib/ext下

jmeter常用功能介绍

线程(用户)

一般常用线程组:可以理解为loadrunner中的虚拟用户组

setup thread group:执行预操作

teardown thread group:执行测试后动作

jmeter的两种录制方法

录制1--badboy方式

下载地址http://www.badboy.com.au

录制2--代理

首先创建一个线程组(右键点击“测试计划”--“添加”--“线程组”)在“工作台”非测试元件,添加“HTTP代理服务器”

目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组

分组:对请求进行分组

点击:启动

则完成jmeter的设置,但需要与ie浏览器进行配置

ie--Internet属性-连接--局域网设置(端口与jmeter里面的端口一定要一致。)

点击jmeter的启动按钮。

jmeter badboy脚本开发技术详解

badboy中文本参数化,首先建立参数化列表

参数替换${参数名称}

中文可能有乱码,改下请求中的编码即可。

badboy中的数据库参数化,

odbc(首先安装odbc包,配置数据源)

data source放到脚本最前端(不然取不到数据)

jmeter性能测试小试

测试步骤:测试计划、线程组、http请求、监听器、运行脚本、查看报告

http请求设置:

名称:本属性用于标识一个取样器,建议使用有意义的名称。

注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。

服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。

端口号:目标服务器的端口号,默认值为80。后面的超时定义可以不用填写。

协议:向目标服务器发送HTTP请求时的协议,可以是http或者https,默认为http。

方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

Content encoding:内容的编辑方式

路径:目标URL路径(不包括服务器地址和端口)

自动重定向:如果选中该选项,当发生HTTP请求后得到的响应是302/301时,Jmeter自动重定向到新页面

Use keep Alive:当该选项被选中时,jmeter和目标服务器之间使用Keep-Alive方式进行HTTP通信,默认选中

Use multipart/form-data for HTTP POST:当发送HTTP POST请求时,使用Use multipart/form-data发送,默认不选中

同请求一起发送参数:在请求中发送URL参数。

同请求一起发送文件:在请求中发送文件,通常HTTP文件上传行为可以通过这种方式模拟。

场景一般在线程里面设置,再把监听器放进来,再添加察看结果树

监听器-聚合报告

Label:定义HTTP请求名称

Samples:表示测试*发送多少个请求

Average:平均响应时长

Median:中位数,也就是50%用户响应时长

90%Line:90%用户的响应时长

max/min:访问页面的最大/最小响应时长

Error%:错误请求数量/请求总数

Throughput:默认情况下表示每秒完成的请求数

KB/Scc:每秒从服务器端接收到的数据量

测试计划元件

测试计划对象有一个叫做"功能测试"复选框。如果被选择,它会使JMeter记录来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文 件,这个数据将被写入文件。如果你尝试一个较小的测试来保证JMeter配置正确并且你的服务器正在返回期望的结果,这是很有用的。这样的后果就是这个文 件会快速的增大,并且JMeter的效率会影响。如果你不做压力测试这个选项应该关闭(默认关闭)。

如果你不记录数据到文件,这个选项就没有不同了。

线程组:

线程组元件是任何测试计划的起点。一个测试计划的所有元件必须在一个线程组下。线程组元件控制JMeter运行测试时使用的线程数。线程组管理允许你:

  • 设置线程数
  • 设置ramp-up period
  • 设置执行测试的次数

每个线程会作为一个整体执行测试计划并完全独立于他测试线程。多线程用来模拟到达服务器程序的同步连接。

Ramp-up period告诉JMeter多久开始"ramp-up"选择的全部线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。如果有30 个线程和一个120秒的ramp-up period,那么每个连续的线程会延迟4秒。

Ramp-up需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足小以至于最后一个线程在第一个完成前启动(除非你想那样发生)。

使用ramp-up=线程数启动,并上下调整到所需的。

默认,线程组被配置仅循环一次。

1.9版本引入了一个测试运行*调度器*。 单击在线程组面板底部的复选框来显示额外的文本域,在里面你可以输入启动和结束时间。当测试启动时,如果必须JMeter会等待启动时间到达。在每个周期 结束,JMeter检验结束时间是否到达,如果是,运行停止,如果不是测试被允许继续,直到迭代限制到达。

另外你可以使用启动延迟和持续时间文本域。注意启动延迟会覆盖启动时间,持续时间会覆盖结束时间。

控制器

JMeter有两种控制器:取样器和逻辑控制器。

取样器告诉JMeter发送请求到服务器。

逻辑控制器让你定制当发送请求时JMeter使用的判断逻辑。

取样器(sampler)

取样器告诉jmeter发送请求到服务器。jmeter取样包括:

FTP请求

HTTP 请求

JDBC 请求

Java object 请求

LDAP 请求

SOAP/XML-RPC 请求

WebService(SOAP)请求

每个取样器有一些可以设置的属性。

逻辑控制器

保持
逻辑控制器让你定制当发送请求时JMeter使用的判断逻辑。逻辑控制器还可以作为下列任何元件的子元件:取样器(请求)、配置元件、和其他逻辑控制器。逻辑控制器可以改变来自它们的子元件的请求顺序。它们可以修改请求本身,导致JMeter重复请求,等。

监听器

监听器提供访问JMeter收集当JMeter运行的关于测试计划的信息。

定时器

默认,JMeter线程发送请求时不在请求间暂停。我们建议你通过添加一个可用的定时器到你的线程组来指定一个延迟。如果你不添加延迟,JMeter会在短时间内产生太多请求,可能会压倒你的服务。

断言

断言允许你断言关于从测试服务器收到的响应的行为。使用断言你本质上你可以测试你的应用程序返回你期望的结果。

配置元件

配置元件配合取样器工作。虽然它不发送请求(除了HTTP代理服务器),但是它可以添加或者修改请求。

一个配置元件进能访问有所代替元件所在的树分支的内部。例如,如果你在一个简单逻辑控制器里面设置一个HTTP Cookie管理器,Cookie管理器很容易访问"web Page 1"和"web Page 2"HTTP请求。但是不能访问"web Page 3"。

前置处理器元件

一个配置元件进能访问有所代替元件所在的树分支的内部。例如,如果你在一个简单逻辑控制器里面设置一个HTTP Cookie管理器,Cookie管理器很容易访问"web Page 1"和"web Page 2"HTTP请求。但是不能访问"web Page 3"。

后置处理器元件

后置控制器在取样器请求建立后执行一些行为。如果后置处理器附属于取样器元件,那么它会仅在那个取样器元件运行后执行。后置处理器最常用来处理响应数据,常用来从它里面提取数值。

jmeter元件作用域

配置元件(config elements):会影响其作用范围内的所有元件。

前置处理程序(Per-processors):在其作用范围内的每一个sampler元件之前执行。

定时器(timers):对其作用范围内的每一个sampler元件之后执行

后置处理器(Post-processors):在其作用范围内的每一个sampler元件之后执行,

断言(Assertions):对其作用范围内的每一个sampler元件执行后的结果执行校验。

监听器(Listeners):收集其作用范围的每一个sampler元件的信息并呈现。

sampler元件不和其它元件相互作用,因此不存在作用域的问题

jmeter参数化

第一种:添加-用户参数化

第二种:添加-配置元件-CSV Data Set Config

jmeter集合点

集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点。