一,JMeter组件执行顺序
- 配置节点
- 前置处理器
- 定时器
- 取样器
- 后置处理器(只在有结果可用情况下执行)
- 断言(只在有结果可用情况下执行)
- 监听器(只在有结果可用情况下执行)
二,JMeter组件详解
1,线程
- 线程数:虚拟用户数
- Ramp-Up Period:生成所有虚拟用户的时间。Ramp-Up Period 设置成0,那么所有的用户将会同时立即产生
- 循环数:要么N次,要么永远
- 调度器:定时执行的设置方式,可以设置在未来的某个时间开始执行也可以设置多少秒后开始执行。在按下执行按钮后,调度器才生效
2,取样器
取样器(Samples)是Jmeter真正产生请求的组件。常用的取样器是HTTP请求取样器
- 编码:在HTTP取样器里,在变量一行可以勾选编码。如果变量的值包含了非Ascii码中的字符(比如汉字)或者包含Ascii码中的特殊字符(比如空格问号之类),那么就要勾选编码。
3,控制器
- 逻辑控制器:用来控制取样器的执行顺序。除了仅一次控制器外,其他控制器下可以嵌套别的种类的逻辑控制器。
- 循环控制器:定义一个循环规则。
- 名称:控制器名称
- 注释:随意设置
- 输入变量前缀:可以在“用户自定义变量”中定义一组变量,循环控制器可以从中获取到变量对应的值,然后作为循环控制器的循环条件,还可以输出变量作为取样器的参数。
- Start index for loop:循环变量下标起点
- End index for loop:循环变量下标终点
- 输出变量名称:循环控制器生成的变量名称
- Add “_” before number?:变量前缀后是否加"_"作为分隔符
- 录制控制器:脚本录制时自动生成的请求都在这个控制器下面
- 事务控制器:假设提交一个工单需要3个步骤(step1,step2,step3),每一步都需要发送一个请求到服务器,为了获取3个请求的总时间,可以使用事务控制器将这3个请求聚合,把3个请求作为事务控制器的子组件。 所以事务控制器实际就是聚合逻辑上应该合并在一起的N个请求的总响应时间。
4,函数
函数是一个编程的概念,类似于一个盒子,我们输入一些值后,这个盒子输出一些值。
- Random函数:这个函数需要我们输入2个值,1个是随机范围的最小值,另1个是随机范围的最大值(如 ${_Random(1,3)}是随机生成1~3之间的整数;key${_Random(1,3)}是随机生成key1,key2,key3中的任意1个字符串)
5,配置元件
配置元件是用来存放配置信息的,Jmeter提供了丰富的配置元件来帮助我们构建测试脚本。常用的配置元件有用户自定义变量元件,HTTP请求默认值元件等。
- CSV数据文件设置:这个组件可以从指定的文件中一行一行地提取文本内容,根据分隔符拆解这一行内容并把内容与变量名对应上,然后这些变量就可以供取样器引用了。
- 名称:随意设置
- 注释:随意设置,可以为空
- 文件名:引用的参数文件地址
- 文件编码:读取参数文件用到的编码格式,建议用UTF-8格式保存参数文件
- 变量名称:定义的参数名称,用逗号隔开,顺序与参数文件中的参数对应
- 忽略首行:若参数文件首行是标题,则设置为True,反之为False
- 分隔符:用来分割参数文件的分隔符(默认为逗号,也可以用tab来分隔,如果参数文件用tab分隔,在此应该填写“ ”)
- 是否允许带引号:如果选True,
- 遇到文件结束符再次循环?:
- 遇到文件结束符停止线程?:
- 线程共享模式:
- HTTP信息头管理器:这个组件的作用就是以Key-Value的格式设置http请求的header,一般来说我们通过录制的方式获取http请求的header。另外每个请求下面挂一个header信息配置器不利于我们统一的控制线程组中的所有请求,我们可以只在线程组下面挂一个header管理器,这样线程组下的所有http请求都具有同样的header了。
- 随机变量:这个组件的作用是生成字符+随机数字格式的字符串,并保存在变量中,以便后续使用。(如01-selenium,selenium-01,se001lenium)如果同时有两个HTTP请求,这两个HTTP请求取得是同一个随机变量。
6,监听器
监听器可以理解为测试报告
7,定时器
定时器的作用就是给用户每一步操作之前加上“思考”时间,使模拟的用户行为更接近真实用户的行为。
- 固定定时器:这个组件的作用是暂停线程执行,将定时器放在两个请求之间,思考一段固定的时间。
8,前置处理器
前置处理器用来做一些环境或者参数的准备工作,比如在对数据库进行操作前需要先建立一个数据库连接,那么前置处理器就可以完成这个功能。
9,后置处理器
后置处理器一般放在取样器之后,可以帮助我们从服务器响应数据中查找到我们需要的数据。
- 正则表达式提取器
- 名称:随意设置
- 注释:随意设置
- Apply to:应用范围(四个选项)
- Main Sample and sub-samples:匹配范围包括当前父取样器并覆盖子取样器
- Main sample only:匹配范围是当前父取样器
- Sub-samples only:仅匹配子取样器
- JMeter Variable:支持对JMeter变量值进行匹配
- 要检查的响应字段:针对响应数据的不同部分进行匹配,共7个选项
- 主体:响应数据的主体部分,排除Header部分;Http协议返回请求的主体部分就是Body
- Body(unescaped):针对替换了转义码的Body部分
- Body as a Document:返回内容作为一个文档进行匹配
- 信息头:只匹配信息头部分的内容
- URL:只匹配URL链接
- 响应代码:匹配响应代码,比如HTTP协议返回码200代表成功
- 响应信息:匹配响应信息,比如处理成功返回”成功“字样,或者”OK“字样
- 引用名称:匹配出来的信息通过此名称进行访问,类似${引用名称}进行访问
- 正则表达式:正则表达式提取器使用此串进行信息匹配
- 模板:正则表达式可以设置多个模板进行匹配,在此只可指定运用哪个模板,模板自动编号。$1$指第一个模板,$2$指第二个模板,以此类推,$0$指全文匹配。
- 匹配数字:在匹配时往往会出现多个值匹配的情况,如果匹配数为0则代表随机取匹配值;不同模板可能会匹配一组值,那么可以用匹配数字来确定取这一组值中的哪一个;负数取所有值,可以与For Each Controller一起使用来遍历。
- 默认值:如果没有匹配到可以制定一个默认值。
10,断言
断言用来验证结果是否正确,用一个预设的结果(值,表达式,时间长短等条件)与实际结果匹配,匹配到则成功,反之失败。断言元件有:
- 响应断言
- XML断言
- BeanShell断言
11,Test Fragment
Test Fragment是一个辅助的组件,在脚本开发过程中可以用来备份元件;Test Fragment下的元件可以被模块控制器调用,可以利用它来模块化请求(把一个业务封装成一个方法供复用)供模块控制器调用。