目录

接口测试:Jmeter插件与分布式

函数

Jmeter函数是什么?

可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用。

为什么要学习函数?

  • 使用函数我们可以1次【批量】的进行新增
  • 使用函数我们可以利用函数读取外部数据进行参数化
  • 使用函数我们可以设置指定动态数据的数据为全局变量

Jmeter常用函数

  • __CSVRead
  • __counter
  • __Random
  • __time
  • __setProperty
  • __property

Jmeter函数的格式

  1. ${__functionName(var1,var2,var3)}

    1. ${} 函数引用固定格式和参数化相同
    2. __functionName匹配被调用的函数名称;
    3. 用圆括号包含函数的形参,例如${__time(YMD)},不同函数要求的参数也不同;
    4. 有些JMeter函数不要求参数,则可以不使用圆括号,例如${__threadNum};

函数助手对话框

作用

对Jmeter中自带函数的参数设置和生成使用

启动方式

  1. 菜单(选项)–>函数助手对话框
  2. Ctrl+Shift+F1
  3. 工具栏倒数第二个 图标"记事本”

__CSVRead 函数

作用

csvRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数

操作分析

  1. 测试计划->线程组
  2. 线程组->HTTP请求
  3. 函数助手对话框->__CSVRead
  4. 测试计划->监听器->察看结果树

技术难点

  1. __CSVRead 参数设置
  2. 线程组 (线程数)

__counter函数

作用

这个函数是一个计数器,用于统计函数的使用次数

操作分析

  1. 测试计划->线程组
  2. 线程组->HTTP请求
  3. 函数助手对话框->__counter
  4. 测试计划->监听器->察看结果树

技术难点

  1. __counter函数参数设置
  2. 设置计数参数名

__Random函数

作用

随机生成一个指定范围内的数值

操作分析

  1. 测试计划->线程组
  2. 线程组->HTTP请求
  3. 函数助手对话框->__Random
  4. 测试计划->监听器->察看结果树

技术难点分析

__Random函数参数设置

__time函数

作用

获取当前电脑日期时间 比如:MMddhhmmss 月/日/时分秒

操作分析

  1. 测试计划->HTTP信息头管理器
  2. 测试计划->线程组
  3. 线程组->HTTP请求
  4. 函数助手对话框->__time函数
  5. 测试计划->监听器->察看结果树

技术难点分析

  1. HTTP信息头管理器设置
  2. HTTP新增请求方法
  3. __time函数参数

__setProperty函数

作用

用于把指定数据设定成Jmeter属性,可以理解为是把指定数据设置成全局变量

操作分析

  1. 测试计划-HTTP信息头管理器
  2. 测试计划->JDBC Connection Configuration
  3. 测试计划->线程组(学院-新增)
  4. 线程组->HTTP请求(HTTP请求-学院新增)
  5. 线程组->JDBC Request
  6. 函数助手对话框->__setProperty函数
  7. 线程组->BeanShell Sampler
  8. 线程组->Debug Sampler
  9. 测试计划->察看结果树
  10. 工作台->Property Display

技术难点分析

  1. __setProperty函数参数设置
  2. BeanShell Sampler作用
  3. JDBC Request SQL语句
  4. 如何知道设置的属性(全局变量)成功了

BeanShell Sampler 组件配置图

作用

可执行JavaScript的一种容器

Property Display

作用

显示Jmeter工具中的属性

__property函数

作用

获取Jmeter中属性值

实施难点分析

  1. __property函数参数设置

分布式

为什么要学习Jmeter分布式部署?

问题

我们单台电脑由于配置(CPU、内存)问题,最模拟500用户时,就出现卡死现象

什么是分布式?

概念:由多台电脑共同完成同一1个任务(请求)部署,我们称这种部署为分布式部署

分布式原理

  1. 一台电脑作为控制机(Controller),其它电脑做为执行机(Agent);
  2. 执行时,控制机会把脚本发送到每台执行机上,执行机拿到脚本后就开始执行
  3. 执行机执行时不需要启动Jmeter界面,可以理解它是通过命令行模式执行的
  4. 执行完成后,执行机会把结果回传给控制机,控制机会收集所有执行机的信息并汇总

解决方案分析

  1. 1台电脑(控制机)分发执行任务
  2. 2台电脑(执行机)执行任务
  3. 在执行机上启动监听服务程序
  4. 在控制机上启动运行
  5. 测试计划->聚合报告

技术难点分析

  1. 执行机-jmeter.properties设置
  2. 控制机jmeter.properties设置
  3. 执行机启动分布式监听服务程序
  4. 2台执行机,用户数如何设置

逻辑控制器

问题

  1. Jmeter目前学习的知识无法使用判断语句去控制HTTP取样器

什么是逻辑控制器?

概念:Jmeter逻辑控制器是可以控制采样器(Sampler)的执行顺序,它由多个逻辑控制语句封装成不同功能的组件组成

逻辑控制器作用域

作用域:只对其子节点的sampler有效。

逻辑控制器分类

  1. 控制类:控制采样器执行顺序类
  2. 分组类:对采样器进行分组类

常用(控制类)逻辑控制器

  1. 如果(If)控制器
  2. ForEach控制器
  3. 交替控制器
  4. 循环控制器
  5. 仅一次控制器
  6. 随机控制器
  7. 随机顺序控制器
  8. While Controller
  9. Switch Controller

如果(If)控制器

作用

条件成真,则执行控制器下所有取样器

解决方案分析
  1. 测试计划->线程组
  2. 测试计划->用户自定义变量
  3. 线程组->如果(If)控制器
  4. 如果(If)控制器->HTTP请求
  5. 测试计划-察看结果树
技术难点分析

如果(If)控制器 参数设置

ForEach控制器

作用

ForEach控制器一般和用户定义的变量一起使用,在用户自定义变量中读取一系列相关的变量。

操作分析
  1. 测试计划->线程组
  2. 线程组->用户定义的变量
  3. 线程组->ForEach控制器
  4. ForEach控制器->HTTP请求
  5. 测试计划->察看结果树
技术难点分析
  1. ForEach控制器参数设置
  2. 用户定义的变量书写格式(前缀+_+数字)

交替控制器

作用

交替控制,该控制器包含的所有取样器,步骤交错执行在每个循环中;

操作步骤分析
  1. 测试计划->线程组
  2. 线程组->HTTP请求(查询学院-所有)
  3. 线程组->交替控制器
  4. 交替控制器->HTTP请求(查询学院-指定)
  5. 交替控制器->HTTP请求(查询学院-id_list)

循环控制器

作用

指定循环控制器内取样器的执行次数

操作步骤分析
  1. 测试计划->线程组
  2. 线程组->循环控制器
  3. 循环控制器->HTTP请求(查询学院-所有)
  4. 测试计划->察看结果树

仅一次控制器

作用

该控制器下取样器只执行1次;

操作分析
  1. 循环控制器->仅一次控制器
  2. 仅一次控制器->HTTP请求

随机控制器

作用

随机执行其下的所某个请求

操作步骤
  1. 测试计划->线程组
  2. 线程组->逻辑控制器->随机控制器
  3. 随机控制器->HTTP请求(查询学院-所有)
  4. 随机控制器->HTTP请求(查询学院-指定)
  5. 随机控制器->HTTP请求(查询学院-条件)
  6. 测试计划->察看结果树

随机顺序控制器

作用

对控制器下所有采样器,随机产生1个执行顺序,进行执行

操作步骤
  1. 测试计划->线程组
  2. 线程组->逻辑控制器->随机顺序控制器
  3. 随机控制器->HTTP请求(查询学院-所有)
  4. 随机控制器->HTTP请求(查询学院-指定)
  5. 随机控制器->HTTP请求(查询学院-条件)
  6. 测试计划->察看结果树

While Controller

作用

循环执行控制器内所有采样器,直到条件为假时,停止循环

操作步骤
  1. 测试计划->线程组
  2. 线程组->逻辑控制器->While Controller
  3. 随机控制器->HTTP请求(查询学院-所有)
  4. 随机控制器->HTTP请求(查询学院-指定)
  5. 随机控制器->HTTP请求(查询学院-条件)
  6. 测试计划->察看结果树

Switch Controller控制器

作用

通过给该控制器中的value赋值,来指定运行哪个取样器;

操作步骤
  1. 测试计划->线程组
  2. 线程组->逻辑控制器->Switch Controller
  3. 随机控制器->HTTP请求(查询学院-所有)
  4. 随机控制器->HTTP请求(查询学院-指定)
  5. 随机控制器->HTTP请求(查询学院-条件)
  6. 测试计划->察看结果树

常用(分组类)

  1. 简单控制器
  2. 事务控制器

简单控制器

作用

只做分组使用,犹如打隔断;

事务控制器

作用

生成一个额外的采样器来测量其下测试元素的总体时间;值得注意的是,这个时间包含该控制器范围内的所有处理时间,而不仅仅是采样器的;

操作步骤分析

  1. 测试计划->线程组
  2. 线程组->逻辑控制器->事务控制器
  3. 事务控制器->HTPP请求(查询所有、查询指定)
  4. 测试计划->监听器->聚合报告

图形监视器扩展插件下载及使用

问题

  1. Jmeter工具打开监听器,没有监控服务器资源的组件
  2. 服务器也没有启动被监听资源的服务程序

图形监视器扩展插件有什么用?

作用:提供客户端与服务器交互时各种图形报告

解决方案分析

  1. 服务器:下载服务器端监听服务程序(ServerAgent-2.2.1)
  2. 客户端:下载标准扩展插件(JMeterPlugins-Standard-1.4.0.zip)
  3. 启动服务器监听器程序(ServerAgent-2.2.1.zip)
  4. 客户端加载监听服务器组件图表(jp@gc - PerfMon Metrics Collector)

插件下载

客户端

下载

标准插件下载地址:https://jmeter-plugins.org/downloads/old/

使用
  1. 解压文件后,复制JMeterPlugins-Standard.jar文件
  2. 将JMeterPlugins-Standard.jar粘贴到Jmeter的Lib目录下面的ext目录
  3. 重启Jmeter

服务器

下载

性能监控插件下载地址:https://jmeter-plugins.org/wiki/PerfMonAgent/

使用

解压到服务器任意目录 运行: 1) Windows启动startAgent.bat 2) Linux启动startAgent.sh