参考:https://learning.oreilly.com/library/view/jmeter-cookbook/9781783988280/ch02.html#ch02lvl1sec20
第 1 章 JMeter 基础知识
在本章中,我们将介绍以下:
- 执行测试脚本
- 通过 HTTP(S) 测试脚本记录器记录脚本
- 通过 Chrome 浏览器扩展记录脚本
- 将 HTTP Web 存档 (HAR) 转换为 JMeter 测试计划
- 查看和分析测试结果
- 将数据输入脚本
- 使用定时器
- 管理 HTTP 用户会话
- 测试单页应用程序 (SPA)
- 测试以 AJAX 为中心的应用程序
介绍
在本章中,您将学习有助于您更好地使用 JMeter 的基础知识和中级技能。诸如执行或记录脚本之类的任务是例行公事,您几乎可以肯定您需要执行它们,有时是每天执行一次。此外,我们将学习如何查看和分析测试执行的结果,将数据输入测试脚本,并借助计时器使测试脚本模仿用户行为。在后面的秘籍中,我们将深入探讨如何使用 JMeter 处理身份验证、授权和测试当今的新型应用程序。
1.1 执行测试脚本
测试脚本是一个系列针对应用程序发出的预先录制的请求。它们是捕获的用户操作与应用程序的交互。其中包括访问 URL、浏览多个页面、登录等等。与大多数测试工具一样,JMeter 具有记录和回放测试脚本的能力。JMeter 测试脚本以带有扩展名的 XML(可扩展标记语言)格式存储.jmx
。
用户可以在他们选择的文本编辑器(例如 Sublime Text、Notepad 等)中打开测试脚本并准确查看它在做什么,但在 JMeter 的 GUI 中可以更清楚地了解脚本的作用。
脚本也可以在 JMeter 所说的非 GUI 模式下执行,完全在命令行上,无需启动 JMeter GUI。
On Unix/Mac OS, type in the following command:
./jmeter -n -t [path to test script] -l [path to results files]
On Windows, type in the following command:
jmeter.bat -n -t [path to test script] -l [path to results files]
有几个原因为什么您可能想在非 GUI 模式下执行测试。其中一些原因包括:
- 在没有 GUI 层的 Unix 机器上运行(也就是说,JMeter GUI 甚至没有打开)
- 运行分布式测试
- JMeter GUI 的性能原因,有时会占用大量资源;在非 GUI 模式下运行可缓解此问题```
1.2 执行通过 HTTP(S) 测试脚本记录器记录脚本
通过 JMeter 的 HTTP(S) 测试脚本记录器记录脚本是您在构建测试计划时可用的选项之一。
如何使用 HTTP(S) 测试脚本记录器记录测试脚本,执行以下步骤:
1.打开命令行提示符
2.切换到 JMeter 安装目录 ( JMETER_HOME)
3.切换到bin目录
4.执行以下命令:
对于 Windows,键入jmeter.bat
对于 Mac OS/Unix,键入./jmeter
5.打开 GUI 后,单击工具栏上的Templates...按钮(立即出现在新测试计划图标右侧的图标)。
6.在选择模板框的下拉菜单中,选择录制并单击创建按钮。
7.单击HTTP(S) Test Script Recorder元素(在WorkBench下)并将Port(在Global Settings下)从8888更改为7000。如果您愿意,可以使用不同的端口。重要的是选择机器上现有进程当前未使用的端口。默认值为8888.
将其余组件保留为默认设置值。
8.点击HTTP(S) 测试脚本记录器组件底部的开始按钮。
用这些设置,测试脚本记录器服务器将在端口上启动7000,监视通过该端口的所有请求,并使用默认记录控制器将它们记录到测试计划中。
1.2.1 HTTP(S) 测试脚本记录器配置
这些步骤指示 JMeter 充当HTTP 代理并侦听从您的浏览器到分配的端口上的 Internet 的传入和传出请求,在我们的例子7000中。
我们现在需要配置浏览器以使用我们刚刚配置的代理服务器并将请求重定向到分配的端口。有几种方法可以做到这一点,但我们将在这里重点介绍两种最常见的方法。
方法一,安装插件FoxyProxy
现代浏览器拥有一个充满活力且活跃的插件生态系统,允许您通过添加插件来扩展浏览器的功能。FoxyProxy就是这样一种插件(http://getfoxyproxy.org/)。它是一个简洁的浏览器插件,允许您设置各种代理设置并在它们之间动态切换,而不必弄乱机器上的系统设置。它确实使工作变得无忧无虑。值得庆幸的是,FoxyProxy 有一个适用于所有主要浏览器的插件,包括 Google Chrome、Firefox 和 Internet Explorer。如果您使用其中任何一个,那么您很幸运;头过去抓住它!
方法2, 更改机器系统设置
在 Windows 操作系统上,执行以下步骤来配置代理:
导航到开始| 控制面板| 网络与互联网| 互联网选项。
在Internet 选项对话框中,单击连接选项卡。
单击LAN 设置按钮。
要启用代理服务器,请选中为您的 LAN 使用代理服务器(这些设置将不适用于拨号或 VPN 连接)框,如下面的屏幕截图所示。
在代理地址框中,输入localhostIP 地址。
在端口号文本框中,输入7000(以匹配您之前为 JMeter 代理设置的端口)。
如果要绕过本地 IP 地址的代理服务器,请选中绕过本地地址的代理服务器复选框。
单击确定以完成代理配置过程。
在 Mac OS 上,执行配置代理的步骤如下:
导航到系统偏好| 网络| 进阶……
转到代理选项卡。
检查Web 代理 (HTTP)。
在Web 代理服务器下,输入localhost。
对于端口,输入7000(以匹配您之前为 JMeter HTTP 代理设置的端口)。
对安全 Web 代理 (HTTPS)执行相同操作。
点击OK
对于所有其他系统,请查阅相关的操作系统文档。
1.2.2记录测试
将 JMeter 的 HTTP(S) 测试脚本记录器和浏览器都配置为使用它后,我们现在可以记录测试了。执行以下步骤:
- 将您的浏览器指向您选择的网站。
- 导航到几个链接。
- 请注意,所有用户操作都在 JMeter GUI 中的线程组组件下捕获。
- 通过停止 HTTP(S) 测试脚本记录器来停止记录。
- HTTP(S) 测试脚本记录器服务器设置为侦听特定端口上的请求,然后将浏览器或系统设置为将所有请求重定向到分配的端口。这使我们能够在用户与 Web 应用程序交互时捕获他们的操作,允许我们像在执行测试脚本配方中那样重放他们的操作。
1.2 通过 Chrome 浏览器扩展记录脚本
记录测试脚本是你将成为的一个经常做。我们在 JMeter 中记录测试脚本的方式有很多选择。使用安装在 Google Chrome 浏览器上的浏览器插件来记录测试脚本。执行以下步骤:
- 如果您的计算机上尚未安装 Google Chrome 浏览器,请安装它。
- 打开 Chrome 网上应用店。
-
blazemeter
在网上商店搜索。 - 单击“免费”按钮安装 BlazeMeter 浏览器扩展。
- 单击浏览器工具栏右上角新添加的 BlazeMeter 扩展按钮。
- 按录制按钮。
- 将您的浏览器指向您选择的网站。
- 导航通过网站,就像您通常作为用户所做的那样。
- 在上一步之后,停止录制并单击导出到 jmx 按钮 ( .jmx )。这会将您的脚本副本下载到您的本地计算机。
- 打开在 JMeter 中导出测试脚本。
- 将Tree Listener中的 View Results添加到测试计划(Test plan | Add | Listener | View Results in Tree Listener)。
- 使用 JMeter 运行导出的测试脚本。
- 查看结果。
这只要记录器打开,浏览器扩展程序就会以 JSON 格式捕获用户与网站的交互。录制停止,没有进一步的用户操作被捕获。单击导出按钮后,JSON 格式将转换为 XML 格式,JMeter 可以理解并使用该格式。然后可以像任何其他脚本一样在 JMeter 中编辑和运行下载的录制脚本。
该扩展允许您通过为您提供在用户交互之间暂停记录的能力来选择性地捕获请求。它还允许您通过包含过滤模式文本区域过滤掉您可能不想在测试脚本中捕获的不需要的流量。
最后,由于 BlazeMeter(在云中提供分布式测试的众多提供商之一)提供了此扩展,它还提供了其他功能,包括以下内容:
1.3 将 HTTP Web 存档 (HAR) 转换为 JMeter 测试计划
其他记录测试脚本的替代方法在 JMeter 中,将现有的 HTTP Web 存档直接转换为 JMeter 测试脚本。
从浏览器中捕获的 HTTP Web 请求生成测试脚本。执行以下步骤:
- 安装并启动 Google Chrome 浏览器(如果您还没有)。
- 通过导航到工具打开开发人员工具| 开发者工具。
- 单击网络选项卡。
- 制作确保选中保留日志复选框。
- 浏览像往常一样的网站。
- 完成浏览后,打开开发人员工具窗口,右键单击并选择Copy All as HAR。
- 将浏览器指向https://flood.io/har2jmx。
- 将剪贴板的内容复制到输入框中。
- 单击转换按钮。
- 启动 JMeter GUI。
- 打开并检查下载的测试脚本。
- 将Tree Listener中的 View Results添加到测试计划(Test plan | Add | Listener | View Results in Tree Listener)。
- 保存并运行导出的测试脚本。
- 查看结果。
借助内置的浏览器工具和插件,浏览器能够将用户和 Web 应用程序之间的所有交互捕获到JSON(JavaScript Object Notation)中称为 Web 存档 (HAR) 的格式。这个生成的 JSON 对象包括有关每个请求的所有信息,包括 HTTP 标头、方法、查询字符串等。给定 JSON 对象或包含其内容的文件,HAR 到 JMX 转换器然后可以为每个用户请求读取、解析和构造 JMeter 元素,类似于 JMeter HTTP 代理所做的事情。
为了不想通过 Flood IO 的网站进行转换的命令行爱好者,有一个命令行工具可以用来实现 HAR TO JMX 转换。Har2jmeter位于http://seitenbau.github.io/har2JMeter/是一个用 Groovy 语言编写的实用程序。它仍处于起步阶段,因此您可能会在这里和那里遇到一些怪癖。在测试它时,我们发现一件事是它目前不能很好地与安全连接 (HTTPS) 配合使用。此外,它没有将请求分组到逻辑控制器中。我们在这里提到它只是为了让您知道它的存在,并且这些错误可能会在不久的将来得到修复。