Jmeter介绍及参数化使用

概念

Jmeter:是Apche公司使用Java平台开发的一款测试工具。

 作用:
1. 接口测试  
2. 性能测试  
3. 压力测试  
4. Web自动化测试  
5. 数据库测试  
6. JAVA程序测试
1. 开源、免费 
2. 支持多协议 
3. 小巧 
4. 功能强大

  缺点:

 

  1. 不支持IP欺骗
  2. 使用JMeter无法验证JS程序,也无法验证页面UI,所以要须要和Selenium配合来完成Web2.0应用的测试

 

 

JMeter的主界面布局分为标题栏、菜单栏、工具栏、树形标签栏和内容栏

JMeter使用

1. 添加【**测试计划**】
2. 基于添加的测试计划添加【**线程组**】,循环次数设置为100次
3. 在【取样器】中基于线程组添加**HTTP请求**  
4. 在【监听器】基于线程组添加【察看结果树】  
5. 在监听器基于线程组添加【聚合报告】 

JMeter功能概要

 

 

独立运行每个线程组:

  • 进程:是每个正在运行的应用程序。
    线程:按照进程的指令去执行指定的代码。
    线程组(多线程):多个线程的组合。
    线程组(多线程)的执行顺序是并行的。 
    
    勾选:让本次测试计划中所有线程组保持从上到下顺序执行

 Add directory or jar to classpath:

加载第三方jar包;比如:测试数据库时使用,加载数据库驱动jar包。

Threads(User)线程组 【重点】

 1) thread group(线程组)
 2) setup thread group【特殊线程组】  
 3) teardown thread group【特殊线程组】

  (1) thread group(线程组)

 

  作用:1. 添加测试中使用的大多数组件

  线程属性:

  - 线程数:虚拟用户数
  - Ramp-Up Period(in serconds):启动虚拟全部用户数所需要的时间
  - 循环次数 :指定次数或勾线永远
  - 调度器:勾选后,调度器配置才能使用;

  调度器配置

  - 持续时间(秒):设置脚本压测持续时间

  - 启动延迟(秒):启动延迟时间

  (2)案例

 

1. 通过thread group、setup thread group、teardown thread group 三个线程组去访问
     去访问查询所有学院接口

 


   需要组件:

1. 基于测试计划添加【线程组】

2. 基于线程组添加【HTTP请求】

3. 基于测试计划添加【setup thread group】线程组

4. 基于setup thread group添加HTTP请求

5. 基于测试计划添加【teardown thread group】线程组

6. 基于teardown thread group添加HTTP请求

7. 基于测试计划添加【察看结果树】  

(3)HTTP请求

 

 作用:

 1. 模拟前端或第三方软件向服务器发送请求;
    2. 设置请求时的方法和参数数据;

详细参数
 1. 名称:本属性用于标识一个取样器,建议使用一个有意义的名称。
  2. 服务器名称或IP :HTTP请求发送的目标服务器名称或IP地址。
  3. 端口号:目标服务器的端口号,默认值为80 。
  4. 协议:向目标服务器发送HTTP请求时的协议,可以是http或者是https ,默认值为http 。
  5. 方法:发送HTTP请求的方法,可用方法包括GET、POST、PUT、DELETE。
  6. Content encoding :内容的编码方式,默认值为iso8859;一般设置【UTF-8】
  7. 路径:目标URL路径(不包括服务器地址和端口)
  8. 同请求一起发送参数:请求时需要传递参数,如:学院资源list查询
         http://127.0.0.1:8000/api/departments/?$dep_id_list=T01,T02,T03
         参数名称:【$dep_id_list】
         参数值:T01,T02,T03
 
Body Data选项作用:
1.新增或更新时需要传递JSON报文;
2. 【注意】:新增和更新时传入报文也需要设置Content-Type:application/json   
告诉服务器我传的数据格式为JSON格式;  
设置地点:配置元件-->HTTP信息头管理器

HTTP请求总结:

1. 接口完整请求地址
2. JSON报文存放地址
3. 设置默认请求数据格式

线程组总结:

setup thread group:一种特殊线程组,测试计划运行之前首先执行,一般做初始化操作  
teardown thread group:一种特殊线程组,测试计划运行结束时运行,一般做收尾工作   
thread group(线程组) :线程组,我们测试计划中场景创建和实现都是基于此线程组
 

元件

概念:相同类似功能组件的集合称之为元件   
  1. 逻辑控制器  
   2. 配置元件  
   3. 定时器  
   4. 前置处理器  
   5. Sampler  
   6. 后置处理器  
   7. 断言  
   8. 监听器

1. 配置元件(config Element)

1) CSV Data Set Config
2) HTTP请求默认值
3) HTTP信息头管理器    

2. 前置处理器(Per Processors)

1) 用户参数 

3. 定时器(Timer)

1) Synchronizing Timer 

4. 取样器(sample)

1) HTTP请求
2) JDBC Request 
3) Debug Sampler

5. 后置处理器(Post Processors)

1) 正则表达式提取器 
2) XPath Extractor

6. 断言(Assertions)

1) 响应断言 

6. 监听器(Listener)

1) 察看结果树
2) 聚合报告 
3) 断言结果 

8. 逻辑控制器

1) 如果(If)控制器 
2) ForEach控制器   
3) 循环控制器   
 

Jmeter 参数化

在Jmeter中参数化常用方式:

  • CSV Data Set Config
  • 用户参数
  • 用户定义的变量
  • 函数

1. CSV Data Set Config(数据集配置)

概念:一种从外部读取数据功能的组件 

  实施方案分析

  1. 基于测试计划->线程组
  2. 基于线程组->配置元件->CSV Data Set Config
  3. 基于线程组->Sampler->HTTP请求
  4. 基于测试计划->HTTP信息头管理器
  5. 基于测试计划->监听器->察看结果树   

  组件要点分析

  1. 线程组:循环次数10
  2. CSV Data Set Config 读取变量配置
  3. HTTP请求:Body Data填写(JSON报文) 方法(POST)
  4. 参数化引用格式:${参数名} 如:${dep_id}
  5. HTTP信息头管理器:Content-Type:application/json;charset=utf-8
1. Filename:文件路径+文件名+后缀名    如:d:/a.txt;
2. File Encoding:文件编译字符编码,一般设置utf-8;
3. Vaiable Names:读取参数后保存的变量名称;
4. Delimiter:如文件中使用的是逗号分隔,则填写逗号;如使用的是TAB,则填写\t;

2.用户参数

解决方案实施分析

1. 位置:测试计划-->线程组-->前置处理器-->用户参数 
2. 其他组件和CSV Data Set Config实现新增10个学院相同,去除 CSV Data Set Config组件  

组件要点分析

1. 线程组:注意是【线程数】为10
2. 用户参数:学院每个属性为一个参数名称;参数格式:可以是数字、字母、下划线开头,建议最好是实义单词
3. HTTP请求:Body Data填写(JSON报文) 方法(POST)
4. 参数化引用格式:${参数名} 如:${dep_id}
5. HTTP信息头管理器:Content-Type:application/json;charset=utf-8

用户参数 配置参数图 

1. 添加变量:学院资源属性 (dep_id、dep_name、master_name、slogan)
2. 添加用户:每个线程为每一个用户

用户参数-总结:

1. 用户参数位置
2. 线程组设置
3. 引用参数化方式  
4. 用户参数适合满足少量参数化需求场景使用

 

3. 用户定义的变量

用户可根据需求自定义相应的变量,一般做全局变量使用。

分析:     
    1. 通过概念我们知道,【用户定义的变量】一般做全局变量使用,不适合参数需求量大时的选择
    2. 所以在这里我们不在使用,用户定义的变量去做我们学院新增时的解决方案
    3. 主要讲解下它做参数化时的使用步骤和方式

解决方案分析

1. 参数化组件:用户定义的变量 (测试计划->线程组->配置元件->用户定义的变量)
2. 线程组 
3. 请求组件:HTTP请求 
4. 查看结果组件:察看结果树


1. 名称:变量名称(参数化引用时使用) 2. 值:变量的值(通过引用变量名称获取的值) 3. Description:备注说明

用户定义的变量-总结:

1. 一般做设置全局变量
2. 请求时附带少量参数需求使用

4. 函数

完成某个指定功能代码的封装。

1. 函数查找方式:函数助手对话框
       1) 菜单-选项->函数助手对话框
       2) Ctrl+Shift+F1
       3) 工具栏倒数第二个记事本图标
2. 函数在Jmeter中有非常多类型(计数函数、日期函数、随机函数...)

需求:

1. 查询学院-所有:http://127.0.0.1:8000/api/departments/
2. 查询10次,在每次请求地址后面增加访问记录数
    http://127.0.0.1:8000/api/departments/?num=1
    http://127.0.0.1:8000/api/departments/?num=2 

实施方案

1. 基于测试计划添加线程组(循环次数10)
2. 基于线程组添加HTTP请求
3. 基于测试计划添加察看结果树

函数配置图

1. 选择一个功能:选择_counter计数函数

2. 第一个参数:TRUE,每个用户有自己的计数器;FALSE,使用全局计数器 我们选FALSE

3. 点击生成

4. 选择复制生成的函数

使用函数效果图

?num=${__counter(FALSE,)}

1. ?:问号后面一切东东,HTTP请求不做解析
2. num:为我们起的一个计数参数名称
3. ${__counter(FALSE,)}:为我们粘贴进来的函数作为值使用
 

函数总结:

1. 使用方便快捷
2. 经常配合固定参数使用 
 

参数化方式总结

5.1 区别

1. CSV Data Set Config: 功能强大、适应各种迭代及多参复杂场景。
2. 用户参数:适应传递少量参数时使用
3. 用户定义的变量:和用户参数使用场景相似,不同在于一般做全局变量使用
4. 函数:功能强大,函数类型繁多,灵活度大,适应各种应用场景。

HTTP信息头管理器 参数配置图

作用:告诉服务器请求的数据格式   


 

 

 

 
posted @   snailon  阅读(663)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示