文档章节

JMeter Web测试快速入门教程

dotleo
 dotleo
发布于 2017/09/04 17:35
字数 4532
阅读 9
收藏 0
点赞 0
评论 0

学习前的准备

学习本教程前,你的电脑上至少应该有Apache JMeter这款软件。如果你没有,点击此处下载。

当你点进去后,你会发现它是一个依赖Java的软件

pic

因此如果你电脑上没有Java环境,你应该首先安装它,然后才能在你的电脑上使用JMeter。(本文不提供安装Java环境的步骤,如果你不会安装,请自行百度“jdk8安装与配置”)

关于JMeter的下载,如果你不想了解它是怎么实现的,下载Binaries版本即可。

  • 如果你的操作系统是Windows,选择.zip格式的文件最好;
  • 如果是Linux,Mac等,你可以选择.tgz格式的文件下载。

pic

运行JMeter

  • 如果你是Windows平台。解压你下载的.zip压缩文件,在bin目录下双击jmeter.bat
  • 如果你是Linux、Mac等平台。同样得先解压.tgz格式文件,在终端中进入到bin目录下,运行jmeter.sh即可

当然还有其他的运行方式,以上运行方式一般在创建脚本、修改脚本时使用,文章后面会讲到在执行脚本时的另一种打开JMeter的方式。

JMeter GUI基本操作

pic

测试计划描述了JMeter运行时将会执行的一系列步骤。一个完整的测试计划会包含一个或多个线程组、逻辑控制器、采样器、监听器、定时器、断言和配置元件。

1.添加/移除测试元件

添加一个测试元件,先选中测试树上的某个元件,右击,在弹出的菜单中选择“添加”,再在其级联菜单中选择一个新的元件

pic

删除一个测试元件,只需要右击测试元件,点击“删除”即可。

2.加载和保存测试元件

加载元件,在需要加载的地方右击,在菜单中选择“合并”,再在弹出的对话框中选择外部文件

保存元件,在需要保存的元件上右击,在菜单中选择“另存为”。JMeter会保存选中的测试元件,及其下面的子测试元件。通过这种方式可以独立的保存某个或某些测试元件,以供后续使用。

3.配置测试树中的测试元件

在JMeter图形用户界面右侧,有相关元件的控制面板,可以帮助用户设定某个元件的行为。

pic

4.保存测试计划

尽管这不是必须的,但作者强烈建议在运行测试计划前,先保存测试计划。选择“文件”菜单下的“保存测试计划”或者“保存测试计划为”命令。

5.运行测试计划

选择“运行”→“启动”命令,或者在图形用户界面的右上角绿色三角形图标 ico

6.终止测试

ico
左一为“停止”,右一为“关闭”

  • 停止(Ctrl+.):如果可能的话,立即停止所有线程。
  • 关闭(Ctrl+,):要求线程在当前工作完成后停止。

7.错误报告

JMeter会警告或者错误记录到jmeter.log文件中,甚至还包括一些测试自己的信息。用户可以通过检查日志文件中是否有错误信息判断是否。

JMeter常用测试元件

1.线程组

线程组是任何测试计划的起点,所有逻辑控制器和采样器都必须放在线程组之下。其他的测试元件(如监听器)可以被直接放在测试计划之下。线程组就像它的名字所描述的那样,被用来管理执行性能测试所需的JMeter线程。每一个线程都会完整的执行测试计划,而且他们之间是完全独立的运行,用这种多线程机制来模拟服务器应用的多用户并发连接。

pic

参数Ramp-Up Period告诉JMeter达到最大线程数需要多长时间。假定有10个线程,Ramp-Up period为100秒,那么JMeter就会在100秒内启动所有10个线程,并让它们运转起来。每个线程在上一个线程启动10秒之后才会开始运行。

Ramp-Up参数不能设定得太短,否则在测试的初始阶段会给予服务器过大的压力。也不能设定太长,否则就会发生第一个线程已经执行完毕,而最后一个线程还没有启动的情况(除非测试人员期望这种特殊情况的发生)

如何找到一个合适的Ramp-Up呢?作者建议初始值可以设定为Ramp-Up=总线程数,后续再根据实际情况适当增减。

默认情况下,JMeter线程组被设定成只执行一遍,用户可以根据实际需要设定参数“循环次数”

调度器是一个控制运行持续状态的元件。可以设定测试运行的“启动时间”和“结束时间”。测试启动后会一直等待,直到用户设定得启动时间。测试运行期间,JMeter会在每一次循环结束后,检查是否已达到结束时间。如果已经达到结束时间,JMeter会终止测试元件运行,否则JMeter会继续下一个测试循环。

另外,用户还可以设置“持续时间”和“启动延迟”两个参数。需要注意的是,“启动延迟”会使“启动时间”无效,而“持续时间”会使“结束时间”无效。

2.控制器

JMeter有两种类型的控制器:采样器和逻辑控制器,二者结合起来驱动测试进程。采样器被JMeter用来向服务器发送请求。例如当测试人员想往服务器发送一个HTTP请求时,就加入一个HTTP请求采样器。

用户可以使用逻辑控制器来控制JMeter的测试逻辑,比如何时发送请求。举个栗子,测试人员可以插入交替控制器来轮流发送多个请求。

  1. 采样器

    采样器发送一个请求到指定服务器,并等待服务器的请求。采样器会按照其在测试树中的顺序去执行,还可以用逻辑控制器来控制采样器运行的重复次数。

    Web测试中,一般用到的采样器是HTTP Request

  2. 逻辑控制器

    逻辑控制器可以帮助用户控制JMeter的测试逻辑。特别是何时发送请求。逻辑控制器可以改变其子测试元件的请求执行顺序。

    例如:如果有一个登录请求,在整个测试过程中只需要执行一次,在剩下的测试循环中它没有必要执行,就可以使用仅一次控制器(Once Only Controller)。

    关于逻辑控制器本文之后只介绍循环控制器,如果想了解更多,请自行百度学习。

3.监听器

监听器的作用主要是记录在测试期间,服务器返回的信息、以及请求响应时间等一些参数,方便得为用户展示它们。

  • “图形结果”监听器会将系统响应时长绘制在一张图片中。
  • “查看结果树”监听器会展示采样器请求和响应的细节,还能以HTML和XML格式展示系统响应的基础部分。
  • “Aggregate Graph”监听器会展示每个步骤的平均响应时间
  • “Response Time Graph”监听器会以时间段的形式展现出平均响应时间。
  • “聚合报告”监听器以表格的形式展示了测试过程中获得的数据。

4.定时器

默认情况下,JMeter线程在发送请求之间是没有间歇。当添加了某种定时器后,请求之间就有了间隔时长。

5.断言

用户可以使用断言来检查从服务器获得的响应内容是否与期望相符。

例如:测试人员可以断言某个查询的响应结果是否包含特定的文字。测试人员可以使用Perl格式的正则表达式来匹配响应结果。

6.配置元件

配置元件与采样器紧密关联。它可以记录或者设置采样器中的一些信息。

例如:“用户定义的变量”可以定义一个服务器地址的变量,在采样器中可以通过“${变量名}”的方式获取到变量的值。

7.前置处理器

前置处理器会在采样器发出请求之前做出一些特殊操作。如果前置处理器附着在某个采样器之下,那么它只会对该采样器起作用。

8.后置处理器

后置处理器会在采样器发出请求之后做出一些特殊操作。

JMeter脚本开发基础

1.JMeter执行顺序规则

JMeter执行顺序规则如下:

  • 配置元件
  • 前置处理器
  • 定时器 -采样器
  • 后置处理器
  • 断言
  • 监听器

只有当作用域内存在采样器是,定时器、断言、前置/后置处理器才会被执行。

例如,在如下测试计划中:

    Controller
        Post-Processor 1
        Sampler 1
        Sampler 2
        Timer 1
        Assertion 1
        Pre-Processor 1
        Timer 2
        Post-Processor 2

执行顺序为: Pre-Processor 1
Timer 1
Timer 2
Sampler 1
Post-Processor 1
Post-processor 2
Assertion 1

Pre-Processor 1
Timer 1
Timer 2
Sampler 2
Post-Processor 1
Post-processor 2
Assertion 1

2.作用域规则

监听器、配置元件、前置处理器、后置处理器、断言、定时器作用于其父级或父级的相关子级测试元件。

逻辑控制器会对其子级起作用,比如采样器。

pic

上图中:

  • 1标识的“用户定义的变量”配置元件,在其父级“Thread Group”的所有子级测试元件中都可以成功访问。
  • 2标识的“Aggregate Graph”监听器也只对其父级“登录”逻辑控制器的子级“登录页”和“跳转首页”采样器实行监听。
  • 3标识的“图形结果”只对其父级“个人中心”采样器实行监听。
  • 4标识的“意见反馈”逻辑控制器控制了其子级采样器的执行。

3.属性和变量

JMeter属性统一定义在jmeter.properties文件中。属性可以在测试脚本的任何位置访问(全局)。变量对于测试线程而言是局部变量。

大多是变量都是通过函数调用和测试元件(如用户定义变量)来设置的。

4.参数化

参数化是指为某个请求设置参数和值得过程。在测试中,比如你的系统设置了用户不能同时在线,则测试时多个线程必须使用不同的用户名和密码组合去登录你的系统,这时候就需要参数化你的请求。

pic

如图所示,这样为username和password两个参数赋值,这种赋值方式为JMeter中的函数(作为入门教程,本文也只介绍这一个函数,想了解更多请自行百度学习),这样在每个线程中,JMeter都会使用不同的username和password去请求。

关于从文本文件中批量获取数据的函数介绍:

  1. 准备一个txt文件,每行表示一组数据,之间用逗号隔开,如下

    17666666660,123456
    17666666661,123456
    17666666662,123456
    17666666663,123456
    17666666664,123456
    17666666665,123456
    17666666666,123456
    17666666667,123456
    17666666668,123456
    
  2. 点击“选项”→“函数助手对话框”,在对话框的“选择一个功能”下拉框中选择“_CSVRead”函数

    pic

  3. 在CSV file后面值的位置填写文件路径,在第二行CSV文件列号填写列号(用 , 分割)。点击生成后复制函数字符串到登录对应采样器的username值的位置,并将函数中第二个参数0改为1复制到采样器password值得位置。

创建Web测试计划

这一部分,将会介绍如何创建一个简单的测试计划来测试Web站点。我们会模拟5个并发用户,对Web站点的两个页面进行访问。另外,每个并发用户都会运行测试两次。因此总请求书为5(并发用户)x2(请求)x2(重复2次)=20HTTP请求。

  1. 添加并发用户

    在新打开的JMeter中,右击“测试计划”→“添加”→“Threads(Users)”→“线程组”,添加一个“线程组”

    为它起一个有意义的名称“Apache Users”,线程数设置为5(5个用户并发),Ramp-Up Period(in seconds)设置为5(5秒内启动所有线程),循环次数设置为2(循环测试2次)

    pic

  2. 添加默认HTTP请求属性

    右击“线程组”→“添加”→“配置元件”→“HTTP请求默认值”。在这里,你可以设置你的服务器名称或者IP,如此做,在以后的采样器等元件中,你将不必输入它们。

    为“协议”设置http,为服务器名称或IP设置www.apache.org

    pic

  3. 添加对Cookie的支持

    通常所有的Web测试都要支持Cookie,除非测试人员的应用系统很特别,不适用Cookie。

    要添加HTTP Cookie管理器(HTTP Cookie Manager),只需简单的选中线程组,右击“添加”→“配置元件”→“HTTP Cookie管理器”即可。

  4. 添加HTTP请求

    在测试计划中,我们打算发送两个HTTP请求,第一个是Apache主页(https://www.apache.org),第二个是download页面(https://www.apache.org/dyn/closer.cgi)。

    首先为线程组添加第一个HTTP请求(“添加”→“Sampler”→“HTTP 请求”),接着选中该HTTP请求,并编辑其属性。

    (1) 将“名称”改为“Home Page”
    (2) 将“路径”设置为 “/”

    注意此处不需要设置协议、服务器名称或IP、端口号,因为在之前我们添加了“HTTP请求默认值”。

    pic

    接下来,添加第二个HTTP请求,并编辑其属性

    (1) 将“名称”改为“Download Page”
    (2) 将“路径”设置为“/dyn/closer.cgi”

    pic

  5. 添加监听器用于查看/存储测试结果

    测试人员为测试计划添加的最后一个测试元件就是监听器,它可以把所有的HTTP请求结果存储在一个文件中,并提供可视化的模型加以展示。

    选中线程组,“添加”→“监听器”,可以在其级联菜单中选择监听器类型,这里我们添加“图形结果”、“查看结果树”、“Aggregate Graph”、“Response Time Graph”这四个监听器。

    到这里,你亲手创建的测试计划就完成了,你可以运行它并通过点击监听器查看测试结果。

录制Web测试脚本

你可以像上部分那样手动创建一个测试计划,但这样工作量大、出错率高等缺点,录制测试脚本可以避免这些缺点。

JMeter常见的录制脚本方式有两种:使用代理录制、使用Badboy工具录制。其中代理录制目前不支持录制HTTPS协议,原因在于HTTPS是安全协议,代理无法破译其通信内容,并录制请求参数或者Cookie。为了学习成本考虑,本文将不讲述代理录制。

使用Badboy录制脚本

  1. 安装并运行Badboy

    你可以通过访问http://www.badboy.com.au/download/add下载最新版本的Badboy,安装并运行它。

  2. 使用Badboy录制

    首次启动Badbody时,录制按钮默认处于选中状态,如下图所示中的红色小圆点。

    pic

    在Bodboy地址栏中输入测试网址,然后按回车键。Badboy工具会使用内置的浏览器访问对应的网址,如下图所示:

    pic

    在Badboy工具打开的页面中完成各项操作后。你可以在左侧看到录制的脚本,并对它们进行操作

    录制完成后,点击红色小圆点停止录制

  3. 导出Badboy测试脚本

    在Badboy中完成脚本录制后,可以将测试脚本导出成JMX格式(File→Export to JMeter ...),这样你就可以在JMeter中打开并做诸如添加监听器、修改脚本等修改,并运行它们。

测试

前面我们讲到在JMeter中创建和编辑脚本,当然你也用点击“开始”按钮(绿色箭头)的方法运行了脚本,这些都是在图形化界面中进行,图形化界面有直观、易用等优点,但它却能给你的性能带来不好的效果,因此这部分讲让你会使用命令行的方式去调用JMeter进行测试。

你可以自己创建测试计划,也可以通过录制得到一个测试计划,它们通常被保存成.jmx格式,这里假设你的.jmx文件全称为“demo.jmx”

  • 在Linux/Mac下,在终端中切换到JMeter的bin目录下,输入jmeter -n -t demo.jmx -l demo.jtl后回车,等待片刻便可完成测试。
  • 在Windows下,按“Win”+R键,输入cmd后回车,同样切换到JMeter的bin目录下,输入jmeter -n -t demo.jmx -l demo.jtl后回车,等待片刻便可完成测试。

查看测试结果

结果分析一般需要使用图形化界面,在图形化界面中执行“文件”→“打开”命令,打开.jmx文件。

然后点击你想查看结果的监听器,在下图所示位置点击“浏览”,添加.jtl文件即可查看到测试结果。(如果有图像展示,需要切换到“Graph”标签)

pic


文章除注明转载外,均为原创。欢迎任何形式的转载,但请务必注明出处:

文章转载自 OSchina 开源中国
本文作者:dotleo
作者主页:https://my.oschina.net/u/2930289/blog

© 著作权归作者所有

共有 人打赏支持
dotleo
粉丝 10
博文 42
码字总数 48892
作品 0
天津
程序员
JMeter学习-004-WEB脚本入门实战

此文为 JMeter 入门实战实例。我是 JMeter 初学菜鸟一个,因而此文适合 JMeter 初学者参阅。同时,因本人知识有限,若文中存在不足的地方,敬请大神不吝指正,非常感谢! 闲话少述,话归正题...

拎壶冲冲冲 ⋅ 05/29 ⋅ 0

JMeter学习-001-JMeter初识

Apache JMeter是Apache组织开发的基于Java的开源压力测试工具(个人发现也可用于接口测试)。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试...

拎壶冲冲冲 ⋅ 05/29 ⋅ 0

JMeter学习-003-JMeter与LoadRunner的异曲同工

本节主要对 JMeter 与 LoadRunner 的优缺点进行概要的总结,若有不足之处,敬请指正,不胜感激! 同时,我也不得不承认,在对 JMeter 和 LoadRunner 进行比较时,我个人的确偏向了 JMeter(免...

拎壶冲冲冲 ⋅ 05/29 ⋅ 0

linux环境下使用jmeter做性能测试

只需一行命令:sh jmeter.sh -n -t http.jmx -l result_*.jtl 步骤: 一 安装jmeter 1 把你笔记本的jmeter添加到压缩包 jmeter.zip 2 上传jmeter.zip到linux服务器:我用rz方式上传到了/opt/...

孟飞阳 ⋅ 05/24 ⋅ 0

JMeter 性能测试 Demo

1. Overview Who this article is for If you never use JMeter before and want to get an introduction of how to use it. The following section will show how the process of creating ......

Serein_7 ⋅ 05/30 ⋅ 0

JMeter 安装 --linux平台

用windows平台测试时,会受到网络条件的影响,导致测试结果不够准确,尤其是高并发的情况下,需要能够精准的测试请求的响应时长,对于网络的要求更加苛刻。在这样的情况下,可以考虑在linux...

拎壶冲冲冲 ⋅ 05/29 ⋅ 0

Dubbo Plugin for Apache JMeter

Dubbo Plugin for Apache JMeter 介绍 它是一个Apache JMeter的插件, 主要用途是在Jmeter中可视化的对Dubbo接口进行压力测试,简单易用。 Jmeter版本支持情况 Jmeter版本:3.0+ Dubbo版本支持...

凝雨 ⋅ 06/05 ⋅ 0

Jmeter使用CSV文件读取大量测试数据

在用Jmeter做性能测试的过程中,不可避免的我们需要制造大量的测试数据。这个时候我们可以使用CSV文件来存储大量的数据。 1、在实际的项目测试过程中,在测试注册接口的时候,其实就是需要大...

拎壶冲冲冲 ⋅ 05/23 ⋅ 0

Jmeter学习总结【监听器】

侦听器(Listeners) 当JMeter运行时,侦听器提供对测试用例的信息JMeter的访问。图的结果是监听器将响应时间绘制在图上。“视图结果树”侦听器显示了sampler请求和响应的详细信息,可以显示...

覃光林 ⋅ 05/07 ⋅ 0

Jmeter学习总结【定时器】

默认情况下,JMeter线程在不暂停的情况下依次执行samplers。我们建议您通过向线程组添加一个可用的计时器来指定延迟。如果您不添加延迟,JMeter会在很短的时间内发出太多的请求,从而使服务器...

覃光林 ⋅ 05/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 27分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 46分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 54分钟前 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部