JMeter从入门到精通--开始你的第一个JMeter脚本

news2024/11/20 8:42:47

JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——使用Badboy录制生成 JMeter 脚本。

简单的介绍一下Badboy。Badboy是一款不错的Web自动化测试工具,如果你将它用于非商业用途,或者用于商业用途但是安装Badboy 的机器数量不超过5台,你是不需要为它支付任何费用的。也许是一种推广策略,Badboy提供了将Web测试脚本直接导出生成JMeter 脚本的功能,并且这个功能非常好用,也非常简单。你可以跟着下面的试验步骤来迈出你在开源世界的第一步。

1.      通过Badboy的官方网站下载Badboy的最新版本;

2.      安装Badboy。安装过程同一般的Windows 应用程序没有什么区别,安装完成后你可以在桌面和Windows开始菜单中看到相应的快捷方式——如果找不到,可以找一下Badboy安装目录下的Badboy.exe 文件,直接双击启动Badboy;

3.      启动Badboy,你可以看到下面的界面。

在地址栏(图中红色方框标注的部分)中输入你需要录制的Web应用的URL——这里我们以http://www.yahoo.com 为例,并点击GO 按钮开始录制。如果你用过LoadRunner之类的商业工具,对于这个操作一定不会陌生吧 ^_^

4.      开始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会被记录在主界面左侧的编辑窗口中——在这个试验中,我们在Yahoo的搜索引擎中输入 JMeter 进行搜索。不过你将看到,录制下来的脚本并不是一行行的代码,而是一个个Web对象——这就有点像LoadRunner的VuGen中的Tree View视图;

5.      录制完成后,点击工具栏中的“停止录制”按钮,完成脚本的录制;

6.      选择“File -> Export to JMeter”菜单,填写文件名“login_mantis.jmx”,将录制好脚本导出为JMeter脚本格式。也可以选择“File -> Save”菜单保存为Badboy脚本;

7.      启动JMeter并打开刚刚生成的测试脚本。

也许你已经急不可待的准备开始尝试着用JMeter处理你手头的工作了^_^ 在下面的几节,我将继续为大家介绍如何在 JMeter 中完成一个测试场景的设置和JMeter测试结果分析入门,以及如何参数化JMeter脚本。

当然,如果你的动手能力很强,几分钟你就可以熟悉这些内容。不过还是请允许我一点点由浅入深的来帮大家完成“JMeter从入门到精通”的过程。我相信在这个过程中你将会了解到更多有关性能测试的知识和经验,甚至包括一些LoadRunner等商业测试工具所无法提供给你的经验。

理解 JMeter 聚合报告(Aggregate Report)

Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。

如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值

#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100

Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间

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

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

Note:关于 50% 和 90% 并发用户数的含义,请参考下文

http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html

Min:最小响应时间

Max:最大响应时间

Error%:本次测试中出现错误的请求的数量/请求的总数

Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数

KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

另外,如果大家在使用 JMeter 的过程中遇到问题,建议先参考下面这篇文章

如何解决使用 JMeter 时遇到的问题

作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错误。不过,JMeter 也可以像 LoadRunner 一样通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数。根据 JMeter官方文档的署名,你需要自己完成这个配置,不过不用担心,这将非常简单 ^_^

1.              在所有期望运行 JMeter 作为 Load Generator 的机器上安装 JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。然后运行所有 Agent 机器上的JMeter-server.bat文件——假定我们使用两台机器 192.168.0.1 和 192.168.0.2 作为 Agent;

2.              在Controller 机器的 JMeter 安装目录下找到 bin 目录,再找到 JMeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;

3.              在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行 JMeter Agent 的机器,这里需要修改为“remote_hosts=192.168.0.1:1664,192.168.0.2:1664”——其中的 1664 为 JMeter 的 Controller 和 Agent 之间进行通讯的默认 RMI 端口号;

4.              保存文件,并重新启动 Controller 机器上的 JMeter.bat,并进入 Run -> Remote Start 菜单项。看到啥了?^_^

使用命令行方式运行 JMeter 脚本

2.4.3 Non-GUI Mode (Command Line mode) 

For non-interactive testing, you may choose to run JMeter without the GUI. To do so, use the following command options

-n This specifies JMeter is to run in non-gui mode

-t [name of JMX file that contains the Test Plan].

-l [name of JTL file to log sample results to].

-r Run all remote servers specified in JMeter.properties (or remote servers specified on command line by overriding properties)

The script also lets you specify the optional firewall/proxy server information:

-H [proxy server hostname or ip address]

-P [proxy server port]

Example : JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000

上面这段说明来自 JMeter 的官方用户手册。其中提到了使用命令行方式运行 JMeter 脚本的方法。只有几个简单的参数,很直观,用起来也很方便。好处是可以节省一些系统资源。

今天尝试 300 个虚拟用户连续运行 5 分钟时——使用 GUI 方式,发现开始运行后不久 UI 就失去了响应,并提示一个有关  AWT 的错误,最终只能把 Java 进程结束掉。但是使用命令行方式时却很稳定。
不过当在命令行方式下尝试 500 个虚拟用户连续运行 5 分钟时,JMeter 抛出了一个 Out of Memory 的异常并退出了进程。

Note:
1.执行命令前要检查当前目录是否是 %JMeter_Home%\bin 目录;
2.如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。

如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题

JMeter 的手册中描述了如何访问 MySQL,但是没有说明如何访问 Oracle。对于没有 Java 应用开发经验和对 Oracle 不是特别熟悉的朋友,可以参考这篇文章来简单、快速的配置好 JMeter 中的 JDBC 连接和 JDBC Request。 

步骤:

  1. 新建一个 Thread Group;
  2. 新增 JDBC Connection Configuration;
  3. 点击新增的 JDBC Connection Configuration ,需要修改的参数包括:
  • Variable Name:可以先填一个 Oracle,等会解释;
  • Database URL:jdbc:oracle:thin:@{host_IP_or_machine_name}:{Oracle 监听器监听的端口}:{你的Oracle实例的名字}  ——大家要注意,“{ }” 大括号 只是我用来说明用的,在配置 JMeter 时,请将 “{ }” 大括号去掉 ^_^
  • JDBC Driver class:oracle.jdbc.driver.OracleDriver
  • Username:访问上面Oracle实例的用户名
  • Password:对应的密码
  1. 新增一个 JDBC Request,需要修改的参数包括:
  • Variable Name:和上面的 JDBC Connection Configuration填写同样的内容。这里表示 JDBC Connection Configuration建立一个名为Oracle 的连接池,之后其它的JDBC Request都共用这个连接池;
  • Query:select * from table_name 。 这里建议打开你的数据查询工具,输入一条SQL查询语句,保证可以执行看到结果的,然后copy 过来;
  1. 新增一个View Results Tree;
  1. 点击 Run,查看结果。可以在Response data tab 看到响应的返回结果。

注意事项:

  1. 执行时提示:No Suitable Driver。

在电脑上搜索一下 classes12.jar 这个文件,然后copy到JMeter的Lib目录下。如果找不到classes12.jar这个文件,就找找classes12.zip文件,然后把扩展名改为jar;

  1. 执行时提示:ORA-00911: invalid character。

确保你在JDBC Request里面的Query中输入的SQL语句是正确的。

JMeter 用户手册中关于配置通过JDBC对数据库性能进行测试的部分如下:

Apache JMeter - User's Manual: Building a Simple Database Test Plan

另外,我做了两个 Test Plan,一个是 for Oracle 的,一个是 for MySQL 的,你可以点击下面的链接下载。

JMeter Test Plan for Oracle

JMeter Test Plan for MySQL

MySQL JDBC Driver (下载后需要自己把扩展名改为 .jar 然后放到 JMeter 的 lib 目录下)

JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现,最新的版本是1.9.1,大家可以到Apache JMeter - Apache JMeter™ 下载源代码和查看相关文档。

1 JMeter作用领域 

JMeter 可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。JMeter 用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。你可以用 JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。

2 使用JMeter测试Web应用 

接下来的章节里,作者将详细的演示如何使用JMeter来测试Web应用的完整过程。

2.1 测试环境 

作者使用了Tomcat作为Web服务器进行测试,被测试的内容是一个jsp文件和一个servlet,jsp文件调用JavaBean、打印相关信息,servlet接受用户参数、调用javabean、输出相关信息。详细的内容请参考作者提供的JMeter.war的内容。

2.2 安装启动JMeter 

大家可以到通过http://apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta- jmeter-1.9.1.zip下载JMeter的release版本,然后将下载的.zip文件解压缩到C:/JMeter(后面的文章中将使用%JMeter%来引用这个目录)目录下。现在,请使用%JMeter%/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面,下面的工作都将在这个可视化界面界面上进行操作。

2.3 建立测试计划(Test Plan) 

测试计划描述了执行测试过程中JMeter的执行过程和步骤,一个完整的测试计划包括一个或者多个线程组(Thread Groups)、逻辑控制(Logic Controller)、实例产生控制器(Sample Generating Controllers)、侦听器(Listener)、定时器(Timer)、比较(Assertions)、配置元素(Config Elements)。打开JMeter时,它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。现在我们开始填充一个测试计划的内容,这个测试计划向一个jsp文件和一个servlet发出请求,我们需要JMeter模拟五个请求者(也就是五个线程),每个请求者连续请求两次,下面的章节介绍了详细的操作步骤。

2.4 增加负载信息设置 

这一步,我们将向测试计划中增加相关负载设置,是Jmeter知道我们需要模拟五个请求者,每个请求者在测试过程中连续请求两次。详细步骤如下:

1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add'Thread Group,界面右边将会出现他的设置信息框。

2. Thread Group有三个和负载信息相关的参数:

Number of Threads: 设置发送请求的用户数目

Ramp-up period: 每个请求发生的总时间间隔,单位是秒。比如你的请求数目是5,而这个参数是10,那么每个请求之间的间隔就是10/5,也就是2秒

Loop Count: 请求发生的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复 指定的次数,如果输入0,那么请求将执行一次。

根据我们演示例子的设计,我们应该将Number of Threads设置为5,Ramp-up period设置为0(也就是同时并发请求),不选中forever,在Loop Count后面的输入框中输入2。

2.5 增加默认Http属性(可选) 

实际的测试工作往往是针对同一个服务器上Web应用展开的,所以Jmeter提供了这样一种设置, 在默认Http属性设置需要被测试服务器的相关属性,以后的http请求设置中就可以忽略这些相同参数的设置,减少设置参数录入的时间。我们这里将采用这种属性。你可以通过下面的步骤来设置默认http属性:

1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add'config element'http request defaults,界面右边将会出现他的设置信息框。

2. 默认http属性的主要参数说明如下:

protocal:发送测试请求时使用的协议

server name or ip:被测试服务器的ip地址或者名字

path: 默认的起始位置。比如将path设置为/jmeter,那么所有的http请求的url中都将增加/jmeter路径。

port number: 服务器提供服务的端口号

我们的测试计划将针对本机的Web服务器上的Web应用进行测试,所以protocal应该是http,ip使用localhost,因为这个web应用发布的context路径是/jmeter,所以这里的path设置为/jmeter,因为使用Tomcat服务器,所以port number是8080。

2.6 增加Http请求 

现在我们需要增加http请求了,他也是我们测试的内容主体部分。你可以通过下面的步骤来增加性的http请求:

1. 选中可视化界面中左边树的Thread Group节点,单击右键,选择Add'sampler'http request,界面右边将会出现他的设置信息框。

2. 他的参数和2.5中介绍的http属性差不多,增加的属性中有发送http时方法的选择,你可以选择为get或者post。

我们现在增加两个http 请求,因为我们设置了默认的http属性,所以和默认http属性中相同的属性不再重复设置。

2.7 增加Listener 

增加listener是为了记录测试信息并且可以使用Jmeter提供的可视化界面查看测试结果,里面有好几种结果分析方式可供选择,你可以根据自己习惯的分析方式选择不同的结果显示方式,我们这里使用表格的形式来查看和分析测试结果。你可以通过下面的步骤来增加listener:

1. 选中可视化界面中左边树的Test Plan节点,单击右键,选择Add'listener'view result in table,界面右边将会出现他的设置信息和结果显示框。

2. 你可以设置界面上面的filename属性设置将测试结果保存到某个文件中界面下面将使用表格显示测试结果,表格的第一列sampleno显示请求执行的顺序和编号,url显示请求发送的目标,sample-ms列显示这个请求完成耗费的时间,最后的success列显示改请求是否成功执行。界面的最下面你还可以看到一些统计信息,最关心的应该是Average吧,也就是相应的平均时间。

2.8 开始执行测试计划 

现在你可以通过单击菜单栏run -> Start开始执行测试计划了。

大家可以看到第一次执行时的几个大时间值均来自于jsp request,这可以通过下面的理由进行解释:jsp执行前都需要被编译成.class文件。所以第二次的结果才是正常的结果。

3 总结 

JMeter用于进行供能或者性能测试,通过使用JMeter提供的供能,我们可以可视化的制定测试计划:包括规定使用什么样的负载、测试什么内容、传入的参数,同时,他提供了好多种图形化的测试结果显示方式,使我们能够简单的开始测试工作和分析测试结果。

本文中,作者根据自己的使用经验,详细演示了如何使用JMeter来进行Web测试的全部过程,简单的介绍了JMeter提供测试结果的图形化显示界面中相关参数的含义。希望能够帮助大家学会使用JMeter的基本知识,同时,大家可以参考这个过程和JMeter的帮助文档来实现对java对象、数据库等的测试过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/640910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考A计划-2023系统架构师-知识点集锦(4/4)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

redis的远程登录配置

目录 服务端: 客户端: 服务端: 步骤一:关闭防火墙 systemctl stop firewalld iptables -F setenforce 0 步骤二:配置/etc/redis.conf配置文件 vim /etc/redis.conf bind 127.0.0.1 改为 bind 0.0.0.0 (…

【图书推荐 | 13】前端系列

【赠书活动第十三期 】 图书推荐 本期书籍:前端系列 图书列表: Vue.js核心技术解析Nuxt.js实战Nuxt.js Web开发实战HTML5CSS 从入门到精通Flutter2 开发实例精解Electron项目开发实战 Vue.js核心技术解析 Nuxt.js实战 Nuxt.js Web开发实战 HTML5CSS 从入…

机器鱼的制作分享

1. 运动功能说明 本文示例将实现R330样机机器鱼胸鳍能够灵活的上下摆动的功能。 2. 结构说明 本样机采用舵机模块来进行仿生机器鱼结构的设计。 胸鳍 整机 3. 电子硬件 在这个示例中,我们采用了以下硬件,请大家参考: 主控板 Basra主控板&…

一文搞懂ChatGPT 和 AIGC 到底是什么?【最强科普】

目录: 1.AIGC是什么? 2.ChatGPT是什么? 3.ChatGPT发展的几个阶段? 4.ChatGPT能做什么? 5.ChatGPT的应用场景? 一、AIGC是什么? GC(Generated Content)&#xff1a…

Java实训日记第六天——2023.6.12

文章目录 一、MyBatis-Plus二、将MyBatis-Plus框架整合到SpringBoot1.导依赖2.在启动类上开扫描3.在application.yml中配关于数据库的连接4.在idea中安装MyBatisX插件5.在idea中连上MySQL6.测试查询所有 3.完善增删改查功能4.逻辑删除5.自动填充 一、MyBatis-Plus 1.为什么有了…

【手撕MyBatis源码】Configuration配置体系

文章目录 Configuration概述Configuration的核心作用与配置来源配置元素元素承载配置文件解析XML文件解析流程注解配置解析 Configuration概述 Configuration 是整个MyBatis的配置体系集中管理中心,前文所说的Executor、StatementHandler、Cache、MappedStatement……

react---react router 5 基本使用

目录 1.路由介绍 2.路由使用 3.路由组件和一般组件 4.Switch 单一匹配 5.解决二级路由样式丢失的问题 6.路由精准匹配和模糊匹配 1.路由介绍 路由是根据不同的 URL 地址展示不同的内容或页面,在 SPA 应用中,大部分页面结果不改变,只改变…

PostgreSQL 对特定类索引的优化,节省磁盘空间百倍 --BRIN 索引应用在生产案例...

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

为生信写的Python简明教程 | 视频5

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在:https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

Pytorch教程:Autograd基础

PyTorch的Autograd特征可以让PyTorch灵活快速的构建机器学习项目。autograd可以实现快速和容易的多重偏微分(梯度)计算。偏微分计算时反向传播神经网络学习的核心。 autograd的可以在运行时动态追踪计算,这意味着如果模型有决策分支、或者有…

linux 系统服务管理

目录 一、chkconfig 1、列出服务列表 chkconfig --list 2、关闭开启服务 chkconfig 服务名 on/off 3、添加新服务 chkconfig --add 服务文件名 4、删除已有服务 chkconfig --del 服务名 5、系统级别定义: 一、chkconfig chkconfig——centos…

Python学习46:分配学号(python123)

类型:列表元组‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬…

【Java项目】多种方式解决SpringBoot中遇到的控制台中文乱码问题

文章目录 配置JVM参数配置maven参数配置Runner配置Encoding通过配置文件 配置JVM参数 -Dfile.encodingUTF-8配置maven参数 重点就是 <configuration><fork>true</fork><jvmArguments>-Dfile.encodingUTF-8</jvmArguments></configuration>…

Linux常用命令——git命令

在线Linux命令查询工具 git 是目前世界上最先进的分布式版本控制系统 补充说明 git命令很多人都知道&#xff0c;Linus在1991年创建了开源的Linux&#xff0c;从此&#xff0c;Linux系统不断发展&#xff0c;已经成为最大的服务器系统软件了。 Linus虽然创建了Linux&#x…

线程池最佳实践

文章目录 yml参数配置定义参数实体bean配置线程池实战线程池高级理论线程池工作流程概述线程池拒绝策略线程池参数设置原则1&#xff09;如何为线程池设置合适的线程参数&#xff1f;2) 如何获取当前服务器的cpu核数&#xff1f;3) 无界队列问题 yml参数配置 # 定时任务线程池…

Spring高手之路1——深入理解与实现IOC依赖查找与依赖注入

本文从xml开始讲解&#xff0c;注解后面给出 文章目录 1. 一个最基本的 IOC 依赖查找实例2. IOC 的两种实现方式2.1 依赖查找&#xff08;Dependency Lookup&#xff09;2.2 依赖注入&#xff08;Dependency Injection&#xff09; 3. 在三层架构中的 service 层与 dao 层体会依…

Kafka与消息队列的比较

消息队列&#xff08;Message Queues&#xff09;是一种允许分布式系统和应用异步通信的服务。异步通信意味着消息发送者在等待接收者接收消息之前不需要等待&#xff0c;这可以提高性能和可扩展性&#xff0c;使应用能够并行处理消息。消息队列通过将消息存储在队列中来工作。…

【Vue_项目搭建部署】VUE快速入门——部署_安装ele等

检查是否安装 node npm npm -v node -v 全局安装yarn npm install -g yarn 安装完后&#xff0c;可以配置yarn的淘宝镜像 yarn config get registry //查看当前配置的镜像源 //https://registry.yarnpkg.com yarn config set registry http://registry.npm.taobao.or…

【Redis29】Redis进阶:缓存穿透、击穿与雪崩

Redis进阶&#xff1a;缓存穿透、击穿与雪崩 其实啊&#xff0c;这个内容本来不打算写了&#xff0c;网上讲这一块的内容实在是太多了。不过呢&#xff0c;本着学习还是要全面的原则&#xff0c;而且还要让自己多多巩固复习的原则&#xff0c;咱还是来写一道吧。 同样的&#x…