软件测试--性能测试工具JMeter
主流性能测试工具
1.主流性能测试工具Loadrunner和Jmeter对比 —— 相同点
- 都能模拟大量用户
- 都能支持多协议(常见的协议都支持,如:HTTP)
- 都有监控及分析报表功能
2.主流性能测试工具Loadrunner和Jmeter对比 —— 不同点
结论:项目日常性能测试Jmeter足够用,出商业报告优先Loadrunner
JMeter基本使用
JMeter环境搭建
1.安装JDK:
• 下载JDK – 安装JDK – 配置环境变量 – 验证
.
2.安装Jmeter:
• 下载Jmeter – 安装Jmeter – 配置环境变量 – 启动验证
3.注意点:
• 下载JDK时,注意电脑操作系统是32位/64位
• 下载Jmeter时,注意与本机安装的JDK版本匹配
• 安装Jmeter时,安装路径中不能有中文/空格
JMeter功能概要
1. JMeter文件目录介绍
1.1 bin目录
存放可执行文件和配置文件
1.2 docs目录
docs:是JMeter的api文档,用于开发扩展组件,可打开api/index.html页面来查看
1.3 printable_docs目录
- printable_docs的usermanual子目录下的内容是JMeter的用户手册文档
- usermanual下component_reference.html是最常用到的核心元件帮助文档。
提示:printable_docs的demos子目录下有一些常用的JMeter脚本案例,可以作为参考
1.4 lib目录
该目录用来存放JMeter依赖的jar包和用户扩展所依赖的jar包。
2. 修改默认配置
2.1 汉化配置
实现JMeter界面的汉化包含两种方式:
- 临时性
- 永久性
- 临时性: 启动JMeter->选择菜单‘Options’->Choose Language->Chinese (Simplified)
- 永久性:
- 找到jmeter安装目录下的bin目录,
- 打开jmeter.properties文件,把第39行修改为“language=zh_CN”,
- 重启JMeter即可
2.2 修改主题
JMeter默认主题是黑色的,可以通过以下步骤修改:
启动JMeter -> 选择菜单‘选项’ -> 外观 -> Windows(选择自己喜欢的主题即可)
JMeter元件作用域和执行顺序
1. 元件的基本介绍
元件:多个类似功能组件的容器(类似于类)。
组件:实现独立的某个功能(类似于方法)
- 例如:取样器的组件
2. 元件作用域
在JMeter中,元件的作用域是靠测试计划的树形结构中元件的父子关系来确定的。 提示:
核心是取样器,其他组件都是以取样器为核心运行的,组件添加的位置不同,生效的取样器也不同。
作用域的原则:
- 取样器:元件不和其他元件相互作用,因此不存在作用域的问题;
- 逻辑控制器:元件只对其子节点中的取样器和逻辑控制器作用;
- 其他六大元件:
- 除取样器和逻辑控制器元件外,如果是某个取样器的子节点,则该元件对其父子节点起作用;
- 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等);
3. 元件执行顺序
同一个作用域下不同类型元件:
- 配置元件(config elements)
- 前置处理程序(Per-processors)
- 定时器(timers)
- 取样器(Sampler)
- 后置处理程序(Post-processors)
- 断言(Assertions)
- 监听器(Listeners)
同一个作用域下多个相同类型元件:
• 按照在测试计划中从上到下的顺序依次执行
JMeter使用示例
1. JMeter第一个案例
需求:使用JMeter访问百度首页接口,并查看请求和响应信息
步骤:
- 启动JMeter
- 在‘测试计划’下添加‘线程组’
- 在‘线程组’下添加‘HTTP请求’取样器
- 填写‘HTTP请求’的相关请求数据
- 在‘线程组’下添加‘察看结果树’监听器
- 点击‘启动’按钮运行,并查看结果
2. 重点组件
- 线程组
- HTTP取样器
- 察看结果树
2.1 线程组
定义:线程组是控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户。
位置:右键点击‘测试计划’ --> 添加 --> 线程(用户) --> 线程组
特点:
• 模拟多人操作
• 线程组可以添加多个,多个线程组可以并行或串行
• 取样器(请求)和逻辑控制器必须依赖线程组才能使用
• 线程组下可以添加其他元件下组件
线程组分类
- 线程组
普通的、常用的线程组,可以看做一个虚拟用户组,线程组中的每一个线程都可以理解为一个虚拟用户 - setUp线程组 (前置处理,初始化)
一种特殊类型的线程组,可用于执行预测试操作 - tearDown线程组(后置处理,环境恢复等)
一种特殊类型的线程组,可用于执行测试后工作
线程组的属性
- 参数介绍:
- 案例分析:
编写JMeter脚本,访问百度
要求:
• 模拟10个用户并行执行:
• 模拟10个用户5s内启动完成:
• 模拟2个用户各循环3次:
• 模拟2个用户运行30s:
• 模拟2个用户等待10s后开始执行
使用1个线程组,添加HTTP请求(百度)
- 配置线程数为2,循环次数为3时,运行观察结果
- 配置线程数为3,循环次数为2时,运行观察结果,对比是否有不同
相同点:从请求数量来说,是完全相同的
不同点:场景不同
- 线程数:代表用户数,即性能测试时的负载量(线程数为2比线程数为3对应的负载量小)
- 循环次数:代表时间,即性能测试时的运行时间(循环次数3比循环次数2对应的时间长)
2.2 HTTP请求:
作用:向服务器发送http及https请求
位置:选中线程组->右键->添加->取样器->HTTP请求
参数:
2.3 查看结果树
作用:查看HTTP请求的请求和响应结果
位置:选中测试计划/线程组->右键->添加->监听器->察看结果树
组成:
• 取样结果:查看响应信息头信息、响应状态码
• 请求:查看请求相关信息(url、方法、参数)
• 响应:查看响应信息
结果出现乱码:
解决方法:
- 找到jMeter安装目录下的bin目录
- 打开jmeter.properties文件 , 修改配置sampleresult.default.encoding=UTF-8
- 重启JMeter即可
Jmeter参数化(重点)
为什么要使用参数化?
1. JMeter参数化常用方式
参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法。
JMeter中常见的参数化方式:
- 用户定义的变量
- 用户参数
- CSV Data Set Config
- 函数
2. 用户定义的变量
作用:定义全局变量
添加方式:测试计划 --> 线程组–> 配置元件 --> 用户定义的变量
2.1 场景
- 请求:https://www.baidu.com:443
- 要求:使用用户定义的变量配置被测系统的协议、域名和端口
2.2 操作步骤
- 添加线程组
- 添加用户定义的变量
- 添加HTTP请求
- 添加查看结果树
用户定义的变量
HTTP请求设置
3. 用户参数
为什么要使用用户参数?
作用:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
添加方式:测试计划 --> 线程组–> 前置处理器 --> 用户参数
3.1 场景
请求:https://www.baidu.com
要求:第一次请求附带参数:name=“张三”&