目 录

 

4。 测试计划的要素

测试计划对象有一个复选框被称为“功能测试”。 如果选中,它会导致JMeter的记录每个样品从服务器返回的数据。 如果您选择了一个文件在您的测试听众,这数据将被写入文件。 如果你正在做一个小的运行,以确保正确配置JMeter是,这可能是有用的,您的服务器返回预期的结果。 结果是,该文件将迅速增长的巨大,JMeter的性能将受到影响。 如果你正在做压力测试(默认是关闭的),这个选项应该关闭。

如果您没有记录的数据文件,这个选项没有什么区别。

您也可以使用上监听器的配置按钮来决定哪些字段保存。

4.1 ThreadGroup的

线程组元件是任何测试计划的开始点。 所有的控制器和采样必须在一个线程组。 其他元素,如听众,可直接放置下的测试计划,在这种情况下,他们将适用于所有的线程组。 顾名思义,线程组元素的控制线程JMeter的的数量将用来执行测试。 一个线程组的控制可让您:

  • 设置线程数
  • 设置的坡道期
  • 设置执行测试的次数

每个线程将执行完整的测试计划和,完全独立于其他测试线程。 多线程是用来模拟并发连接到您的服务器应用程序。

斜坡告诉JMeter多久采取“上升”的选择线程。 如果使用10个线程,以及斜坡上升周期为100秒,那么JMeter将采取100秒得到所有10个线程的启动和运行。 前一个线程开始后,每个线程都将开始10秒(100/10)。 如果有30个线程和120秒的加速期,那么每个连续的线程将被推迟了4秒。

斜坡需要足够长的时间,以避免过大的工作负荷,在测试开始和足够短,最后一个线程开始运行前首先完成(除非你想这样的事情发生)。

开始斜坡上升=线程数,向上或向下调整需要。

默认情况下,线程组是一次配置循环,通过它的元素。

1.9版本引入了一个测试运行调度 线程组面板的底部单击复选框以显示额外的字段,可以在其中输入运行的开始和结束时间。 当测试开始时,JMeter将等待,如有必要,直到启动时间已经达到。 在每个周期结束时,JMeter的检查结束时间已达到,若有,停止运行,否则测试是可以继续下去,直到达到迭代限制。

另外,可以使用相对延迟和持续时间等领域。 注意:延迟覆盖的启动时间,持续时间超过乘坐的结束时间。

4.2控制器

JMeter的有两种类型的控制器:取样器和逻辑控制器。 这些驱动器的测试处理。

取样器告诉JMeter发送请求到服务器。 例如,添加一个HTTP请求取样器,如果你想JMeter发送一个HTTP请求。 您还可以通过添加一个或多个配置元素采样器请求。 欲了解更多信息,请参阅取样

逻辑控制器让你定制JMeter的使​​用来决定何时发送请求的逻辑。 例如,您可以添加一个交错的逻辑控制器,两个HTTP请求取样器之间交替。 欲了解更多信息,请参阅逻辑控制器

4.2.1取样

取样器告诉JMeter发送请求到服务器,并等待响应。 他们在树中出现的顺序处理。 控制器可用于修改采样器的重复。

JMeter的采样器包括:

  • FTP请求
  • HTTP请求
  • JDBC的请求
  • Java对象请求
  • LDAP请求
  • SOAP / XML - RPC请求
  • 的WebService(SOAP)请求
每个采样有几个可以设置的属性。 您可以进一步自定义采样器,通过添加一个或多个配置元素测试计划。

如果您要发送的相同类型的多个请求(例如,HTTP请求)到相同的服务器,可以考虑使用一个默认配置元素。 每个控制器都有一个或多个默认元素(见下文)。

请记住您的测试计划添加一个监听器来查看和/或存储您的请求的结果到磁盘。

如果你有兴趣,对你的请求的响应JMeter的执行基本验证 ,添加一个断言的采样器。 例如,在压力测试一个Web应用程序,服务器可能会返回一个成功的“HTTP响应”的代码,但页面上可能有错误,或可能会丢失部分。 您可以添加断言来检查某些HTML标记,常见的错误字符串,等等。 JMeter的,您可以创建这些断言使用正则表达式。

JMeter的内置取样器

4.2.2逻辑控制器

逻辑控制器让你定制JMeter的使​​用来决定何时发送请求的逻辑。 逻辑控制器可以改变其子元素的请求的顺序。 他们可以修改自己的请求,导致JMeter的重复请求,等等。

要了解逻辑控制器的测试计划的效果,考虑下​​面的测试树:

  • 测试计划
    • 线程组
      • 一旦唯一的控制器
      • 加载搜索页面(HTTP取样)
      • 交错控制器
        • 搜索的“A”(HTTP取样器)
        • 搜索的“B”(HTTP取样器)
        • HTTP默认请求(配置元素)
      • HTTP默认请求(配置元素)
      • Cookie管理(配置元素)

有关此测试的第一件事情就是登录请求将执行仅在第一次通过。 后续迭代会跳过它。 这是由于只有一次控制器的影响。

登录后,搜索页面(想象一个用户登录的Web应用程序,然后下一个采样器加载到一个搜索页面做一个搜索)。 这仅仅是一个简单的要求,不通过任何逻辑控制器过滤。

加载搜索页面后,我们希望做一个搜索。 其实,我们想要做的两个不同的搜索。 但是,我们希望重新装载搜索页面本身相互之间搜索。 我们可以通过4个简单的HTTP请求元素(负载搜索,搜索“A”,负载搜索,搜索的“B”)。 相反,我们使用交错控制器 ,通过一个孩子每次请求通过测试。 它使排序(IE浏览器 - 它不通过随机的,而是“记住”它的地方)的子元素。 交错2个孩子的要求可能会矫枉过正,但很容易被有8,或20个孩子的请求。

注意:HTTP请求默认值属于交错控制器。 试想一下,“搜索”和“搜索”共享相同的路径信息(HTTP请求规范包括域,协议,端口,方法,路径和参数,加上其他可选项目)。 这是有道理的 - 无论是搜索请求,打相同的后端搜索引擎(servlet或CGI脚本,让我们说)。 配置,而不​​是相同的信息都在其路径领域的HTTP取样器,我们可以抽象的信息,以一个单一的配置元素。 当交错控制器从“搜索A”或“搜索B”请求“通行证”,这将填补空白从HTTP默认请求配置元素的值。 因此,我们对这些请求离开的路径字段空白,并投入Configuration元素的信息。 在这种情况下,这是一个最好的未成年人的利益,但它演示功能。

树中的下一个元素是另一个HTTP默认请求,此时添加到线程组本身。 线程组有一个内置的逻辑控制器,因此,它使用此配置元素完全如上所述。 它填补空白的任何要求,通过。 在Web测试是非常有用的,留在所有的HTTP取样元素域字段为空,相反,放入一个HTTP默认请求元素的信息,添加到线程组。 通过这样做,你可以在不同的服务器上测试您的应用程序,只需在你的测试计划中通过改变一个字段。 否则,你必须编辑每个采样。

最后一个元素是一个HTTP Cookie管理器 一个cookie管理器应该添加到所有的Web测试 - 否则JMeter会忽略cookie。 通过添加线程组级别中,我们将确保所有的HTTP请求将共享相同的cookie。

逻辑控制器可以结合起来,以达到不同的结果。 见列表内置逻辑控制器

4.2.3测试片段

测试片段元素是一种特殊类型的控制器 ,在同一级别的线程组元件的测试计划树中存在。 它不同于一个线程组,因为它是不会执行,除非它是由一个引用的模块控制器一个Include_Controller。

此元素是纯粹为测试计划内重复使用的代码,并在2.5版推出

4.3听众

听众提供访问JMeter的测试案例的收集,同时JMeter的运行信息。 图形结果监听器图,图上的响应时间。 “查看结果树”监听器显示的采样请求和响应的详细信息,并能显示基本的HTML和XML响应交涉。 其他听众提供信息汇总或聚合。

此外,听众可以直接的数据,以供日后使用的文件。 每一个听者在JMeter提供了一个字段来指示该文件将数据存储到。 还有配置的按钮,可以用来选择哪些领域,以节省,以及是否使用CSV或XML格式请注意,所有的监听器保存相同的数据,唯一的区别是在数据呈现在屏幕上的方式。

听众可以添加在测​​试中的任何地方,包括直属的测试计划。 他们将收集数据,只能从自己的水平或低于元素。

使用JMeter来,有几个听众。

4.4定时器

默认情况下,一个JMeter线程发送请求而每个请求之间的暂停。 我们建议您通过添加一个线程组可用的定时器指定一个延迟。 如果不加延迟,JMeter的可能太多的要求,在很短的时间量压倒你的服务器。

定时器将导致JMeter的每个采样是在其一个延迟一定的时间范围

如果您选择添加多个定时器线程组,JMeter的需要定时器的总和,该时间之前暂停执行采样定时器适用。 定时器可以增加一条,作为采样器或控制器的儿童,以限制它们应用于采样。

要在测试计划中的一个单一的地方提供了一个暂停,可以使用测试行动取样。

4.5断言

断言允许你断言被测试的服务器收到的答复的事实。 使用断言,你基本上可以“测试”,您的应用程序是你希望它返回的结果。

例如,您可以断言,查询响应将包含一些特定的文本。 您所指定的文字可以是一个Perl风格的正则表达式,你可以表明反应是包含文字,或者说,它应该符合整个响应。

您可以添加任何采样断言。 例如,您可以添加到一个HTTP请求检查文本,断言“”。 JMeter会检查该文本是在HTTP响应。 如果JMeter可以找到的文本,然后将其标记为失败的请求。

请注意断言适用于所有采样器, 其范围。 要限制的说法,以一个单一的采样,添加断言,作为一个孩子的采样。

要查看断言结果,断言监听器添加到线程组。 失败的断言也将显示在树视图和表听众,并在总结和总结报告,例如对错误%年龄。

4.6配置元素

配置元素密切配合采样器。 虽然它不发送请求( HTTP代理服务器的除外),它可以添加或修改请求。

配置元素是从仅在树枝访问你的地方元素。 例如,如果你在一个简单的逻辑控制器内的HTTP Cookie管理Cookie管理器将只能访问HTTP请求的控制器简单的逻辑控制器内的地方(见图1)。 Cookie管理器可访问的HTTP请求“网页1”和“网页”,但不是“网页3”。

此外,树枝里面的配置元素的优先级高于相同的元素在一个“父”分支。 例如,我们定义两个HTTP请求默认值的元素,“网络默认值”1“和”Web默认值“2”。 由于我们只放在“网站默认值”1“里面的一个回路控制器,”网页2“可以访问它。 其他的HTTP请求,将使用“Web默认值”2“,因为我们将它放置在线程组(”父“的所有其他分支)。


图1 -测试计划配置元素显示Accessability
用户定义的变量的配置元素是不同的。 这是在测试的开始,它被放置在任何地方的问题处理。 为了简单起见,建议该元素被放置在启动一个线程组。
4.7预处理器元素

预处理器执行前一个采样的请求遭到了一些行动。 如果预处理器连接到一个取样元素,那么它会执行之前运行,采样元素。 预处理器是最常用的一个样品申请修改设置,运行之前,或更新不从响应文本中提取的变量。 作用域规则预处理器执行时的更多细节。

4.8后处理器元件

后处理器执行某些动作后已经取得了一个采样请求。 如果后处理器连接到一个采样元素,那么它会执行运行后,采样元素。 后处理器是最常用的处理响应数据,往往从中提取的值。 作用域规则时执行后处理器的更多细节。

4.9执行顺序
  1. 配置元素
  2. 预处理器
  3. 定时器
  4. 取样器
  5. 后处理器(除非SampleResult是空)
  6. 断言(除非SampleResult是空)
  7. 监听器(除非SampleResult是空)
请注意,定时器,断言前和后处理器只处理,如果有一个采样器,它们所适用。 他们在树中出现的顺序处理逻辑控制器和采样。 其他测试元素处理的范围中,他们发现,和测试元素的类型。 [在一个类型,元素被处理的顺序,它们在树中出现]。

例如,在下面的测试计划:

  • 控制器
    • 后处理器1
    • 采样器1
    • 采样器2
    • 定时器1
    • 声明1
    • 预处理器1
    • 定时器2
    • 后处理器2
执行的顺序将是:
预处理器1
定时器1
定时器2
采样器1
后处理器1
后处理器2
声明1

预处理器1
定时器1
定时器2
采样器2
后处理器1
后处理器2
声明1

4.10作用域规则

JMeter测试树中包含的元素,这是两个层次,并下令。 在测试树的某些元素是严格分层​​(听众,配置元素后Procesors,预处理器,断言,定时器),和一些主要命令(控制器,采样器)。 当您创建您的测试计划,您将创建一个索取样品的有序列表(通过取样)表示要执行的步骤。 经常组织这些请求,也下令控制器内。 由于下面的测试树:


测试树示例

请求的顺序将是,一,二,三,四。

有些控制器会影响其子元素的顺序,您可以阅读有关在这些特定的控制器组件的引用。

其他元素都是分层的。 举例来说,是一个断言,在测试树的层次。 如果其母公司是一个请求,然后将它应用到该请求。 如果其母公司是一个控制器,那么它会影响所有的请求,该控制器的后裔。 在下面的测试树:


层次结构的例子

断言#1仅适用于请求一个,而断言#2应用于要求第二及第三。

另外一个例子,这次使用定时器:


复杂的例子:

在这个例子中,请求被命名,以反映在它们的执行顺序。 定时器1将适用于要求二,三,四(通知层次元素的顺序是如何无关)。 断言#1只适用于请求三。 定时器2#会影响所有的请求。

希望这些例子清楚如何配置(分层)元素。 如果你能想象每一个请求被传递的树枝,其母公司,那么其母公司的母公司等,而且每一次收集所有的配置元素,父,那么你会看到它是如何工作的。

配置元素头经理,Cookie管理和授权管理,区别对待,从配置的默认元素。 从配置的默认元素设置,合并成一组值取样访问。 然而,从管理者的设置不合并。 如果一个以上的经理在取样范围是,只有一个经理是使用,但目前还没有方法来指定它是用来。
4.11属性和变量

JMeter的属性定义在jmeter.properties(见Gettting入门-配置JMeter的更多细节)。

属性是全球性的JMeter的,大多是用来定义一些JMeter的使​​用默认值。 例如物业remote_hosts定义JMeter会尝试远程运行的服务器。 属性可以在测试计划中引用- 看到功能-读属性-但不能使用特定于线程的值。

JMeter的变量 ,每个线程的本地。 该值可为每个线程相同,或他们可能会有所不同。

如果一个变量是由一个线程更新,只有改变该变量的线程副本。 例如,正则表达式提取后处理器将设置其变量根据其线程读取的样品,并可以使用这些由同一线程稍后。 对于如何引用变量和函数的详细信息,请参阅函数和变量

请注意,由测试计划用户定义的变量的配置元素中定义的值在整个测试计划启动。 如果同一个变量定义多个UDV的元素,那么最后一个生效。 一旦一个线程已经开始,初始设置的变量复制给每个线程。 其他元素如用户参数预处理器或经常表达提取后处理器可用于重新定义相同的变量(或创建一个新的)。 这些重新定义只适用于当前线程。

的setProperty的功能可以被用来定义一个JMeter属性。 这是全球性的测试计划的,所以可以用来在线程之间传递的信息 - 这应该需要。

这两个变量和属性是区分大小写的。
4.12使用变量参数化测试

变量没有变化 - 它们可以被定义一次,如果单独留在家中,不会改变的价值。 所以,你可以使用尽可能短的手,他们频繁地出现在一个测试计划的表达式。 或项目在运行过程中是不变的,但在运行中可能会有所不同。 例如,一台主机,或在一个线程组的线程数目的名称。

当决定如何构造一个测试计划,做笔记,哪些项目是不变的运行,但可能会改变运行之间。 决定对这些变量的名字 - 也许使用,如C_或K_前缀或使用大写字母,以区别于他们在测试过程中需要改变的变量命名约定。 还要考虑哪些项目需要一个线程的本地 - 例如柜台或用正则表达式后处理器提取的值。 你不妨使用这些不同的命名约定。

例如,您可能测试计划中定义以下内容:

主机www.example.com
螺纹10
 LOOPS 20

你可以参考{HOST} $ {螺纹}等这些在测试计划中,如果以后要更改的主机,只需更改主机变量的值。 这工作得很好,小测试,但测试时,大量不同的组合变得单调乏味。 一种解决方案是使用一个属性来定义变量的值,例如:
主机$ {__P(主机,www.example.com)}
螺纹$ {__P(线程,10)}
 LOOPS $ {__P(循环,20)}

然后,您可以改变一些如下的命令行中的值或所有:
 JMeter的... ...  - Jhost = www3.example.org Jloops = 13