<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jmeter综合教程 on 重定向学院</title><link>https://itest2025.pages.dev/categories/jmeter%E7%BB%BC%E5%90%88%E6%95%99%E7%A8%8B/</link><description>Recent content in Jmeter综合教程 on 重定向学院</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Tue, 17 Jun 2025 17:29:15 +0800</lastBuildDate><atom:link href="https://itest2025.pages.dev/categories/jmeter%E7%BB%BC%E5%90%88%E6%95%99%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>JMeter官方文档：1. 新手入门</title><link>https://itest2025.pages.dev/tutorials/22-001-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A31-%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A8/</link><pubDate>Wed, 06 Sep 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-001-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A31-%E6%96%B0%E6%89%8B%E5%85%A5%E9%97%A8/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/get-started.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;p>注：不知道怎么的翻译的句子保留的英文。&lt;/p>
&lt;h2 id="1-新手入门">1. 新手入门&lt;/h2>
&lt;hr>
&lt;h3 id="10-概述">1.0 概述&lt;/h3>
&lt;hr>
&lt;p>当你使用JMeter的时候一般会遵循以下过程：&lt;/p>
&lt;h4 id="101-创建测试计划">1.0.1 创建测试计划&lt;/h4>
&lt;hr>
&lt;p>首先，你需要启动&lt;a href="http://jmeter.apache.org/usermanual/get-started.html#running" target="_blank" rel="noopener noreffer ">JMeter GUI&lt;/a>&lt;/p>
&lt;p>然后，你可以选择从浏览器或本地应用程序记录应用程序。通过菜单：&lt;strong>文件  →  Templates&amp;hellip;  → Recording&lt;/strong>。&lt;/p>
&lt;p>注意，你还可以通过手动生成测试计划，你需要阅读&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html" target="_blank" rel="noopener noreffer ">文档&lt;/a>并理解上面概念。&lt;/p>
&lt;p>你还可以通过下面的方式进行调试：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>运行 → Start no pauses&lt;/strong>&lt;/li>
&lt;li>&lt;strong>运行 → 启动&lt;/strong>&lt;/li>
&lt;li>&lt;strong>验证&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#Thread_Group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>和&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#View_Results_Tree" target="_blank" rel="noopener noreffer ">查看结果树&lt;/a>的渲染和调试（CSS/JQUERY, JSON, Regexp, XPath）。
确保在构建测试计划时遵循&lt;a href="http://jmeter.apache.org/usermanual/best-practices.html" target="_blank" rel="noopener noreffer ">最佳实践&lt;/a>。&lt;/p>
&lt;h4 id="102-负载测试执行">1.0.2 负载测试执行&lt;/h4>
&lt;hr>
&lt;p>一旦测试计划就绪，就可以开始负载测试了。第一步是配置运行JMeter的注入器，这对于任何其他负载测试工具包括：&lt;/p>
&lt;ul>
&lt;li>在CPU、内存和网络方面对机器进行正确的调整。&lt;/li>
&lt;li>操作系统的优化&lt;/li>
&lt;li>&lt;strong>Java设置：&lt;/strong> 确保你安装Java支持的JMeter的最新版本。&lt;/li>
&lt;li>&lt;strong>正确调整Java堆大小：&lt;/strong> 默认的JMeter以512MB的堆运行，这可能对你的测试没什么帮助，主要取决于你的测试计划和你想要运行的线程数。&lt;/li>
&lt;/ul>
&lt;p>一旦一切就绪，你将使用命令行模式（称为非GUI模式）来运行负载测试。&lt;/p>
&lt;blockquote>
&lt;p>不要使用GUI模式运行负载测试!&lt;/p>&lt;/blockquote>
&lt;p>使用非gui模式，你可以生成包含CSV(或XML)结果的文件，并在负载测试结束时生成JMeter生成HTML报告。默认情况下，JMeter将在运行时提供负载测试的摘要。&lt;/p>
&lt;p>你还可以使用后端侦听器在测试期间获得实时结果。&lt;/p>
&lt;h4 id="103-负载测试分析">1.0.3 负载测试分析&lt;/h4>
&lt;hr>
&lt;p>负载测试结果后，可以使用HTML报告来分析负载测试。&lt;/p>
&lt;h4 id="104-让我们开始吧">1.0.4 让我们开始吧&lt;/h4>
&lt;hr>
&lt;p>开始使用JMeter最简单的方法是首先&lt;a href="http://jmeter.apache.org/download_jmeter.cgi" target="_blank" rel="noopener noreffer ">下载最新的产品版本&lt;/a>并安装它。该版本包含构建和运行大多数类型的测试所需的所有文件，例如 Web(HTTP / HTTPS)、FTP、JDBC、LDAP、Java、JUnit等。&lt;/p>
&lt;p>如果你想要执行JDBC测试，那么你当然需要来数据库供应商JDBC驱动程序。JMeter不包含任何JDBC驱动程序。&lt;/p></description></item><item><title>JMeter官方文档：2. 创建测试计划</title><link>https://itest2025.pages.dev/tutorials/22-002-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A32-%E5%88%9B%E5%BB%BA%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-002-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A32-%E5%88%9B%E5%BB%BA%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="2构建测试计划">2.构建测试计划&lt;/h2>
&lt;hr>
&lt;p>测试计划描述了当程序运行起来时JMeter会执行的一系列步骤，一个完整的测试计划会由以几部分组成，包括一个或多个线程组、逻辑控制器、示例生成控制器、侦听器、定时器、断言、和配置元素组成。&lt;/p>
&lt;h3 id="21-添加和删除元素">2.1 添加和删除元素&lt;/h3>
&lt;hr>
&lt;p>我们可以通过下面两种方式添加&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html" target="_blank" rel="noopener noreffer ">元素到测试计划&lt;/a>，一种是右键点击树上的元素，从“&lt;strong>添加&lt;/strong>”列表中选择一个新元素；或者也可以通过选择菜单栏“文件”&amp;ndash;“&lt;strong>合并&lt;/strong>”或“&lt;strong>打开&lt;/strong>”选项从文件中加载元素。&lt;/p>
&lt;p>确保元素是被选中的，右键单击元素，选择“&lt;strong>删除&lt;/strong>”选项可以将元素移除.&lt;/p>
&lt;h3 id="22-加载和保存元素">2.2 加载和保存元素&lt;/h3>
&lt;hr>
&lt;p>通过文件加载元素，右键选择向其中添加加载元素的树元素，选择“合并”选项选择元素保存的文件，JMeter会将元素合并到树中去。&lt;/p>
&lt;p>右键一个元素并选择“选中部分保存为…”选项以保存树元素。JMeter保存树元素时会连带的将它下面的子节点一起保存。通过这种方式，在后面的运用中你可以成段的或者单独的保存元素。&lt;/p>
&lt;pre>&lt;code>默认情况下，工作台不会被自动保存到测试计划，但是它能够通过在工作台元素上勾选“Save Workbean”去保存.
&lt;/code>&lt;/pre>
&lt;h3 id="23-配置树元素">2.3 配置树元素&lt;/h3>
&lt;hr>
&lt;p>测试树中的任何元素在JMeter的右手框架中都被表现为控制器。这些控制器允许你为特定的测试元素配置行为。具体有哪些行为可以配置取决于是何种类型的元素。&lt;/p>
&lt;pre>&lt;code>测试树本身可以被测试树周围的拖放控件操作.
&lt;/code>&lt;/pre>
&lt;h3 id="24-保存测试计划">2.4 保存测试计划&lt;/h3>
&lt;hr>
&lt;p>尽管没有硬性要求，我们还是建议你在执行测试计划前先保存测试计划到文件。保存一个测试计划可以从文件按钮中选择“保存测试计划”或者“保存测试计划为…”（如果你是用的最新发布版本的JMeter，就不需要在保存之前先选中测试计划）&lt;/p>
&lt;pre>&lt;code>JMeter允许你保存整个测试计划树或者计划树里面的一部分。如果只是保存特定分支的计划树里面的元素，
可以从开始的分支里面选择测试计划树元素，右键选择“选中部分保存为…”菜单选项。或者也可以先选
择正确的测试计划元素然后通过编辑按钮选择“选中部分保存为…” 选项。
&lt;/code>&lt;/pre>
&lt;h3 id="25-运行一个测试计划">2.5 运行一个测试计划&lt;/h3>
&lt;hr>
&lt;p>运行测试计划，从“运行”菜单选项中选择“启动”（&lt;code>Control + R&lt;/code>）按钮。当JMeter运行的时候，它会在菜单栏下面的左手边显示一个绿色的小盒子的形状。你也可以通过检查“运行”菜单选项去检查测试计划是否运行起来，如果“启动”是禁用的，并且 “停止” 是启用的，这样JMeter就正在运行你的测试计划。（或者至少在我看来是这样的）
绿色边框左下角的数字就是活动线程除以总共线程，这种计算方式只是适用在本地运行测试测试；不包含任何在远程服务器上启动的线程当使用的是 &lt;strong>客户端-服务器&lt;/strong> 模式的时候。&lt;/p>
&lt;pre>&lt;code>这里所描述的GUI模式只是适用于调试测试计划，如果运行真实的load test，请用非GUI模式。
&lt;/code>&lt;/pre>
&lt;h3 id="26-停止测试">2.6 停止测试&lt;/h3>
&lt;hr>
&lt;p>在菜单中有两种停止的测试命令可供选择：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>停止（&lt;code>Control + .&lt;/code>）-尽可能立即停止线程。很多采样器会被中断这意味着那些活跃的采样器也会被立即终止。停止命令会检查在默认设置的5s超时的时间内是不是所有的线程都终止了。[这个默认时间是可以通过JMeter（ &lt;strong>jmeterengine.threadstop.wait&lt;/strong>）的属性设置的] 如果有线程没有终止，这时会有一条提示信息显示出来。停止命令会重试，如果还是失败，有必要通过直接退出JMeter去清理。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>关闭（&lt;code>Control + ，&lt;/code>）-请求在当前任何工作的末尾去结束线程，不会中途干扰活跃的采样器。 这种情况下关闭对话框会一直保持活跃直到所有的线程都终止。
如果关闭花费太长时间。关掉对话框选择 &lt;strong>运行/停止&lt;/strong> ， 或者按下&lt;code>Control + . &lt;/code>.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>这儿是没有菜单的当运行non-GUI模式的时候，并且JMeter对像&lt;code>Control + . &lt;/code>这样的快捷键不会做出反应。 因此JMeter non-GUI模式会在特定端口来监控这些命令。（默认端口是4445，参见JMeter的 &lt;strong>jmeterengine.nongui.port&lt;/strong> 属性）。 Jmeter是支持自动切换端口的当默认端口被占用的时候（举个例子被其他Jmeter的实例占用）。 在这种情况下，Jmeter会尝试更大数值的端口号，直到达到Jmeter 属性 &lt;strong>jmeterengine.nongui.maxport&lt;/strong> 的最大值4455。如果最大端口小于或者等于端口号， 端口扫描就不会发生。
选择的端口会在控制窗口显示。&lt;/p></description></item><item><title>JMeter官方文档：3. 测试计划中的元素</title><link>https://itest2025.pages.dev/tutorials/22-003-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A33-%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92%E4%B8%AD%E7%9A%84%E5%85%83%E7%B4%A0/</link><pubDate>Thu, 24 Aug 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-003-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A33-%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92%E4%B8%AD%E7%9A%84%E5%85%83%E7%B4%A0/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/test_plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="3测试计划中的元素elements-of-a-test-plan">3.测试计划中的元素（elements of a test plan）&lt;/h2>
&lt;hr>
&lt;p>本节描述测试计划不同的部分。&lt;/p>
&lt;p>最小测试将包括测试计划、线程组和一个或多个采样器。&lt;/p>
&lt;h3 id="30-测试计划test-plan">3.0 测试计划（Test Plan）&lt;/h3>
&lt;hr>
&lt;p>测试计划对象有一个叫 &lt;strong>“功能测试”&lt;/strong> 的复选框，如果选择了，它将导致JMeter记录从服务器返回的每个示例的数据。如果您在测试监听器中选择了一个文件，那么这些数据将被写入文件。如果您正在执行一个小的运行，以确保JMeter的配置正确，并且您的服务器正在返回预期的结果，那么这将非常有用。其结果是，文件将快速增长，JMeter的性能将受到影响。如果您正在进行压力测试(默认情况下是off)，则该选项应该关闭。&lt;/p>
&lt;p>如果您没有将数据记录到文件中，则该选项没有任何区别。&lt;/p>
&lt;p>您还可以使用侦听器(listener)的 &lt;strong>配置&lt;/strong> 按钮来决定要保存哪些字段。&lt;/p>
&lt;h3 id="31-线程组thread-group">3.1 线程组（Thread group）&lt;/h3>
&lt;hr>
&lt;p>线程组元素是任何测试计划的起点。所有控制器和采样器必须在线程组下。其他元素，例如侦听器，可以直接置于测试计划之下，在这种情况下，它们将适用于所有的线程组。顾名思义，线程组元素控制JMeter用来执行测试的线程的数量。线程组的控件允许:&lt;/p>
&lt;ul>
&lt;li>Set the number of threads： 设置线程数&lt;/li>
&lt;li>Set the ramp-up period：设置过渡时期&lt;/li>
&lt;li>Set the number of times to execute the test：设置执行测试的次数&lt;/li>
&lt;/ul>
&lt;p>每个线程将完全独立地执行测试计划，完全独立于其他测试线程。多个线程用于模拟与服务器应用程序的并发连接。&lt;/p>
&lt;p>这个过渡时期告诉JMeter要花多长时间才能“加速”到选择的全部线程数。如果使用10个线程，并且过渡时期是100秒，那么JMeter将花费100秒来启动所有10个线程并运行。在前面的线程开始后，每个线程将开始10(100 / 10)秒。如果有30个线程和一个上升周期120秒，则每个连续线程将延迟4秒。&lt;/p>
&lt;p>需要足够长的时间来避免在测试开始时工作负载过大，足够短的时间，最后的线程在第一个线程完成之前就开始运行(除非有人希望发生这样的情况)。
从增加的线程数开始，根据需要调整向上或向下。&lt;/p>
&lt;p>默认情况下，线程组被配置为通过它的元素循环一次。&lt;/p>
&lt;p>线程组还提供了一个 &lt;strong>调度器&lt;/strong> 。单击线程组面板底部的复选框，以启用/禁用额外的字段，在该字段中您可以输入测试持续时间、启动延迟、运行的开始和结束时间。您可以配置 &lt;strong>持续时间（秒）&lt;/strong> 和 &lt;strong>启动延迟（秒）&lt;/strong> 来控制每个线程组的持续时间和启动后的秒数。当开始测试时，JMeter会等待 &lt;strong>启动延迟（秒）&lt;/strong> 之前启动的线程组的线程和运行配置的持续时间（秒）的时间。注意，这两个选项覆盖了 &lt;strong>开始时间&lt;/strong> 和 &lt;strong>结束时间&lt;/strong> 。&lt;/p>
&lt;p>或者(尽管不建议不是很灵活)，您可以使用其他两个字段 &lt;strong>开始时间&lt;/strong> 和 &lt;strong>结束时间&lt;/strong>。当测试开始时，JMeter将在必要时等待，直到到达开始时间。在每个循环的末尾，JMeter检查是否已经到达了结束时间，如果是，则停止运行，否则测试将继续运行下去，直到达到迭代限制。&lt;/p>
&lt;h3 id="32-控制器controllers">3.2 控制器（Controllers）&lt;/h3>
&lt;hr>
&lt;p>JMeter有两种控制器：采样器和逻辑控制器。这些驱动测试的处理。&lt;/p>
&lt;p>采样器告诉JMeter发送请求到服务器。例如，如果你想要JMeter发送http请求添加一个HTTP请求取样器。您还可以通过向采样器中添加一个或多个配置元素来定制请求。更多信息，参见：采样器。&lt;/p></description></item><item><title>JMeter官方文档：4. 创建web测试计划</title><link>https://itest2025.pages.dev/tutorials/22-004-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A34-%E5%88%9B%E5%BB%BAweb%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-004-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A34-%E5%88%9B%E5%BB%BAweb%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-web-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="4-创建web测试计划">4. 创建web测试计划&lt;/h2>
&lt;hr>
&lt;p>在这一章，我们将学习如何创建基本的&lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a>来测试一个web网站。您将创建五个用户并发送请求到JMeter网站的两个页面。同时，设置用户运行测试两次。因此，请求的总数是（5个用户）x（2个请求）x（重复2次）＝20个HTTP请求。要构建测试计划，您将使用以下元素：&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>、&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request" target="_blank" rel="noopener noreffer ">HTTP请求&lt;/a>、&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request_Defaults" target="_blank" rel="noopener noreffer ">HTTP请求默认值&lt;/a>和&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#Graph_Results" target="_blank" rel="noopener noreffer ">图表结果&lt;/a>。&lt;/p>
&lt;p>想要创建一个更深层次的测试计划，请查看&lt;a href="https://itest2025.pages.dev/jmeter/jmeter-doc-05/" rel="">建立一个更高级的web测试计划&lt;/a>。&lt;/p>
&lt;h3 id="41-添加用户">4.1 添加用户&lt;/h3>
&lt;hr>
&lt;p>做每一个测试计划之前的第一步是添加一个&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>。在JMeter的线程组中设置要模拟的用数量，请求发送的频率，以及请求发送的次数。&lt;/p>
&lt;p>在添加线程组之前先鼠标选中测试计划，然后单击鼠标右键，选择 &lt;strong>“ 添加 → 线程组 ”&lt;/strong>。&lt;/p>
&lt;p>你现在应该看到在测试计划下的线程组元素。如果您没有看到元素，你需要单击“测试计划”来展开‘测试计划树’。&lt;/p>
&lt;p>接下来，你需要修改默认的属性。在树中选中该线程组，如果你已经选择。你现在应该在JMeter窗口右部看到线程组控制面板（见下面的图4.1）&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/http://img.testclass.net/thread_group.png"
 data-srcset="http://img.testclass.net/http://img.testclass.net/thread_group.png, http://img.testclass.net/http://img.testclass.net/thread_group.png 1.5x, http://img.testclass.net/http://img.testclass.net/thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/http://img.testclass.net/thread_group.png"
 title="http://img.testclass.net/http://img.testclass.net/thread_group.png" />
图4.1 线程组默认值&lt;/p>
&lt;p>我们为线程组提供一个更具体的描述性名称，在名称栏里输入：&lt;strong>JMeter Users&lt;/strong>。&lt;/p>
&lt;p>接下来，设置用户数量（线程数量）为5.&lt;/p>
&lt;p>在下一个字段中，设置过渡时期，保留默认值1，这个属性告诉Jmeter启动每个用户需要多长时间.例如，如果你设置过渡时期为5s，Jmeter将会在5s之内完成所有用户的启动，所以，如果你设置了5个线程数，过渡期为5s，那么启动线程之间的过渡期将是1s（5用户/5s=每秒1个用户）.如果你设置这个值为0，那么JMeter将立即开启你所有的线程，中间没有间隔。&lt;/p>
&lt;p>最后一行，选择循环2次，这个属性是告诉JMeter要重复测试多少次，如果你设置的值是1，JMeter将就跑一遍，如果选择‘永远’复选框的话，JMetre将重复运行测试计划。&lt;/p>
&lt;blockquote>
&lt;p>在大多数应用程序中，你必须手动保存才能生效，然而，在JMeter中，控制面板会在你进行更改时自动保存。如果你改变了一个元素的名称，那么在你离开控制面板上之后，新元素、就会生效（例如，当我们在选择其它树元素时）&lt;/p>&lt;/blockquote>
&lt;p>查看图4.2已经设置好的JMeter线程组&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/04_jmeter_create_web_plan.png"
 data-srcset="http://img.testclass.net/04_jmeter_create_web_plan.png, http://img.testclass.net/04_jmeter_create_web_plan.png 1.5x, http://img.testclass.net/04_jmeter_create_web_plan.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/04_jmeter_create_web_plan.png"
 title="http://img.testclass.net/04_jmeter_create_web_plan.png" />&lt;/p>
&lt;h3 id="42添加http请求默认值">4.2添加HTTP请求默认值&lt;/h3>
&lt;hr>
&lt;p>现在我们已经定义了我们的用户，是时候来定义他们将要执行的任务了。在本节中，您将指定你的HTTP请求的默认设置。然后，在第4.3节中，您将添加使用此处指定的默认设置的HTTP请求元素。&lt;/p>
&lt;p>首先选择JMeter用户（线程组）。点击你的鼠标右键来添加菜单，然后选择 &lt;strong>“添加→配置元件→HTTP请求默认值”&lt;/strong>。然后选中HTTP请求默认值以查看其控制面板（见图4.3）。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/04_jmeter_http_requestd_defaults.png"
 data-srcset="http://img.testclass.net/04_jmeter_http_requestd_defaults.png, http://img.testclass.net/04_jmeter_http_requestd_defaults.png 1.5x, http://img.testclass.net/04_jmeter_http_requestd_defaults.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/04_jmeter_http_requestd_defaults.png"
 title="http://img.testclass.net/04_jmeter_http_requestd_defaults.png" />
图4.3，HTTP请求默认值&lt;/p></description></item><item><title>JMeter官方文档：5. 构建一个高级web测试计划</title><link>https://itest2025.pages.dev/tutorials/22-005-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A35-%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E9%AB%98%E7%BA%A7web%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-005-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A35-%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E9%AB%98%E7%BA%A7web%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-adv-web-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="5-构建一个高级web测试计划">5. 构建一个高级web测试计划&lt;/h2>
&lt;hr>
&lt;p>在本章，你将学习如何创建高级&lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a>，来测试一个web网站。&lt;/p>
&lt;p>有关基础测试计划的示例，请参考&lt;a href="http://jmeter.apache.org/usermanual/build-web-test-plan.html" target="_blank" rel="noopener noreffer ">构建Web测试计划&lt;/a>&lt;/p>
&lt;h3 id="51-使用url重写用户session">5.1 使用URL重写用户session&lt;/h3>
&lt;hr>
&lt;p>如果你的 Web 应用程序，是使用URL重写而不是使用cookie保存session信息，那么你将需要做一点额外的设置来测试你的网站。&lt;/p>
&lt;p>为了争取响应URL重写，JMeter 需要解析从服务器接受的 HTML，并检索唯一的 sessionID。&lt;/p>
&lt;p>使用恰当的 &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_URL_Re-writing_Modifier" target="_blank" rel="noopener noreffer ">HTTP URL 重写修改器&lt;/a>来完成这项工作。只需要将sessionID参数名输入到修改器，jmeter会找到它并将它添加到每个请求中。如果请求已经有这个参数值，则会替换它。如果勾选Cache Session id?复选框，那么最后找到的sessionID将被保存，如果先前的http示例不包含sessionID，则会使用它。&lt;/p>
&lt;h4 id="url重写修改器示例">URL重写修改器示例&lt;/h4>
&lt;hr>
&lt;p>下载这个示例。&lt;strong>图1&lt;/strong> 显示一个使用URL重写的测试计划。注意，URL重写修改器被添加到事务控制器中，因此它只会影响该事务控制器下的请求。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/05_http_URL_Re_writ.png"
 data-srcset="http://img.testclass.net/05_http_URL_Re_writ.png, http://img.testclass.net/05_http_URL_Re_writ.png 1.5x, http://img.testclass.net/05_http_URL_Re_writ.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/05_http_URL_Re_writ.png"
 title="http://img.testclass.net/05_http_URL_Re_writ.png" />&lt;/p>
&lt;p>图1 测试树&lt;/p>
&lt;p>在 &lt;strong>图2&lt;/strong> 中，我们看到URL重写修改器的GUI界面，它有一个字段是供用户修改指定sessionID的。还有一个复选框，用于标记sessionID是地址的一部分（由“；”分隔），而不是作为请求参数。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/05_http_URL_Re_writ2.png"
 data-srcset="http://img.testclass.net/05_http_URL_Re_writ2.png, http://img.testclass.net/05_http_URL_Re_writ2.png 1.5x, http://img.testclass.net/05_http_URL_Re_writ2.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/05_http_URL_Re_writ2.png"
 title="http://img.testclass.net/05_http_URL_Re_writ2.png" />&lt;/p>
&lt;p>图2 请求参数&lt;/p>
&lt;h3 id="52-使用头文件管理器">5.2 使用头文件管理器&lt;/h3>
&lt;hr>
&lt;p>Jmeter的 &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Header_Manager" target="_blank" rel="noopener noreffer ">HTTP头文件管理器&lt;/a>，允许您自定义HTTP请求头文件，这个头文件包括“User-Agent&amp;quot;，&amp;ldquo;Pragma&amp;rdquo;, &amp;ldquo;Referer&amp;quot;等属性。&lt;/p>
&lt;p>HTTP 头文件管理器，和 &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Cookie_Manager" target="_blank" rel="noopener noreffer ">HTTP cookie 管理器&lt;/a>类似，应该在线程组级别添加，除非出于特殊原因，您希望在测试中给某几个 &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request" target="_blank" rel="noopener noreffer ">HTTP 请求&lt;/a> 设置不一样的头文件。&lt;/p></description></item><item><title>JMeter官方文档：6. 建立数据库测试计划</title><link>https://itest2025.pages.dev/tutorials/22-006-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A36-%E5%BB%BA%E7%AB%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 11:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-006-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A36-%E5%BB%BA%E7%AB%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-db-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="6-建立数据库测试计划building-a-database-test-plan">6. 建立数据库测试计划（Building a Database Test Plan）&lt;/h2>
&lt;hr>
&lt;p>在本节中，您将学习如何创建测试数据库服务器一个简单的&lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a>。您将创建五十个用户向数据库服务器发送2个SQL请求。并且，使这些用户运行测试100次。所以，请求的总数是（50个用户）x（2个请求）x（重复100次）= 10'000个JDBC请求。要构建测试计划，您将使用以下元素： &lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>， &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request" target="_blank" rel="noopener noreffer ">JDBC请求&lt;/a>，&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#Summary_Report" target="_blank" rel="noopener noreffer ">摘要报告&lt;/a>。&lt;/p>
&lt;font color=#930000>
此示例使用MySQL数据库驱动程序。要使用此驱动程序，它包含.jar文件（例如mysql-connector-java-XXX-bin.jar）
必须复制到JMeter __./lib__ 目录（有关详细信息，请参阅[JMeter的Classpath](http://jmeter.apache.org/usermanual/get-started.html#classpath)）。
&lt;/font>
&lt;h3 id="61添加用户adding-users">6.1添加用户（Adding Users）&lt;/h3>
&lt;hr>
&lt;p>您要对每个JMeter测试计划执行的第一步是添加一个&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>元件。线程组告诉JMeter您想要模拟的用户数量，用户应发送请求的频率以及应发送的请求数量。
继续添加线程组元件，首先选择测试计划，单击鼠标右键获取 &lt;strong>添加&lt;/strong> 菜单，然后选择 &lt;strong>添加&lt;/strong>  →  &lt;strong>线程组&lt;/strong>。&lt;/p>
&lt;p>您现在应该看到“测试计划”下的“线程组”元件。如果没有看到该元件，则通过单击“测试计划”元件,从而展开“线程组”元件。&lt;/p>
&lt;p>接下来，您需要修改默认属性。如果尚未选择它，请选择树中的线程组元件。您现在应该在JMeter窗口的右侧部分看到线程组控制面板（参见下面的图6.1）&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/06_thread_group.png"
 data-srcset="http://img.testclass.net/06_thread_group.png, http://img.testclass.net/06_thread_group.png 1.5x, http://img.testclass.net/06_thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/06_thread_group.png"
 title="http://img.testclass.net/06_thread_group.png" />&lt;/p>
&lt;p>图6.1 具有默认值的线程组&lt;/p>
&lt;p>首先为我们的线程组提供更具描述性的名称。在名称字段中，输入：JDBC users。&lt;/p>
&lt;blockquote>
&lt;p>您将需要有效的数据库，数据库表和对该表的用户级访问。在这里显示的例子中，
数据库是“guest_test”，表名是“vm_instance”。&lt;/p>&lt;/blockquote>
&lt;p>接下来，将用户数增加到50个。&lt;/p>
&lt;p>在下一个字段中，“Ramp-Up Period” 的值为10秒。此属性告诉JMeter启动每个用户需要多长时间。例如，如果您输入10秒的Ramp-Up Period时间，JMeter将在10秒之后完成所有用户的启动。所以，如果我们有50个用户和10秒的 Ramp-Up Period，则起始用户之间的延迟将是200毫秒（10秒/ 50个用户=每秒0.2个用户）。如果将值设置为0，那么JMeter将立即启动所有用户。&lt;/p>
&lt;p>最后，在循环计数字段中输入值100。此属性告诉JMeter重复测试多少次。要让JMeter循环运行测试计划，请选中“永远”复选框。&lt;/p>
&lt;blockquote>
&lt;p>在大多数应用程序中，您在控制面板中进行的更改必须点击确定按钮。但是，在JMeter中，控制面板会在您进行更改时自动保存您的更改。如果更改元素了名称，在离开控制面板后（例如，当选择另一个树形元件）时，系统将自动保存您的更改。&lt;/p>&lt;/blockquote>
&lt;p>有关完成的JDBC用户线程组，请参见图6.2。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/06_jdbc_users_group.png"
 data-srcset="http://img.testclass.net/06_jdbc_users_group.png, http://img.testclass.net/06_jdbc_users_group.png 1.5x, http://img.testclass.net/06_jdbc_users_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/06_jdbc_users_group.png"
 title="http://img.testclass.net/06_jdbc_users_group.png" />
图6.2 JDBC用户线程组&lt;/p></description></item><item><title>JMeter官方文档：7. 创建FTP测试计划</title><link>https://itest2025.pages.dev/tutorials/22-007-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A37-%E5%88%9B%E5%BB%BAftp%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 10:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-007-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A37-%E5%88%9B%E5%BB%BAftp%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-ftp-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="7创建ftp测试计划">7.创建FTP测试计划&lt;/h2>
&lt;hr>
&lt;p>在这一章，你将学习如何创建一个基础的&lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a>来测试FTP站点。你将在一个FTP站点上的两个文件中创建四个用户来发送请求。并且，你将告诉用户运行测试两次。所以，总的请求数是（4个用户）x（2个请求）x（重复2次）=16 FTP请求。&lt;/p>
&lt;p>为了构造测试计划，你需使用以下元件：&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>，&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#FTP_Request" target="_blank" rel="noopener noreffer ">FTP请求&lt;/a>，&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#FTP_Request_Defaults" target="_blank" rel="noopener noreffer ">FTP默认请求&lt;/a>和&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#View_Results_in_Table" target="_blank" rel="noopener noreffer ">用表格察看结果&lt;/a>。&lt;/p>
&lt;h3 id="71-添加用户">7.1 添加用户&lt;/h3>
&lt;hr>
&lt;p>你要进行每一个JMeter测试计划的第一步是添加一个线程组元件。线程组告诉JMeter你想要模拟的用户数量，用户应该发送请求的频率，以及他们应该发送多少个请求。
继续添加线程组元件，首先选择测试计划，点击鼠标右键添加菜单，然后选择 &lt;strong>添加→线程组&lt;/strong>。&lt;/p>
&lt;p>现在你应该看到 &lt;strong>测试计划&lt;/strong> 下的 &lt;strong>线程组&lt;/strong> 元件。如果没有看到元件，单击测试计划元件“展开”测试计划树。&lt;/p>
&lt;p>接下来，你需要修改默认配置。如果你还没有选择 &lt;strong>线程组&lt;/strong> 元件，在测试计划树里选择它。现在你应该在JMeter窗口右侧看到线程组控制面板(请参见下面的图7.1)&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/thread_group.png"
 data-srcset="http://img.testclass.net/thread_group.png, http://img.testclass.net/thread_group.png 1.5x, http://img.testclass.net/thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/thread_group.png"
 title="http://img.testclass.net/thread_group.png" />&lt;/p>
&lt;p>图7.1 默认值的线程组&lt;/p>
&lt;p>首先为我们的线程组取一个更具描述性的名称。在名称文本域中，输入“FTP用户”。&lt;/p>
&lt;p>接下来将用户数（线程数）增加到4。&lt;/p>
&lt;p>在下一个文本域中，Ramp-Up Period（in seconds），使用默认值0秒。这个属性告诉JMeter在启动每个用户之间的时间间隔。例如，如果你在Ramp-Up Period（in seconds）中输入5秒，JMeter将在5秒内完成所有用户的启动。因此，如果我们有5个用户和一个5秒的Ramp-Up Period，那么启动用户之间的时间间隔将是1秒(5个用户/ 5秒= 1个用户每秒)。如果将值设置为0，则JMeter将立即启动所有用户。&lt;/p>
&lt;p>最后，在循环次数中输入值2。这个属性告诉JMeter重复测试的次数。要让JMeter重复一直运行你的测试计划，勾选永远的复选框。&lt;/p>
&lt;blockquote>
&lt;p>在大多数应用中你必须手动的保存你在控制面板中的改动。但是在JMeter中，控制面板能自动的保存你做的改动。比如你修改了一个元件的名称，在你离开控制面板后测试计划树会以新的文本来更新（比如选择另一个树元件时）。&lt;/p>&lt;/blockquote>
&lt;p>看下图7.2 中完整的FTP Users线程组。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/07_FTP_users_thread_group.png"
 data-srcset="http://img.testclass.net/07_FTP_users_thread_group.png, http://img.testclass.net/07_FTP_users_thread_group.png 1.5x, http://img.testclass.net/07_FTP_users_thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/07_FTP_users_thread_group.png"
 title="http://img.testclass.net/07_FTP_users_thread_group.png" />&lt;/p>
&lt;p>图7.2 FTP Users线程组&lt;/p>
&lt;h3 id="72-添加默认ftp请求配置">7.2 添加默认FTP请求配置&lt;/h3>
&lt;hr>
&lt;p>既然我们已经定义了我们的用户，那么是时候定义他们要执行的任务了。在本节中，你将为你的FTP请求指定默认设置。然后，在7.3节中，使用你在这里指定的一些默认设置中添加 &lt;strong>FTP请求&lt;/strong> 元件。&lt;/p></description></item><item><title>JMeter官方文档：9. 构建 WebService 测试计划</title><link>https://itest2025.pages.dev/tutorials/22-009-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A39-%E6%9E%84%E5%BB%BA-webservice-%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 09:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-009-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A39-%E6%9E%84%E5%BB%BA-webservice-%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-ws-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h3 id="9-构建-webservice-测试计划">9. 构建 WebService 测试计划&lt;/h3>
&lt;hr>
&lt;p>在本章节，你将学习如何创建一个 &lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a> 去测试 WebService。先创建5个用户请求同一个页面，同时每个请求重复2次，因此总数为（5个用户）X（1次请求）X（重复请求）= 10 次 HTTP 请求。构建测试计划过程中，会使用到以下几个元素：&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>、&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#HTTP_Request" target="_blank" rel="noopener noreffer ">HTTP 请求&lt;/a>、&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#Aggregate_Graph" target="_blank" rel="noopener noreffer ">聚合报告&lt;/a>&lt;/p>
&lt;p>如果采样器使用Web服务时出现错误，请仔细检查 SOAP 消息，并确保格式正确。 特别要确保 &lt;strong>xmlns&lt;/strong> 属性与WSDL完全相同。 如果xml命名空间不同，则 webservice 可能会返回错误。&lt;/p>
&lt;h3 id="91-构建-webservice-测试计划">9.1 构建 WebService 测试计划&lt;/h3>
&lt;hr>
&lt;p>在测试计划中，将会用到 .NET 语言写的web服务，在此就不详细介绍web 服务的编写方法了。如果不会，请自行谷歌 web 服务并尝试用 java 或 .NET熟练起来。必须强调的是，使用 .NET 和 Java 实现 web 服务是有较大差别。该主题太广泛无法写到用户手册里，所以想了解具体差异可参考其他资料。&lt;/p>
&lt;blockquote>
&lt;p>Jmeter是按照树状的排列方式去发送请求的&lt;/p>&lt;/blockquote>
&lt;p>找到菜单中的 &lt;strong>文件 → Templates&lt;/strong> , Select Template 中的 &lt;strong>“Building a SOAP Webservice Test Plan”&lt;/strong>，点击 &lt;strong>“Creat”&lt;/strong> 按钮。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/09_ws_template.png"
 data-srcset="http://img.testclass.net/09_ws_template.png, http://img.testclass.net/09_ws_template.png 1.5x, http://img.testclass.net/09_ws_template.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/09_ws_template.png"
 title="图9.1.0 WebService 模版" />
图9.1.0 WebService 模版&lt;/p></description></item><item><title>JMeter官方文档：10. 创建一个点对点的 JMS 测试计划</title><link>https://itest2025.pages.dev/tutorials/22-010-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A310-%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%82%B9%E5%AF%B9%E7%82%B9%E7%9A%84-jms-%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 08:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-010-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A310-%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%82%B9%E5%AF%B9%E7%82%B9%E7%9A%84-jms-%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-jms-point-to-point-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="10创建一个点对点的-jms-测试计划">10.创建一个点对点的 JMS 测试计划&lt;/h2>
&lt;hr>
&lt;blockquote>
&lt;p>确保所需的jar文件位于JMeter lib目录中。 如果没有，关闭JMeter，复制jar文件并重新启动JMeter。 &lt;a href="http://jmeter.apache.org/usermanual/get-started.html#libraries_activemq" target="_blank" rel="noopener noreffer ">参见详细教程&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>在本节中，将学习如何创建&lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a>来测试JMS点对点消息传递。 先设置1个线程组5个线程发送4个请求，通过队列的形式发送。 固定的回复队列将用于监听回复消息。 要构建测试计划，您将使用以下元素：&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>，&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#JMS_Point-to-Point" target="_blank" rel="noopener noreffer ">JMS点对点&lt;/a>和&lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#Graph_Results" target="_blank" rel="noopener noreffer ">图形结果&lt;/a>。&lt;/p>
&lt;p>关于 JMS 的一般注意事项：目前有两个JMS采样器。 一个是使用 JMS Topic，另一个时使用 Queue。 Topic 通常被称为pub/sub消息。 Topic 消息通常用于生产者发布消息并由多个订阅者接收的情况。 JMS 采样器需要 JMS 实现 jar 文件，比如 Apache ActiveMQ 包。 &lt;a href="http://jmeter.apache.org/usermanual/get-started.html#libraries_activemq" target="_blank" rel="noopener noreffer ">参见这里&lt;/a>的 ActiveMQ 提供的 jar 的列表。&lt;/p>
&lt;h3 id="101-增加一个线程组">10.1 增加一个线程组&lt;/h3>
&lt;hr>
&lt;p>首先，对每个要执行的 JMeter 测试计划添加一个线程组。 线程组会告诉 JMeter 需要模拟的用户数量，发送请求的频率以及发送请求的数量。&lt;/p>
&lt;p>然后，添加 ThreadGroup 元素，首先选择测试计划，单击鼠标右键获取添加菜单，然后选择添加→线程组。&lt;/p>
&lt;p>接下来，需要修改默认属性。 现在可以在 JMeter 窗口的右侧部分看到线程组控制面板（参见下面的图10.1）&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/thread_group.png"
 data-srcset="http://img.testclass.net/thread_group.png, http://img.testclass.net/thread_group.png 1.5x, http://img.testclass.net/thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/thread_group.png"
 title="image" />&lt;/p></description></item><item><title>JMeter官方文档：11. 新建一个 JMS 主题的测试计划</title><link>https://itest2025.pages.dev/tutorials/22-011-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A311-%E6%96%B0%E5%BB%BA%E4%B8%80%E4%B8%AA-jms-%E4%B8%BB%E9%A2%98%E7%9A%84%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</link><pubDate>Thu, 24 Aug 2017 08:55:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-011-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A311-%E6%96%B0%E5%BB%BA%E4%B8%80%E4%B8%AA-jms-%E4%B8%BB%E9%A2%98%E7%9A%84%E6%B5%8B%E8%AF%95%E8%AE%A1%E5%88%92/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/build-jms-topic-test-plan.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="11新建一个-jms-主题的测试计划">11.新建一个 JMS 主题的测试计划&lt;/h2>
&lt;hr>
&lt;blockquote>
&lt;p>JMS 需要下载一些可选的jar 文件。详细信息请参阅 第一章：新手入门。&lt;/p>&lt;/blockquote>
&lt;p>在本章节，将学习如何创建&lt;a href="http://jmeter.apache.org/usermanual/build-test-plan.html" target="_blank" rel="noopener noreffer ">测试计划&lt;/a>来测试JMS提供程序。创建5个订阅者和1个发布者。创建2个线程组并且设置每个线程组迭代10次。消息总数是（6个线程）x （1 个消息）x（重复10次）= 60 个消息。为了构建测试计划将使用以下元素：&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a> , &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#JMS_Publisher" target="_blank" rel="noopener noreffer ">JMS 发布者&lt;/a>， &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#JMS_Publisher" target="_blank" rel="noopener noreffer ">JMS 订阅者&lt;/a>， 和 &lt;a href="http://jmeter.apache.org/usermanual/component_reference.html#Graph_Results" target="_blank" rel="noopener noreffer ">图结果&lt;/a>。&lt;/p>
&lt;p>关于JMS的一般注意事项：目前有两种 JMS 采样器(samplers)。一种使用 JMS 主题(topics)，另一种使用队列(queues)。主题消息通常被称为发布/订阅消息。主题消息传递通常用于消息由生产者发布并由多个订阅者消费的情况。队列消息传递通常用于发件人期望响应的事务。消息系统与普通的HTTP请求完全不同。在HTTP中，一个用户发送一个请求并得到一个响应。消息系统可以通过同步和异步模式工作。JMS采样器需要JMS实现的jar文件（由于JMeter不提供JMS实现的jar，需要下载后放置lib库）; 例如，来自Apache ActiveMQ。请参阅&lt;a href="http://jmeter.apache.org/usermanual/get-started.html#libraries_activemq" target="_blank" rel="noopener noreffer ">这里&lt;/a> 查看 ActiveMQ 提供的 jar 列表。&lt;/p>
&lt;h3 id="111添加用户">11.1添加用户&lt;/h3>
&lt;hr>
&lt;p>第一步是添加一个&lt;a href="http://jmeter.apache.org/usermanual/test_plan.html#thread_group" target="_blank" rel="noopener noreffer ">线程组&lt;/a>元素。线程组告诉JMeter想要模拟的用户数量，发送请求的频率以及发送请求的数量。&lt;/p>
&lt;p>添加线程组元素，首先选择测试计划，单击鼠标右键获取添加菜单，然后选择 &lt;strong>添加 → 线程组&lt;/strong>。此时可以在测试计划下面看到线程组元素，如果不能，可以通过在测试计划元素上单击“展开”测试计划树。&lt;/p>
&lt;p>接下来，你需要修改默认属性。如果尚未选择树中的线程组元素，请先选择。此时可以看到JMeter窗口右侧的线程组控制面板（请参见下面的图11.1）&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/thread_group.png"
 data-srcset="http://img.testclass.net/thread_group.png, http://img.testclass.net/thread_group.png 1.5x, http://img.testclass.net/thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/thread_group.png"
 title="http://img.testclass.net/thread_group.png" />
图11.1. 线程组默认设置&lt;/p>
&lt;p>首先为我们的线程组提供一个更具描述性的名称。在名称字段输入: &lt;strong>Subscribers&lt;/strong> 。&lt;/p>
&lt;p>接下来，将用户（称为线程）的数量增加到 &lt;strong>5&lt;/strong>。&lt;/p>
&lt;p>在下一个字段 Ramp-Up Period 中，将该值设置为 &lt;strong>0&lt;/strong> 秒。这个属性告诉JMeter启动每个用户之间要延迟多久。例如，如果输入一个5秒的渐变周期，JMeter将在5秒钟内完成所有用户的启动。所以，如果我们有5个用户和一个5秒钟的Ramp-Up Period值，那么用户启动之间的延迟将是1秒（5个用户/ 5秒= 1个用户每秒）。如果将该值设置为0，则JMeter将立即启动所有用户。&lt;/p></description></item><item><title>JMeter官方文档：20. 函数</title><link>https://itest2025.pages.dev/tutorials/22-020-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A320-%E5%87%BD%E6%95%B0/</link><pubDate>Thu, 24 Aug 2017 06:05:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-020-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A320-%E5%87%BD%E6%95%B0/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/functions.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h3 id="20-函数和变量">20. 函数和变量&lt;/h3>
&lt;hr>
&lt;p>JMeter 的函数是一些特殊值，它们可以填充在测试树的任何采样器或其他元件中。函数调用的语法如下：&lt;/p>
&lt;p>&lt;code>${__functionName(var1,var2,var3)}&lt;/code>&lt;/p>
&lt;p>其中“__functionName” 匹配函数的名称。&lt;br>
圆括号内为函数参数，不同函数的参数也不同，例如 &lt;code>${__time(YMD)}&lt;/code>。没有参数的函数可以不需要圆括号，例如 &lt;code>${__threadNum}&lt;/code>。&lt;/p>
&lt;p>如果函数的参数包含逗号，需要加上“&lt;code>\&lt;/code>”来转义，否则 JMeter 会把逗号当做参数的分隔符。例如：&lt;/p>
&lt;pre tabindex="0">&lt;code>${__time(EEE\, d MMM yyyy)}
&lt;/code>&lt;/pre>&lt;p>如果逗号没有被转义——例如 &lt;code>${__javaScript(Math.max(2,5))}&lt;/code> ——你会得到像这样的错误信息：&lt;/p>
&lt;pre>&lt;code>ERROR - jmeter.functions.JavaScript: Error processing Javascript: [Math.max(2]
org.mozilla.javascript.EvaluatorException: missing ) after argument list (&amp;lt;cmd&amp;gt;#1)
&lt;/code>&lt;/pre>
&lt;p>这是因为字符串“&lt;code>Math.max(2,5)&lt;/code>”被当做&lt;code>__javascript&lt;/code> 函数的两个参数：&lt;br>
&lt;code>Math.max(2&lt;/code> 和 &lt;code>5)&lt;/code>&lt;br>
其他错误信息也是有可能的。&lt;/p>
&lt;p>变量的引用如下：&lt;/p>
&lt;pre>&lt;code>${VARIABLE}
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>如果引用了未定义的变量或函数，那么 JMeter 并不会报告或者记录错误信息——引用返回值就是引用自身。例如，如果 &lt;code>UNDEF&lt;/code> 没有被定义为变量，&lt;code>${UNDEF}&lt;/code> 的返回值就是 &lt;code>${UNDEF}&lt;/code>。&lt;/strong> 变量和函数（包括属性）都是区分大小写的。&lt;strong>JMeter 会剔除变量名称中的空格，例如 &lt;code>${__Random(1,63, LOTTERY )}&lt;/code> 中的变量‘　&lt;code>LOTTERY &lt;/code>　’会被‘&lt;code>LOTTERY&lt;/code>’取代。&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>属性与变量不一样。变量对线程而言是局部的；属性是针对所有线程的，属性需要使用 &lt;code>__P&lt;/code> 或 &lt;code>__property&lt;/code> 函数来引用。&lt;/p>&lt;/blockquote>
&lt;blockquote>
&lt;p>在 Windows 路径变量（例如 &lt;code>C:\test\${test}&lt;/code>）前使用 &lt;code>\&lt;/code> 时，要确保加上 &lt;code>\&lt;/code> 来转义，否则 JMeter 将不能解释变量，所以要这样写：&lt;code>C:\\test\\${test}&lt;/code>。&lt;br>
还有一种方法，就是使用 &lt;code>/&lt;/code> 作为路径分隔符，例如 &lt;code>C:/test/${test}&lt;/code>——Windows 的 Java 虚拟机在必要时会将它转换成路径分隔符。&lt;/p></description></item><item><title>JMeter官方文档：21. 正则表达式</title><link>https://itest2025.pages.dev/tutorials/22-021-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A321-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/</link><pubDate>Thu, 24 Aug 2017 05:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-021-jmeter%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A321-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/</guid><description>&lt;p>&lt;a href="https://itest2025.pages.dev/2017/08/24/jmeter-translation-plans/" rel="">《JMeter官方文档&amp;ndash;翻译计划》&lt;/a> &lt;a href="http://jmeter.apache.org/usermanual/regular_expressions.html" target="_blank" rel="noopener noreffer ">原文地址&lt;/a>&lt;/p>
&lt;h2 id="21-正则表达式">21. 正则表达式&lt;/h2>
&lt;hr>
&lt;h3 id="211-概述">21.1 概述&lt;/h3>
&lt;hr>
&lt;p>JMeter 包含模式匹配软件 &lt;a href="http://attic.apache.org/projects/jakarta-oro.html" target="_blank" rel="noopener noreffer ">Apache Jakarta ORO&lt;/a> 。&lt;br>
在 Jakarta 网上有一些关于它的文档，例如：&lt;a href="http://archimedes.fas.harvard.edu/scrapbook/jakarta-oro-2.0.6/docs/api/org/apache/oro/text/regex/package-summary.html" target="_blank" rel="noopener noreffer ">模式匹配字符摘要&lt;/a>。&lt;/p>
&lt;p>在 &lt;a href="http://www.savarese.org/oro/docs/OROMatcher/index.html" target="_blank" rel="noopener noreffer ">OROMatcher 用户指南&lt;/a>上还有一个关于该产品旧版本的文档 ，也许会有些用处。&lt;/p>
&lt;p>模式匹配与 Perl 中的模式匹配非常类似。Perl 的完整安装会包含大量关于正则表达式的文档——查找 &lt;strong>perlrequick&lt;/strong>， &lt;strong>perlretut&lt;/strong>， &lt;strong>perlre&lt;/strong> 和 &lt;strong>perlreref&lt;/strong>。&lt;/p>
&lt;p>有必要强调“包含（contains）”和“匹配（matches）”之间的区别，它们被用在响应断言测试原件上：&lt;/p>
&lt;p>&amp;ldquo;&lt;em>包含（contains）&lt;/em>&amp;rdquo; 意味着正则表达式至少与目标的某个部分相匹配，所以 &amp;lsquo;&lt;strong>alphabet&lt;/strong>&amp;rsquo; “包含” &amp;lsquo;&lt;strong>ph.b.&lt;/strong>&amp;rsquo;，因为正则表达式匹配子字符串 &amp;lsquo;&lt;strong>phabe&lt;/strong>&amp;rsquo;。&lt;/p>
&lt;p>&amp;ldquo;&lt;em>匹配（matches）&lt;/em>&amp;rdquo; 意味着正则表达式匹配整个目标。所以 &amp;lsquo;&lt;strong>alphabet&lt;/strong>&amp;rsquo; 和 &amp;lsquo;&lt;strong>al.*t&lt;/strong>&amp;rsquo; 是“匹配”的 。&lt;br>
这种情况下，它相当于将正则表达式封装在 &lt;strong>^&lt;/strong> 和 &lt;strong>$&lt;/strong> 中，即 &amp;lsquo;&lt;strong>^al.*t$&lt;/strong>&amp;rsquo;。&lt;/p>
&lt;p>然而，情况并非总是如此。例如，正则表达式 &amp;lsquo;&lt;strong>alp|.lp.*&lt;/strong>&amp;rsquo; “包含”于 &amp;lsquo;&lt;strong>alphabet&lt;/strong>&amp;rsquo;，但并不“匹配” &amp;lsquo;&lt;strong>alphabet&lt;/strong>&amp;rsquo;。&lt;/p>
&lt;p>这是为什么？原因是当模式匹配器在 &amp;lsquo;&lt;strong>alphabet&lt;/strong>&amp;rsquo; 中找到序列 &amp;lsquo;&lt;strong>alp&lt;/strong>&amp;rsquo; 时，它将停止尝试其他组合——而 &amp;lsquo;&lt;strong>alp&lt;/strong>&amp;rsquo; 与 &amp;lsquo;&lt;strong>alphabet&lt;/strong>&amp;rsquo; 不同，它不包含 &amp;lsquo;&lt;strong>habet&lt;/strong>&amp;rsquo;。&lt;/p>
&lt;blockquote>
&lt;p>不同于 Perl，没有必要将正则表达式用 // 封装。&lt;/p></description></item><item><title>（一）JMeter介绍与安装</title><link>https://itest2025.pages.dev/tutorials/22-051-%E4%B8%80jmeter%E4%BB%8B%E7%BB%8D%E4%B8%8E%E5%AE%89%E8%A3%85/</link><pubDate>Sun, 30 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-051-%E4%B8%80jmeter%E4%BB%8B%E7%BB%8D%E4%B8%8E%E5%AE%89%E8%A3%85/</guid><description>&lt;br>
#### Jmeter介绍
----
Apache JMeter™应用开源软件，100%纯Java应用程序,设计用于负载功能测试和性能测试。它最初是为测试Web应用程序而设计的，但后来扩展到其他测试函数中。
&lt;p>Apache JMeter 功能包括:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>能够加载和测试许多不同的应用程序/服务器/协议类型：&lt;/p>
&lt;ul>
&lt;li>Web的HTTP，HTTPS（java，Nodejs，PHP，ASP.NET，…）&lt;/li>
&lt;li>SOAP / REST Webservices&lt;/li>
&lt;li>FTP 文件传输协议&lt;/li>
&lt;li>Database via JDBC&lt;/li>
&lt;li>LDAP&lt;/li>
&lt;li>Message-oriented middleware (MOM) via JMS&lt;/li>
&lt;li>邮件传输协议 - SMTP(S), POP3(S) 和 IMAP(S)&lt;/li>
&lt;li>本地命令或Shell 脚本&lt;/li>
&lt;li>TCP&lt;/li>
&lt;li>Java Objects&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>全功能测试IDE，允许快速记录测试计划（来自浏览器或本地应用程序），构建和
调试。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>基于Java开发，支持Linux、Windows、MAC OSX等平台。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>可以生成完整的动态HTML报告。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>通过从最流行的响应格式、HTML、JSON、XML或任何文本格式提取数据的能力，可以轻松地进行相关性。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>全多线程框架允许多线程并发采样，同时通过不同的线程组进行不同功能的同时采样。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>缓存和离线分析/重放测试结果。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>高度可扩展内核。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;br>
#### Jmeter安装
----
前面已经介绍了Jmeter是基于Java开发的，它的运行同样依赖于Java环境。
&lt;p>1、首先，&lt;a href="https://itest2025.pages.dev/selenium_java/install-java/" rel="">安装Java&lt;/a>。&lt;/p>
&lt;p>2、然后，&lt;a href="http://jmeter.apache.org/download_jmeter.cgi" target="_blank" rel="noopener noreffer ">下载Jmeter&lt;/a>。&lt;/p>
&lt;p>3、解压下载的__apache-jmeter-3.2.zip__包.&lt;/p>
&lt;p>4、进入&amp;hellip;\apache-jmeter-3.2\bin\解压目录，双击__ApacheJMeter.jar__启动（注：一定要配置Java环境）。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://oriphg3yh.bkt.clouddn.com/jmeter_main.png"
 data-srcset="http://oriphg3yh.bkt.clouddn.com/jmeter_main.png, http://oriphg3yh.bkt.clouddn.com/jmeter_main.png 1.5x, http://oriphg3yh.bkt.clouddn.com/jmeter_main.png 2x"
 data-sizes="auto"
 alt="http://oriphg3yh.bkt.clouddn.com/jmeter_main.png"
 title="http://oriphg3yh.bkt.clouddn.com/jmeter_main.png" />
如果可以看到上图，说明你的Jmeter已经安装好了。&lt;/p>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1616610865799-a65c191d5355?w=300"
 data-srcset="https://images.unsplash.com/photo-1616610865799-a65c191d5355?w=300, https://images.unsplash.com/photo-1616610865799-a65c191d5355?w=300 1.5x, https://images.unsplash.com/photo-1616610865799-a65c191d5355?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1616610865799-a65c191d5355?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>（二）JMeter插件管理</title><link>https://itest2025.pages.dev/tutorials/22-052-%E4%BA%8Cjmeter%E6%8F%92%E4%BB%B6%E7%AE%A1%E7%90%86/</link><pubDate>Sat, 29 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-052-%E4%BA%8Cjmeter%E6%8F%92%E4%BB%B6%E7%AE%A1%E7%90%86/</guid><description>&lt;br>
#### Jmeter插件管理
----
JMeter 插件管理器的使用方法很简单：不要手动安装各种插件，它提供了友好的用户界面来完成：安装、升级、卸载。
&lt;p>它管理插件包括 &lt;a href="https://www.jmeter-plugins.org/" target="_blank" rel="noopener noreffer ">jmeter-plugins.org&lt;/a> 上面常用的插件，和各种第三方插件甚至核心JMeter插件。&lt;/p>
&lt;br>
#### 安装插件管理：
----
1、下载 [plugins-manager.jar](http://www.jmeter-plugins.org/get/)
&lt;p>2、将 &lt;strong>plugins-manager.jar&lt;/strong> 放到 _&lt;em>&amp;hellip;\apache-jmeter-3.2\lib\ext_&lt;/em> 目录下。&lt;/p>
&lt;p>3、双击 &lt;strong>ApacheJMeter.jar&lt;/strong> 启动Jmeter。&lt;/p>
&lt;p>4、菜单栏“选项”会多出一个“Plugins Manager”的选项。
&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/plugins_manager_01.png"
 data-srcset="http://img.testclass.net/plugins_manager_01.png, http://img.testclass.net/plugins_manager_01.png 1.5x, http://img.testclass.net/plugins_manager_01.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/plugins_manager_01.png"
 title="http://img.testclass.net/plugins_manager_01.png" />&lt;/p>
&lt;p>点击 “Plugins Manager” 选项打开 Jmeter 插件管理
&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/plugins_manager_02.png"
 data-srcset="http://img.testclass.net/plugins_manager_02.png, http://img.testclass.net/plugins_manager_02.png 1.5x, http://img.testclass.net/plugins_manager_02.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/plugins_manager_02.png"
 title="http://img.testclass.net/plugins_manager_02.png" />&lt;/p>
&lt;p>插件管理窗口分三个标签页：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;code>Installed Plugins&lt;/code>：显示已安装的插件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Available Plugins&lt;/code>: 显示可安装的插件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;code>Upgrades&lt;/code>: 显示可以升级的插件。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>通过__勾选/取消勾选__插件，并点击右下角 &amp;ldquo;Apply Changes and Restart JMeter&amp;rdquo; 按钮来__卸载、安装、升级__插件。&lt;/p>
&lt;p>原始封面&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="https://images.unsplash.com/photo-1482406611936-43ea538e39d4?w=300"
 data-srcset="https://images.unsplash.com/photo-1482406611936-43ea538e39d4?w=300, https://images.unsplash.com/photo-1482406611936-43ea538e39d4?w=300 1.5x, https://images.unsplash.com/photo-1482406611936-43ea538e39d4?w=300 2x"
 data-sizes="auto"
 alt="https://images.unsplash.com/photo-1482406611936-43ea538e39d4?w=300"
 title="课程图片" />&lt;/p></description></item><item><title>（三）JMeter录制与回放</title><link>https://itest2025.pages.dev/tutorials/22-053-%E4%B8%89jmeter%E5%BD%95%E5%88%B6%E4%B8%8E%E5%9B%9E%E6%94%BE/</link><pubDate>Fri, 28 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-053-%E4%B8%89jmeter%E5%BD%95%E5%88%B6%E4%B8%8E%E5%9B%9E%E6%94%BE/</guid><description>&lt;br>
### 关于录制和回放功能
&lt;p>在JMeter2.1版本之前，JMeter应该是不支持录制和回放功能的，那时候如果需要录制jmeter的性能测试脚本的话，就需要使用第三方工具——&lt;a href="http://www.badboysoftware.biz/docs/jmeter.htm" target="_blank" rel="noopener noreffer ">badboy&lt;/a>。&lt;/p>
&lt;p>现在jmeter已经支持脚本的录制功能了，但录制的体验相对于badboy来说还是差了一些。不过聊胜于无，对于性能测试的入门者来说，录制回放功能可以让大家对性能测试脚本开发的过程有个非常感性的认识。&lt;/p>
&lt;p>不过录制脚本始终只是减轻工作量的一个手段，新手同学千万不要认为学会了录制回放就等于是学会了性能测试，学会录制回放只能代表你有机会真正的入门性能测试，这只是起点，而不是终点。&lt;/p>
&lt;h3 id="测试场景">测试场景&lt;/h3>
&lt;p>在本节中，我们的测试场景是：在必应(bing)搜索引擎中搜索关键字&lt;code>乙醇 selenium&lt;/code>。我们对搜索的结果并不关心，只要请求返回的状态码是200，我们就认为该请求是成功的，有效的。&lt;/p>
&lt;h3 id="准备录制">准备录制&lt;/h3>
&lt;ul>
&lt;li>打开jmeter&lt;/li>
&lt;li>工具栏点击&lt;strong>Templates&amp;hellip;&lt;/strong> ，选择&lt;strong>Recording&lt;/strong>模版&lt;/li>
&lt;li>点击WorkBench节点下的&lt;strong>HTTP(S) Test Script Recorder&lt;/strong>&lt;/li>
&lt;li>点击&lt;strong>启动&lt;/strong>按钮，如下图所示&lt;/li>
&lt;/ul>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/recorder.png"
 data-srcset="http://img.testclass.net/recorder.png, http://img.testclass.net/recorder.png 1.5x, http://img.testclass.net/recorder.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/recorder.png"
 title="recorder" />&lt;/p>
&lt;p>&lt;strong>此时应该会出现下图所示的警告对话框，我们可以简单的忽略掉，此警告不影响我们本节内容的准确性&lt;/strong>&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/warning.png"
 data-srcset="http://img.testclass.net/warning.png, http://img.testclass.net/warning.png 1.5x, http://img.testclass.net/warning.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/warning.png"
 title="warning" />&lt;/p>
&lt;p>完成了以上的步骤之后，我们就成功的启动了jmeter的http代理，下面我们需要对配置系统，使得系统的http请求都通过jmeter代理发出。&lt;/p>
&lt;p>&lt;em>注意：如果启动代理的过程中遇到了一些意外情况，请参考&lt;a href="https://wiki.apache.org/jmeter/TestRecording210" target="_blank" rel="noopener noreffer ">这里&lt;/a>解决&lt;/em>&lt;/p>
&lt;br>
### 配置HTTP代理
----
#### Mac OS 系统
&lt;ul>
&lt;li>
&lt;p>系统偏好设置 -&amp;gt; 网络 -&amp;gt; 代理 -&amp;gt; Web代理(HTTP)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>web代理服务器填写&lt;code>localhost&lt;/code>，端口填写&lt;code>8888&lt;/code>，如下图所示&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/mac_http_proxy.png"
 data-srcset="http://img.testclass.net/mac_http_proxy.png, http://img.testclass.net/mac_http_proxy.png 1.5x, http://img.testclass.net/mac_http_proxy.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/mac_http_proxy.png"
 title="mac http proxy" />&lt;/p>
&lt;ul>
&lt;li>保存配置&lt;/li>
&lt;/ul>
&lt;h4 id="windows-系统">Windows 系统&lt;/h4>
&lt;p>Windows 10&lt;/p></description></item><item><title>（四）创建一个简单的性能测试</title><link>https://itest2025.pages.dev/tutorials/22-054-%E5%9B%9B%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/</link><pubDate>Mon, 24 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-054-%E5%9B%9B%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/</guid><description>&lt;br>
请先参考[Jmeter介绍与安装](/jmeter/install-jmeter/) ，启动Jmeter。
&lt;ul>
&lt;li>建立测试计划
启动jmeter后，jmeter会自动生成一个空的测试计划，用户可以基于该测试计划建立自己的测试计划。&lt;/li>
&lt;/ul>
&lt;br>
#### 添加线程组
----
一个性能测试请求负载是基于一个线程组完成的。一个测试计划必须有一个线程组。测试计划添加线程组非常简单。在测试计划右键弹出下拉菜单（添加-->Threads(Users)--->线程组）中选择线程组即可。
&lt;p>jmeter中 每个测试计划至少需要包含一个线程组，当然也可以在一个计划中创建多个线程组，那么多个线程组之间又会怎样的顺序执行（串行还是并行）？在测试计划下面多个线程是并行执行的，也就是说这些线程组是同时被初始化并同时执行线程组下的Sampler的。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/add_thread.png"
 data-srcset="http://img.testclass.net/add_thread.png, http://img.testclass.net/add_thread.png 1.5x, http://img.testclass.net/add_thread.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/add_thread.png"
 title="http://img.testclass.net/add_thread.png" />&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/thread_group.png"
 data-srcset="http://img.testclass.net/thread_group.png, http://img.testclass.net/thread_group.png 1.5x, http://img.testclass.net/thread_group.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/thread_group.png"
 title="http://img.testclass.net/thread_group.png" />&lt;/p>
&lt;p>线程组主要包含三个参数：线程数、准备时长（Ramp-Up Period(in seconds)）、循环次数。&lt;/p>
&lt;p>&lt;strong>线程数：&lt;/strong> 虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。&lt;/p>
&lt;p>&lt;strong>准备时长：&lt;/strong> 设置的虚拟用户数需要多长时间全部启动。如果线程数为20 ，准备时长为10 ，那么需要10秒钟启动20个线程。也就是每秒钟启动2个线程。&lt;/p>
&lt;p>&lt;strong>循环次数:&lt;/strong> 每个线程发送请求的次数。如果线程数为20 ，循环次数为100 ，那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”，那么所有线程会一直发送请求，直到选择停止运行脚本。&lt;/p>
&lt;p>设置合理的线程数对于能否达到测试目标有决定性的影响。除了上面介绍的固定循环次数与永远外；也可以灵活的选择设定测试运行时间。勾选“调度器”，进行调度器配置。&lt;/p>
&lt;ul>
&lt;li>设置：线程数为10，其它参数默认。&lt;/li>
&lt;/ul>
&lt;br>
#### 添加HTTP请求
----
添加完成线程组后，在线程组上右键菜单（添加--->Sampler--->HTTP请求）选择HTTP请求。对于jmeter来说，取样器（Sampler）是与服务器进行交互的单元。一个取样器通常进行三部分的工作：
```
1、向服务器发送请求
&lt;p>2、记录服务器的响应数据&lt;/p>
&lt;p>3、记录响应时间信息&lt;/p>
&lt;pre tabindex="0">&lt;code>
![](http://img.testclass.net/add_http.png)

![](http://img.testclass.net/http_request.png)

一个HTTP请求有着许多的配置参数，下面将详细介绍：

__名称：__ 本属性用于标识一个取样器，建议使用一个有意义的名称。

__注释：__ 对于测试没有任何作用，仅用户记录用户可读的注释信息。

__服务器名称或IP ：__ HTTP请求发送的目标服务器名称或IP地址。

__端口号：__ 目标服务器的端口号，默认值为80 。

__协议：__ 向目标服务器发送HTTP请求时的协议，可以是http或者是https ，默认值为http 。

__方法：__ 发送HTTP请求的方法，可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。

__Content encoding ：__ 内容的编码方式，默认值为iso8859

__路径：__ 目标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方法发送，默认不选中。

* 在这里我们添加一个HTTP请求: http://www.testclass.net

&amp;lt;br&amp;gt;
#### 添加监听器（Listener）
----

脚本的主要部分设置完成后，需要通过某种方式获得性能测试中的测试结果，在本例中，我们关心的是请求的响应时间。

Jmeter 中使用监听器元件收集取样器记录的数据并以可视化的方式来呈现。Jmeter有各种不同的监听器类型，因为上面添加的为HTTP请求，这里添加聚合报告，更为直观的查看测试结果。

添加聚合报告，右键点击线程组，在弹的菜单（添加---&amp;gt;监听器---&amp;gt;聚合报告）中选择聚合报告。

![](http://img.testclass.net/add_report.png)

点击工具栏上的 ```绿色运行按钮``` 或者通过菜单栏（运行---&amp;gt;启动）来运行测试。

查看 __&amp;#34;聚合报告&amp;#34;__ 的运行结果：

![](http://img.testclass.net/test_report.png)

__Label：__ 请求的名称，就是我们在进行测试的httprequest sampler的名称

__Samples：__ 总共发给服务器的请求数量

__Average：__ 单个请求的平均响应时间，单位是毫秒

__Median：__ 50%的请求的响应时间

__90%Line：__ 90%的请求的响应时间

__95%Line：__ 95%的请求的响应时间

__99%Line：__ 99%的请求的响应时间

__Min：__ 最小的响应时间

__Max：__ 最大的响应时间

__Error%：__ 错误率=错误的请求的数量/请求的总数

__Throughput：__ 吞吐量即表示每秒完成的请求数

__Received KB/sec：__ 每秒从服务器端接收到的数据量

__Sent KB/Sec：__ 每秒从发送到服务器端的数据量

&amp;lt;br&amp;gt;
到此，一个简单的性能测试完成了。




原始封面

![课程图片](https://images.unsplash.com/photo-1508081803367-63a3f657e987?w=300)
&lt;/code>&lt;/pre></description></item><item><title>（五）JMeter基础元件介绍</title><link>https://itest2025.pages.dev/tutorials/22-055-%E4%BA%94jmeter%E5%9F%BA%E7%A1%80%E5%85%83%E4%BB%B6%E4%BB%8B%E7%BB%8D/</link><pubDate>Sun, 23 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-055-%E4%BA%94jmeter%E5%9F%BA%E7%A1%80%E5%85%83%E4%BB%B6%E4%BB%8B%E7%BB%8D/</guid><description>&lt;br>
### 测试计划
----
&lt;h4 id="test-plan-测试计划">Test Plan (测试计划)&lt;/h4>
&lt;p>用来描述一个性能测试，包含与本次性能测试所有相关的功能。也就说JMeter创建性能测试的所有内容是于基于一个计划的。&lt;/p>
&lt;p>下面看看一个计划下面都有哪些功能模块（右键单击“测试计划”弹出菜单）。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/test_plan.png"
 data-srcset="http://img.testclass.net/test_plan.png, http://img.testclass.net/test_plan.png 1.5x, http://img.testclass.net/test_plan.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/test_plan.png"
 title="http://img.testclass.net/test_plan.png" />&lt;/p>
&lt;h4 id="threads-users线程-用户">Threads （Users）线程 用户&lt;/h4>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/threads_user.png"
 data-srcset="http://img.testclass.net/threads_user.png, http://img.testclass.net/threads_user.png 1.5x, http://img.testclass.net/threads_user.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/threads_user.png"
 title="http://img.testclass.net/threads_user.png" />&lt;/p>
&lt;p>虽然有三个添加线程组的选项，名字不一样， 创建之后，其界面是完全一样的。在Jmeter之前的版本只有一个线程组的名字。现在多一个 &lt;strong>setUp theread Group&lt;/strong> 与 &lt;strong>tearDown Thread Group&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>setup thread group&lt;/li>
&lt;/ul>
&lt;p>一种特殊类型的ThreadGroup的，可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是，这些类型的线程执行 &lt;strong>测试前&lt;/strong> 进行定期线程组的执行。&lt;/p>
&lt;ul>
&lt;li>teardown thread group&lt;/li>
&lt;/ul>
&lt;p>一种特殊类型的ThreadGroup的，可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是，这些类型的线程执行 &lt;strong>测试结束后&lt;/strong> 进行定期的线程组。&lt;/p>
&lt;p>可能你还是不太理解他们与普通的线程组有什么不同。 如果您用过Junit单元测试框架，想必你不会对setUp(before) ，tearDown(after) 这两个关键字不陌生。 即使没用过，也没关系。 熟悉loadrunner的应该知道，loadrunner的脚本除了action里是真正的脚本核心内容，还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块。 那么这里 setup thread group 和 teardown thread group 就是分别指这两部分。 其实从本质上来看，他们并没有什么不同。&lt;/p>
&lt;ul>
&lt;li>thread group(线程组)&lt;/li>
&lt;/ul>
&lt;p>这个就是我们通常添加运行的线程。通俗的讲一个线程组，可以看做一个虚拟用户组，线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。&lt;/p>
&lt;h4 id="测试片段test-fragment">测试片段（Test Fragment）&lt;/h4>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/test_fragment.png"
 data-srcset="http://img.testclass.net/test_fragment.png, http://img.testclass.net/test_fragment.png 1.5x, http://img.testclass.net/test_fragment.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/test_fragment.png"
 title="http://img.testclass.net/test_fragment.png" />&lt;/p></description></item><item><title>（六）JMeter元件的作用域与执行顺序</title><link>https://itest2025.pages.dev/tutorials/22-056-%E5%85%ADjmeter%E5%85%83%E4%BB%B6%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%B8%8E%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F/</link><pubDate>Sun, 23 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-056-%E5%85%ADjmeter%E5%85%83%E4%BB%B6%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%B8%8E%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F/</guid><description>&lt;br>
### 元件的作用域
----
先来讨论一下元件有作用域。《[JMeter基础元件介绍](/jmeter/base-element/)》一节中，我们介绍了8类可被执行的元件（测试计划与线程组不属于元件），这些元件中，__取样器__ 是典型的不与其它元件发生交互作用的元件，__逻辑控制器__ 只对其子节点的取样器有效，而其它元件（config elements 、timers 、post-processors、assertions、listeners）需要与取样器（sampler）等元件交互。
&lt;ul>
&lt;li>&lt;strong>配置元件（config elements）&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>元件会影响其作用范围内的所有元件。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>前置处理程序（Per-processors）&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>元件在其作用范围内的每一个sampler元件之前执行。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>定时器（timers ）&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>元件对其作用范围内的每一个sampler有效。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>后置处理程序（Post-processors）&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>元件在其作用范围内的每一个sampler元件之后执行。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>断言（Assertions）&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>元件对其作用范围内的每一个sampler元件执行后的结果执行校验。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>监听器（Listeners）&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>元件收集其作用范围的每一个sampler元件的信息并呈现。&lt;/p>
&lt;br>
在JMeter中，元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的，作用域的原则是：
&lt;ul>
&lt;li>
&lt;p>取样器（sampler）元件不和其它元件相互作用，因此不存在作用域的问题。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>逻辑控制器（Logic Controller）元件只对其子节点中的取样器 和 逻辑控制器作用。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>除取样器和逻辑控制器元件外，其他6类元件，如果是某个sampler的子节点，则该元件会对其父子节点起作用。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>除取样器和逻辑控制器元件外，其他6类元件，如果其父节点不是sampler ，则其作用域是该元件父节点下的其他所有后代节点（包括子节点，子节点的子节点等）。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>讲了这些，你可能迷糊了，到底是肿么个情况呀！？通过两个栗子（例子）来理解一下他们的作用域。&lt;/p>
&lt;p>&lt;strong>例一&lt;/strong>&lt;/p>
&lt;p>&lt;font color=#FF6347 >注：下图只是为了说明作用域，无法正常运行。&lt;/font>&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/element_scope_demo1.png"
 data-srcset="http://img.testclass.net/element_scope_demo1.png, http://img.testclass.net/element_scope_demo1.png 1.5x, http://img.testclass.net/element_scope_demo1.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/element_scope_demo1.png"
 title="http://img.testclass.net/element_scope_demo1.png" />&lt;/p>
&lt;p>&lt;strong>取样器：&lt;/strong> HTTP请求 、FTP请求 、TCP取样器；&lt;strong>逻辑控制器：&lt;/strong> 循环控制器；&lt;strong>监听器：&lt;/strong> 图形结果、聚合报告。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>HTTP请求、FTP请求、TCP取样器 元件没有作用域的概念。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>循环控制器 元件作用域是其子节点FTP请求 、TCP取样器 。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>图形结果 元件的作用域是FTP请求 、TCP取样器。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>聚合报告 元作的作用域是HTTP请求 、FTP请求 、TCP取样器。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>例二&lt;/strong>&lt;/p>
&lt;p>&lt;font color=#FF6347 >注：下图只是为了说明作用域，无法正常运行。&lt;/font>&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/element_scope_demo2.png"
 data-srcset="http://img.testclass.net/element_scope_demo2.png, http://img.testclass.net/element_scope_demo2.png 1.5x, http://img.testclass.net/element_scope_demo2.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/element_scope_demo2.png"
 title="http://img.testclass.net/element_scope_demo2.png" />&lt;/p></description></item><item><title>（七）JMeter基础知识点：参数化</title><link>https://itest2025.pages.dev/tutorials/22-057-%E4%B8%83jmeter%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9%E5%8F%82%E6%95%B0%E5%8C%96/</link><pubDate>Sat, 22 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-057-%E4%B8%83jmeter%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9%E5%8F%82%E6%95%B0%E5%8C%96/</guid><description>&lt;br>
### 参数化
----
简单的来理解一下，我们录制了一个脚本，这个脚本中有登录操作，需要输入用户名和密码，假如系统不允许相同的用户名和密码同时登录，或者想更好的模拟多个用户来登录系统。
&lt;p>这个时候就需要对用户名和密码进行参数化，使每个虚拟用户都使用不同的用户名和密码进行访问。&lt;/p>
&lt;p>&lt;strong>前提需求：&lt;/strong>&lt;/p>
&lt;p>我们有一个嘉宾管理系统，该系统需要登录。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/guest_systme_login.png"
 data-srcset="http://img.testclass.net/guest_systme_login.png, http://img.testclass.net/guest_systme_login.png 1.5x, http://img.testclass.net/guest_systme_login.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/guest_systme_login.png"
 title="http://img.testclass.net/guest_systme_login.png" />&lt;/p>
&lt;p>在Jmeter中添加一个登录HTTP请求，设置登录的用户名和密码。如下：&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/login_http_request.png"
 data-srcset="http://img.testclass.net/login_http_request.png, http://img.testclass.net/login_http_request.png 1.5x, http://img.testclass.net/login_http_request.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/login_http_request.png"
 title="http://img.testclass.net/login_http_request.png" />&lt;/p>
&lt;p>配置参数：&lt;/p>
&lt;pre tabindex="0">&lt;code>* 协议：http
* IP（网址）：127.0.0.1
* 端口号：8000
* 请求方法：POST
* 请求路径：/login_action/
* 自动重定向
* 同请求一起发送参数: username=admin, password=admin123456
&lt;/code>&lt;/pre>&lt;br>
#### 设置参数化
&lt;p>&lt;strong>第一步：&lt;/strong>&lt;/p>
&lt;p>我们需要“参数化”的数据，这里我用CSV格式的文件创建了五个用户名/密码，保存为.csv格式的文件。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/login_user_csv.png"
 data-srcset="http://img.testclass.net/login_user_csv.png, http://img.testclass.net/login_user_csv.png 1.5x, http://img.testclass.net/login_user_csv.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/login_user_csv.png"
 title="http://img.testclass.net/login_user_csv.png" />&lt;/p>
&lt;p>将文件放在：&lt;strong>D:\login_user.csv&lt;/strong> 。关于如何得到成百上千的用户名和密码，可以使用SQL语句在数据库中创建，并将数据导出保存，这里就不深究。&lt;/p>
&lt;p>&lt;strong>第二步：&lt;/strong>&lt;/p>
&lt;p>好，我们要编写函数来调用这个login_user.csv文件，点击菜单栏“选项”&amp;mdash;-&amp;gt;“函数助手对话框”，如下图。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/function_helper.png"
 data-srcset="http://img.testclass.net/function_helper.png, http://img.testclass.net/function_helper.png 1.5x, http://img.testclass.net/function_helper.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/function_helper.png"
 title="http://img.testclass.net/function_helper.png" />&lt;/p>
&lt;p>&lt;font color=#FF6347 >注：.csv文件第一列从0开始取得。&lt;/font>&lt;/p></description></item><item><title>（八）JMeter基础知识点：检查点</title><link>https://itest2025.pages.dev/tutorials/22-058-%E5%85%ABjmeter%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9%E6%A3%80%E6%9F%A5%E7%82%B9/</link><pubDate>Sat, 22 Jul 2017 12:59:11 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-058-%E5%85%ABjmeter%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9%E6%A3%80%E6%9F%A5%E7%82%B9/</guid><description>&lt;br>
### 检查点
----
检查点不是太专的叫法，不管是在自动化测试还是性能测试工具中，应该叫：__断言__
&lt;p>简单的来理解一下，在《&lt;a href="https://itest2025.pages.dev/jmeter/jmeter-parameterize/" rel="">JMeter基础知识点：参数化&lt;/a>》中，我们对用户名和密码进行了参数化，那么怎样来判断JMeter参数化的用户有没真正的登录成功呢？或者有没有返回登录成功的页面。这就需要用到 &lt;strong>断言&lt;/strong> 了。&lt;/p>
&lt;p>&lt;strong>前提需求：&lt;/strong>&lt;/p>
&lt;p>我们有一个嘉宾管理系统，该系统登录成功的页面。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/guest_systme_login_success.png"
 data-srcset="http://img.testclass.net/guest_systme_login_success.png, http://img.testclass.net/guest_systme_login_success.png 1.5x, http://img.testclass.net/guest_systme_login_success.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/guest_systme_login_success.png"
 title="http://img.testclass.net/guest_systme_login_success.png" />&lt;/p>
&lt;br>
#### 添加断言
----
&lt;p>&lt;strong>第一步&lt;/strong>&lt;/p>
&lt;p>右键点击“HTTP请求”&amp;mdash;-&amp;gt;添加&amp;mdash;-&amp;gt;断言&amp;mdash;-&amp;gt;响应断言。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/add_assertion.png"
 data-srcset="http://img.testclass.net/add_assertion.png, http://img.testclass.net/add_assertion.png 1.5x, http://img.testclass.net/add_assertion.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/add_assertion.png"
 title="http://img.testclass.net/add_assertion.png" />&lt;/p>
&lt;p>&lt;strong>第二步&lt;/strong>&lt;/p>
&lt;p>打开响应断言，进行设置。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/assert_login_info.png"
 data-srcset="http://img.testclass.net/assert_login_info.png, http://img.testclass.net/assert_login_info.png 1.5x, http://img.testclass.net/assert_login_info.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/assert_login_info.png"
 title="http://img.testclass.net/assert_login_info.png" />&lt;/p>
&lt;p>&lt;strong>要测试的响应字段：&lt;/strong> 响应文本、Document(text)、URL样本、响应信息、Response Headers、Lgnore Staus
等选项。虽然接口返回的是HTML页面，但对于JMeter来说返回数据为文本，所以，这里可以勾选“响应文本”。&lt;/p>
&lt;p>&lt;strong>模式匹配规则：&lt;/strong> 包括、 匹配、 Equals、 Substring。这里只需要验证返回数据中是否包含主要的关键字，所
以， 这里勾选“包括” 。&lt;/p>
&lt;p>&lt;strong>要测试的模式：&lt;/strong> 其实就是断言的数据。 点击“添加” 按钮， 输入要断言的数据。&lt;/p>
&lt;p>&lt;font color=#FF6347 > 我们怎么 &lt;strong>证明&lt;/strong> 登录是成功的？肯定是从登录成功的页面上抓取信息来判断了。那么，&lt;strong>Guest Manage System&lt;/strong> 和 &lt;strong>退出&lt;/strong> 看来不错，因为只有登录成功的页面上才有。&lt;/font>&lt;/p></description></item><item><title>（九）JMeter基础知识点：集合点</title><link>https://itest2025.pages.dev/tutorials/22-059-%E4%B9%9Djmeter%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9%E9%9B%86%E5%90%88%E7%82%B9/</link><pubDate>Sat, 22 Jul 2017 12:59:10 +0800</pubDate><guid>https://itest2025.pages.dev/tutorials/22-059-%E4%B9%9Djmeter%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E7%82%B9%E9%9B%86%E5%90%88%E7%82%B9/</guid><description>&lt;br>
### 集合点
----
&lt;p>简单来理解一下，虽然我们的“性能测试”理解为“多用户并发测试”，但真正的并发是不存在的，为了更真实的实现并发的操作，我们可以在需要压力的地方设置集合点。&lt;/p>
&lt;p>关联阅读：
《&lt;a href="https://itest2025.pages.dev/jmeter/jmeter-parameterize/" rel="">JMeter基础知识点：参数化&lt;/a>》
《&lt;a href="https://itest2025.pages.dev/jmeter/jmeter-assertions/" rel="">JMeter基础知识点：检查点&lt;/a>》&lt;/p>
&lt;p>还拿前面用户和密码的功能，每到输入用户名和密码登录的地方，所有的虚拟用户都相互之间等一等，然后一起访问。（连长说一声令下，大家一起冲啊！这样给敌人的压力会很大。）&lt;/p>
&lt;p>&lt;strong>第一步&lt;/strong>&lt;/p>
&lt;p>接着在之前创建的脚本的基础上，右键点击 HTTP请求&amp;mdash;-&amp;gt;定时器&amp;mdash;-&amp;gt;Synchronizing Timer。&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/add_synchronizing_time.png"
 data-srcset="http://img.testclass.net/add_synchronizing_time.png, http://img.testclass.net/add_synchronizing_time.png 1.5x, http://img.testclass.net/add_synchronizing_time.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/add_synchronizing_time.png"
 title="http://img.testclass.net/add_synchronizing_time.png" />&lt;/p>
&lt;p>&lt;strong>第二步&lt;/strong>&lt;/p>
&lt;p>设置集合点：&lt;/p>
&lt;p>&lt;img
 class="lazyload"
 src="https://itest2025.pages.dev/svg/loading.min.svg"
 data-src="http://img.testclass.net/synchronizing_time_setting.png"
 data-srcset="http://img.testclass.net/synchronizing_time_setting.png, http://img.testclass.net/synchronizing_time_setting.png 1.5x, http://img.testclass.net/synchronizing_time_setting.png 2x"
 data-sizes="auto"
 alt="http://img.testclass.net/synchronizing_time_setting.png"
 title="http://img.testclass.net/synchronizing_time_setting.png" />&lt;/p>
&lt;p>&lt;strong>Number of Simulated Users to Group by：&lt;/strong> 每次释放的线程数量。如果设置为0，等同于线程组中设置的线程数量。&lt;/p>
&lt;p>&lt;strong>Timeout in milliseconds：&lt;/strong> 如果设置为0，Timer将会等待线程数达到了&amp;quot;Number of Simultaneous Users to Group&amp;quot;中设置的值才释放。如果大于0，那么超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到&amp;quot;Number of Simultaneous Users to Group&amp;quot;中设置的值，Timer将不再等待，释放已到达的线程。&lt;/p>
&lt;p>&lt;strong>注意：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>如果设置Timeout in milliseconds为0，且线程数量无法达到&amp;quot;Number of Simultaneous Users to Group by&amp;quot;中设置的值，那么Test将无限等待，除非手动终止。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Synchronizing timer 仅作用于同一个JVM中的线程,所以，如果使用并发测试，确保&amp;quot;Number of Simultaneous Users to Group by&amp;quot;中设置的值不大于它所在线程组包含的用户数。&lt;/p></description></item></channel></rss>