大数跨境

六、测试计划(Test Plan)的元件(详解教程三)

六、测试计划(Test Plan)的元件(详解教程三) 慧测
2021-08-12
2
导读:关注性能小课,成长不止一点点1、前言 前面我们讲到测试计划部分元件,今天我们继续,讲讲测试计划元件中的配置元

关注性能小课,成长不止一点点



1、前言

前面我们讲到测试计划部分元件,今天我们继续,讲讲测试计划元件中的配置元件、前置处理器、后置处理器、执行顺序、范围鉴定规则、属性和变量、使用变量对测试参数化等。

2、测试计划(Test Plan)元件

2.1 配置元件

在性能测试中,为了模拟大量的用户操作被测系统,往往需要做参数化,JMeter的参数化可以通过配置元件来完成。例如:CSV Data Set Config,它可以帮助用户从文件中读取测试数据。另外JMeter也提供了众多函数(通过函数助手可以查看到,后续会针对函数助手进行详细讲解)来帮助用户动态的生成数据。关于配置元件,其作用不仅于此,它还可以记录服务器的返回数据,例如:Http Cache Manager,它会自动记录服务器返回的Cache信息,简而言之就是它为取样器提供预备数据,然后由取样器发出请求。配置元件与取样器是紧密配合的,尽管它不发送请求(HTTP(S)测试脚本记录器除外),但是它可以添加或修改请求。

配置元件只能从放置该元件的树枝内部进行访问。例如,如果将HTTP Cookie Manager放置在简单逻辑控制器中,则放置在Simple Logic Controller中的HTTP请求控制器将只能访问Cookie Manager(参考下图)。Cookie管理器可用于HTTP请求“网页1”和“网页2”,但不能访问“网页3”。

而且,树枝内部的配置元件比“父”分支中的相同元件具有更高的优先级。例如,当前定义了两个HTTP请求默认值元件:“ Web默认值1”和“ Web默认值2”。由于在循环控制器内放置了“ Web Defaults 1”,因此只有“ Web Page 2”可以访问它。其它HTTP请求将使用“ Web默认值2”,因为将其放置在了线程组(所有其它分支的“父级”)中。

而由用户定义的变量配置元件则是不同的。无论在何处放置,都将在测试开始时对其优先进行处理。为求简单、规范,建议将其放置在线程组的开始处。

配置元件的添加路径:【测试计划】-【配置元件】。

2.2 前置处理器

前置处理器在发出“取样器请求”之前将会执行一些操作。如果将前置处理器附加到Sampler元件,则它将在该Sampler元件运行之前执行。前置处理器最常用于在样本请求运行前修改其设置,或对未从响应文本中提取的变量进行更新。

举一个使用前置处理器元件的测试场景:在测试脚本的开发过程中,在请求发送操作之前可能会做一些环境或者参数的准备工作,此时,用户就可以在前置处理器中来完成这些。例如:用户在对数据库进行操作前需要建立一个数据库连接,那么前置处理器就可以完成这个工作。

前置处理器的添加路径:【测试计划】-【前置处理器】。

2.3 后置处理器

后置处理器一般放在取样器之后,用来处理服务器的返回结果,例如:一个Web应用程序,登录操作之后会返回一个SessionID,该SessionID在登录之后的业务操作过程中会作为验证条件,验证用户是否合法登录了之后才进行的业务操作。发出取样器请求后,后置处理器将会对其执行某些操作。

如果将后处理器附加到Sampler元件,则它将在该Sampler元件运行之后立即执行。后置处理器最常用于处理响应数据,擅长从中提取值。

2.4 执行顺序

  1. 配置元件
  2. 预处理器
  3. 计时器
  4. 取样器
  5. 后处理器(除非SampleResult为null)
  6. 断言(除非SampleResult为null)
  7. 监听器(除非SampleResult为null)

此处需要注意的是,计时器、断言、预置处理器和后置处理器,只有在有适用的取样器时才会被处理。逻辑控制器和取样器会按照它们在树中出现的顺序进行处理。其它测试元件将根据其发现范围和测试元件的类型进行处理。

小提示:● 在同一种类型中,元件将按照它们在树中出现的顺序进行处理。

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

● 控制器

 ● 后处理器1
 ● 取样器1
 ● 取样器2
 ● 计时器1
 ● 断言1
 ● 预处理器1
 ● 计时器2
 ● 后处理器2

其执行顺序为:

● 预处理器1
● 计时器1
● 计时器2
● 取样器1
● 后处理器1
● 后处理器2
● 断言1

● 预处理器1
● 计时器1
● 计时器2
● 取样器2
● 后处理器1
● 后处理器2
● 断言1

2.5 范围鉴定规则

JMeter测试树所包含的元件是分层和有序的。测试树中的某些元件是严格分层的(监听器,配置元件,后处理器,预处理器,断言,计时器),而有些则主要是有序的(控制器,取样器)。创建测试计划时,将会创建样本请求的有序列表(通过Samplers),该列表表示要执行的一组步骤。这些请求通常也在已排序的控制器中进行组织。来看以下测试树:

请求的顺序将为:一,二,三,四。这里需要稍微注意的是,某些控制器会影响其子元件的顺序。

其它元件是分层的。例如,断言在测试树中是分层的。如果其父一级是一个请求,则将其应用于该请求。如果其父一级是Controller,则它将影响该Controller的所有后代请求。来看以下测试树:

其中,断言1仅适用于请求1,而断言2仅适用于请求2和3。

再来看一个测试树,这次使用Timers:

其中,断言1仅适用于请求1,而断言2仅适用于请求2和3。

再来看一个测试树,这次使用Timers:

在此示例中,对请求进行特定命名以反映其执行顺序。其中:

- 计时器#1将应用于请求2、3和4(注意:顺序与分层元件无关)。
- 断言1仅适用于请求三。
- 计时器2将影响所有请求。

最后,是关于配置元件的标题管理器。Cookie管理器和授权管理器与配置默认值元件的处理方式有所不同。“配置默认值”元件中的设置被合并为取样器可以访问的一组值,但管理器中的设置是不会合并的。

2.6 属性和变量

JMeter的属性在jmeter.properties文件中进行定义。

属性对于JMeter是全局的,并且主要用于定义JMeter使用的某些默认值。例如,属性remote_hosts定义JMeter将要尝试远程运行的服务器。

JMeter 变量是每个线程局部的。每个线程的值可以相同,也可以不同。

如果某个变量由线程更新,则仅更改该变量的线程副本。例如,正则表达式提取器、后置处理器将根据其线程读取的样本设置其变量,这些变量可在同一线程中进行使用。

这里需要注意的是:线程启动时,JMeter会将“测试计划”和“用户定义的变量”配置元件所定义的值用于整个测试计划。如果同一变量由多个UDV元件定义,则最后一个变量生效。

线程启动后,JMeter会将初始变量集复制到每个线程。其它元件(例如:用户参数预处理器、正则表达式提取器、后置处理器)可用于重新定义相同的变量(或创建新的变量)。这些重新定义的变量,仅适用于当前线程。

关于setProperty函数可以用来定义JMeter的属性,其对于测试计划是全局的,如有必要,其可用于在线程之间传递信息。

注意:变量和属性都区分大小写!

2.7 使用变量对测试参数化

变量不必更改,可以定义一次,而且如果单独保留,值是不会更改的。所以,用户可以将它们用作测试计划中经常出现的表达式的简写形式。或对于在运行期间保持恒定但在运行空间角度可能有所不同的项目。例如,主机名或线程组中的线程数。

在决定如何构建测试计划时,需要先记一下哪些项目对于运行是恒定的,但在运行空间角度可能会发生改变。为此,需要确定一些变量名称,例如:以C_或K_作为前缀,或仅使用大写字母将它们与测试期间需要更改的变量区分开。此外,还应考虑哪些项需要在线程本地进行,例如:使用正则表达式后处理程序所提取到的计数器或值。此时,用户可能希望对它们使用不同的命名约定。例如,用户可以在测试计划中定义以下内容:

- 主机www.example.com
- 底线10
- 圈数20

在测试计划中,用户可以将它们称为 {THREADS}等。如果以后要更改主机,只需更改HOST变量的值即可。但这对于量相对较少的测试工作是可以接受的,一旦所面对的测试工作是由许多不同的组合所组成的时候,就不太适用了。所以,另一种解决方案是使用属性来定义变量的值,例如:

- 主机$ {__ P(host,www.example.com)}
- 线程$ {__ P(threads,10)}
- 循环$ {__ P(loops,20)}
- 此时,用户就可以在命令行上对某一些或所有值进行灵活更改,如下所示:jmeter…-Jhost = www3.example.org -Jloops = 13

小结

本篇有关测试计划(Test Plan)元件的相关知识分享,到此暂告一段落,后续将会对这些元件以及部分元件所涉及到的实际应用,进行细粒度的介绍说明和讲解。

END


免费技术支持微信:15712862196

咨询QQ:2657535456

咨询微信号:huice666

慧测公众号


【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404