一、Jmeter环境搭建与配置

1、Jmeter环境搭建

安装JDK:https://www.oracle.com/cn/java/technologies/downloads/

安装Jmeter:https://jmeter.apache.org/download_jmeter.cgi

注意:下载JDK,注意电脑操作系统及位数;Jmeter版本要与JDK版本匹配;Jmeter安装路径不能有中文或空格

2、Jmeter基本配置

(1)Jmeter界面汉化

永久性:修改bin目录下的配置文件jmeter.properties,“language=zh_CN”,重启Jmeter即可

临时性:菜单“Options”->Choose Language->Chinese(Simplified)

(2)Jmeter主题修改

菜单“选项”->外观(选择自己喜欢的主题)

(3)响应结果中文不会乱码

打开bin目录下的配置文件jmeter.properties,修改“sampleresult.default.encoding=UTF-8”,重启Jmeter即可


二、Jmeter主要元件及相关的作用域

  • 取样器:调用方法发送请求
  • 逻辑控制器:控制取样器的执行顺序(要与取样器配合使用)
  • 前置处理器:对请求参数进行赋值
  • 后置处理器:提取响应中特定字段的值
  • 断言:对提取出来的值与预期结果进行对比
  • 定时器:模拟真实的业务场景
  • 配置元件:初始化测试数据
  • 监听器:在控制台查看脚本运行的结果

元件:多个类似功能组件的容器(类似于类)

元组:容器中实现独立的某个功能(类似于方法)

1、作用域的原则

  • 取样器:核心,没有作用域
  • 逻辑控制器:只对其子节点中的取样器和逻辑控制器起作用
  • 其他元件:
    • 如果是某个取样器的子节点,则该元件只对其父节点起作用
    • 如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

2、元件的执行顺序

在同一个作用域(目录/级别/缩进)的不同元件的执行顺序:

  • 配置元件 - 前置处理程序 - 定时器 - 取样器 - 后置处理程序 - 断言 - 监听器

在同一个作用域(目录/级别/缩进)的相同元件的执行顺序:

  • 从上到下的顺序依次执行

案例:

执行顺序:定时器1 - 请求1 - 定时器1 - 定时器2 - 请求2 - 定时器1 - 定时器3 - 请求3


三、Jmeter线程组、HTTP请求、查看结果树的配置使用

1、线程组

介绍:控制Jmeter用于执行测试的一组用户

分类:

  • setUp线程组:预测试操作,所有脚本之前执行
  • 普通线程组:执行测试用例,可以有1个或多个(并行/串行)
  • tearDown线程组:测试后操作,所有脚本之后执行

参数:

2、HTTP请求

作用:向服务器发送http及https请求

位置:选中线程组->右键->添加->取样器->HTTP请求

参数:

3、查看结果树

查看请求参数:Request Body(请求行+请求体)

查看响应结果:Response Body(响应体)


四、Jmeter参数化

1、定义:使用不同的测试数据,调用相同的测试方法进行测试

2、本质:实现测试数据与测试方法的分离

3、实现方式

  • 用户定义的变量——全局变量
  • 用户参数——为每个用户分配不同的参数值
  • CSV数据文件设置——文件方式参数化
  • 函数——随机数据
  • 数据库

(1)用户定义的变量

使用场景:定义全局变量

使用步骤:

  1. 添加线程组
  2. 添加用户定义的变量。格式:变量名 - 变量值
  3. 添加HTTP请求,引用定义的变量名。格式:${变量名}
  4. 查看结果树

(2)用户参数

使用场景:针对同一组参数,当不同的用户来访问时,可以获取到不同的值

使用步骤:

  1. 添加线程组,设置线程数为n(表示模拟的用户数)
  2. 添加用户参数
    1. 第一列添加多个变量名
    2. 后续每一列为一组用户的数据
  3. 添加HTTP请求,引用定义的变量名。格式:${变量名}
  4. 添加查看结果树

(3)CSV文件设置

使用场景:当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值

使用步骤:

  1. 定义CSV数据文件
  2. 添加线程组
  3. 添加CSV数据文件设置
  4. 添加HTTP请求,引用定义的变量名。格式:${变量名}
  5. 添加查看结果树

(4)函数(以__counter函数为例)

使用场景:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义

使用步骤:

  1. 添加线程组,设置虚拟用户数和循环次数
  2. 生成__counter函数
  3. 添加HTTP请求,使用__counter函数。格式:${__counter(FALSE,)}
  4. 添加查看结果树

(5)4种参数化方式对比

用户定义的变量:

  • 作用:定义全局变量
  • 局限性:每次取值(无论是否相同的用户)都是固定值

用户参数:

  • 作用:保证不同的用户针对同一组参数,可以取到不同的值
  • 局限性:同一个用户在多次循环时,取到相同的值

CSV数据文件设置:

  • 作用:保证不同的用户及同一个用户多次循环时,都可以取到不同的值
  • 局限性:需要手动进行测试数据的设置

函数:

  • 作用:保证不同的用户及多次循环时,都可以取到不同的值,不需要提前设置
  • 局限性:输入数据有特定的业务要求时无法使用(如:登录时的用户名和密码)

五、Jmeter断言

1、定义:让程序自动判断预期结果和实际结果是否一致

2、提示:Jmeter在请求的返回层面有个自动判断机制(响应状态码),但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试的准确性

3、常用断言方法

  • 响应断言
  • JSON断言
  • 持续时间断言

(1)响应断言

  • 响应文本:来自服务器的响应文本,即主体
  • 响应代码:响应的状态码,例如:200
  • 响应信息:响应的信息,例如:OK
  • 响应头:响应头信息
  • 请求头:请求头信息
  • URL样本:请求URL
  • 文档(文本):响应的整个文档
  • 忽略状态:忽略返回的响应状态码
  • 包括:文本包含指定的正则表达式
  • 匹配:整个文本匹配指定的正则表达式
  • 相等:整个返回结果的文本等于指定的字符串(区分大小写)
  • 字符串:返回结果的文本包含指定的字符串(区分大小写)
  • 否:取反
  • 或者:如果存在多个测试模式,勾选代表逻辑或,不勾选代表逻辑与
  • 测试模式:即填写你指定的结果(可填写多个)

(2)JSON断言

使用场景:对HTTP请求的响应结果为JSON格式时,可以使用JSON断言

使用步骤:添加线程组->添加HTTP请求->添加JSON断言配置参数->添加查看结果树查看断言结果

  • Assert JSON Path exists:用于断言的JSON元素的路径(实际结果)
  • Additionally assert value:如果您想要用某个值生成断言,请选择复选框
  • Match as regular expression:使用正则表达式断言
  • Expected Value: 期望值(期望结果)
  • Expect null:如果希望为空,请选择复选框
  • Invert assertion (will fail if above conditionsmet):反转断言(如果满足以上条件则失败)

(3)断言持续时间

作用:检查HTTP请求的响应时间是否超出要求范围

使用步骤:添加线程组->添加HTTP请求->添加断言持续时间设置持续时间->添加查看结果树


六、Jmeter关联

1、定义:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理

2、常用的关联方法

  • 正则表达式提取器
  • XPath提取器
  • JSON提取器
  • JMeter属性

(1)正则表达式提取器

使用场景:任意格式的响应数据,都可以使用正则表达式提取器进行提取

使用步骤:

  1. 添加线程组
  2. 添加HTTP请求1
  3. 在后置处理器添加正则表达式提取器设置参数
  4. 添加HTTP请求2,引用正则表达式中的引用名称。如:用${title}引用它
  5. 添加查看结果树

正则表达式:就是一个公式,或者一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容

公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容

.:是通配符,可以代表任意字符(除换行回车)

*: 代表前面的字符出现0次或者多次

.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来

?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界

公式格式:左边界(.*?)右边界

<title>百度一下,你就知道</title>

<title>(.*?)</title>

(2)xpath提取器

使用场景:针对HTML格式的响应结果数据进行提取

使用步骤:

  1. 添加线程组
  2. 添加HTTP请求1
  3. 在后置处理器中选择添加xpath提取器设置参数
  4. 添加HTTP请求2,引用正则表达式中的引用名称。如:用${title}引用它
  5. 添加查看结果树

  • Use Tidy (tolerant parser):当需要处理的页面是HTML格式时,必须选中该选项;当需要处理的页面是XML或XHTML格式时,取消选中该选项
  • 引用名称:存放提取出的值的参数名称
  • XPath Query:用于提取值的XPath表达式
  • 匹配数字:如果XPath路径查询出许多结果,则可以选择提取哪个
    • 0:表示随机,-1:表示提取所有结果,1表示第一个值
  • 缺省值:参数的默认值

(3)JSON提取器

使用场景:针对JSON格式的响应数据进行提取

使用步骤:

  1. 添加线程组
  2. 添加HTTP请求1
  3. 在后置处理器中选择添加JSON提取器设置参数
  4. 添加HTTP请求2,引用正则表达式中的引用名称。如:用${title}引用它
  5. 添加查看结果树

  • Names of created variables:存放提取出的值的参数名称。如:cit
  • JSON Path expressions:用于提取值的JSON路径表达式
  • Match No:0表示随机;-1表示提取的所有结果,1表示第一个值
  • Default Values:参数的默认值

(4)JMeter属性

使用场景:在不同的线程组之间传递参数

使用步骤:

  1. 添加线程组1
  2. 添加HTTP请求1
  3. 添加提取器(JSON、Xpath、正则表达式)
  4. 添加BeanShell取样器(将取样器提取的值保存为JMeter属性)
    1. 保存JMeter属性:${__setProperty(变量名,${提取器提取出值的变量},)}
  5. 添加线程组2
  6. 添加HTTP请求2(读取JMeter属性)
    1. 读取JMeter属性:${__property(变量名,,)}
  7. 添加查看结果树

注意:__setProperty函数执行(JMeter属性):需要通过BeanShell取样器来执行


七、Jmeter自动录制脚本

1、定义:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本

2、原理:录制时,JMeter作为代理服务器来拦截和转发请求与响应数据

3、jmeter脚本录制步骤

(1)添加HTTP代理服务器,并进行配置(在非测试元件中)

(2)开启windows操作系统的浏览器代理

(3)启动代理服务器,开始录制

(4)在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取的接口请求了

当使用代理的过程中,发现抓不到包,可能发生以下情况:

  • 过滤规则设置有问题
  • 重启Jmeter代理服务器或者重启Jmeter
  • 换浏览器来使用(Chrome、IE)
  • 检查PC机中的代理设置是否处于可用状态
  • 拔掉网线,抓包

八、Jmeter连接数据库

1、直连数据库的作用

  • 用作请求的参数化。例如:登录时需要的用户名可以从数据库中查询获取
  • 用作结果的断言。例如:添加购物车下单时,检查接口返回的订单号,是否与数据库中生成的订单号一致
  • 清理垃圾数据。例如:添加商品(商品名/编号等不能重复),再执行该脚本不能成功,需要在下次执行前删除该商品数据
  • 准备测试数据。例如:通过数据库来准备大量的性能测试数据

2、直连数据库的步骤

(1)添加Mysql驱动jar包

(2)配置数据库连接信息

添加方法:测试计划->线程组->配置元件->JDBC Connection Configuration

(3)添加JDBC请求

添加方法:测试计划->线程组->取样器->JDBC Request

(4)使用SQL语句返回结果的变量名替代原有的固定数据


九、Jmeter常用逻辑控制器

1、如果(if)控制器

作用:if控制器用来控制它下面的测试元素是否运行

位置:测试计划->线程组->逻辑控制器->IF控制器

2、循环控制器

作用:控制下面的测试元素循环执行一次或多次

位置:测试计划->线程组->逻辑控制器->循环控制器

注意:线程组也可以控制循环次数,但是与循环控制器的作用范围不同。线程组的循环对线程组下的所有HTTP请求有效,而循环控制器对子节点下的HTTP请求有效

3、ForEach控制器

作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值。该控制器下的所有取样器都会被执行一次或多次,每次读取不同的变量值

位置:测试计划->线程组->逻辑控制器->ForEach控制器

例如:

那么后续的请求使用${kw}时就会依次赋值1、2、3


十、Jmeter常用定时器

1、同步定时器

定义:阻塞线程(积累一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力

位置:测试计划->线程组->添加定时器->Synchronizing Timer

  • 模拟用户组的数量:模拟用户的数量,即指定同时释放的线程数数量。若设置为0,等于设置为线程组中的线程数量
  • 超时时间以毫秒为单位:超时时间,即超时多少毫秒后同时释放指定的线程数;如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。如果大于0,那么如果超过设置的最大等待时间后还没有达到设置的线程数,就不再等待直接释放已到达的线程。默认为0

超时时间建议设置,不然会一直死等;也不能设置太小,不然没有达到指定的线程数就释放

2、常数吞吐量定时器

定义:模拟用户真实的使用场景,让Jmeter按指定的吞吐量执行,以每分钟为单位

位置:测试计划->线程组->添加定时器->Constant Throughput Timer

  • 目标吞吐量:每个用户每分钟发送的请求数

案例:

—模拟用户真实的业务场景要求:20 QPS(每秒的请求数)

—如果线程数设置为1,则目标吞吐量设置为 20 * 60 = 1200

—如果线程数设置为2,则目标吞吐量设置为 20 * 60 / 2 = 600

3、固定定时器

定义:指定线程等待的时间(以毫秒为单位)

位置:测试计划->线程组->添加定时器->固定定时器


十一、Jmeter分布式测试

1、应用场景:在使用Jmeter进行性能测试时,如果并发数比较大(比如项目需要支持10000并发),单台电脑的(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能

2、原理:

  • 分布式测试时分为一台控制机(Master)和多台代理机(Slaves)
  • 控制机负责发送测试任务给代理机
  • 代理机接收任务并向服务器发送请求,并接收服务器返回的响应,将测试结果返回给控制机
  • 由控制机对测试结果数据进行汇总统计

3、注意事项

  • 所有的测试机防火墙都已经关闭
  • 所有的测试机及服务器在同一个网络内
  • 所有的测试机Jmeter版本和JDK版本完全相同
  • 关闭Jmeter里的RMI SSL开关

4、分布式测试步骤

(1)代理机配置

  • 代理机上需要安装Jmeter
  • 修改服务端口。注意:非必要,如果是在同一台机器上演示需要使用不同的端口,多台机器可以不修改
  • 打开bin/jmeter.properties文件,修改‘server_port’,比如:‘‘server_port=2001’
  • 运行代理机上的jmeter-server.bat文件,启动Jmeter

注:代理机可以是自己电脑上安装有多个Jmeter,也可以是其他电脑上的Jmeter

(2)控制器配置

  • 修改Jmeter的bin目录下jmeter.properties配置文件,修改‘remote_hosts’

    • 示例:‘remote_hosts=192.168.182.100:1099,192.168.182.200:2099’
    • IP和Port是代理机的IP以及自定义的端口,多台代理机之间用“,”隔开
  • 启动Jmeter
  • 选择菜单:运行 - - > 远程启动/远程全部启动

十二、Jmeter生成图形化报告

1、应用场景:在Jmeter中可以以图形化(饼状图、柱状图...)的方式显示脚本运行结果,比聚合报告或查看结果树组件实现更直观,用户体验更好

2、使用方法

命令:jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录-n 无图形化运行
-t 被运行的脚本
-l 将运行信息写入日志文件
-e 生成测试报告
-o 指定报告输出目录

注意:

1、脚本文件必须指定目录或者将脚本文件放置在jmeter的bin目录下

2、日志文件和目录可以不填写,默认在当前目录;如填写必须保证文件和目录为空

3、实例

【详细】Jmeter的安装配置与基本操作相关推荐

  1. 【多图超详细】从零开始安装配置Cuckoo sandbox并提交样本进行分析

    [多图超详细]从零开始安装配置Cuckoo sandbox并提交样本进行分析 文章目录 [多图超详细]从零开始安装配置Cuckoo sandbox并提交样本进行分析 1. 功能介绍 1.1主要功能 1 ...

  2. redis cli 删除key 模糊_Web基础配置篇(六): Redis的安装配置及基本操作

    Web基础配置篇(六): Redis的安装配置及基本操作 一.概述 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的A ...

  3. 【Jmeter】安装配置:Jmeter 安装插件 Redis Data Set

    目录 一.插件安装 二.插件作用 一.插件安装 使用插件管理器进行安装插件:Redis Data Set [Jmeter]安装配置:Jmeter 安装插件管理器 Plugins Manager

  4. @Redis(redis简介,下载与安装配置,基本操作)

    title: Redis author: Xoni tags: Redis categories: java学习 Redis abbrlink: bae4ff13 Redis基础 1. Redis 简 ...

  5. Jmeter最新安装配置

    Jmeter安装配置 1.安装jdk 2.配置环境变量 3.安装jmeter 4.配置环境变量 5.jmeter修改语言 1.安装jdk 官网:https://www.oracle.com/java/ ...

  6. 超详细Ubuntu Linux安装配置 Tomcat

    Ubuntu 安装配置Tomcat 1. 开始之前 2. 安装 Java 2.1 查找 2.2 安装 2.3 验证 3. 安装 Tomcat 3.1 获取Tomcat 3.2 解压Tomcat 3.3 ...

  7. nginx详细文档 – 安装配置,深入源码,模块编写,编译器参数,系统函数

    nginx文档 吴东 April 28, 2009 Contents 1前言 5 2基本配置 7 2.1安装------- 7 2.2配置说明------. 10 2.3启动和控制------ 25 ...

  8. Jmeter下载安装配置

    一.下载 http://jmeter.apache.org/download_jmeter.cgi 二.安装 先把下载的包解压缩,然后放在合适的位置.(需要对应的jdk安装) 三.配置环境变量 1. ...

  9. MySQL数据库安装配置与基本操作

    目录 一.MySQL数据库安装 1.MySql数据库下载和安装参考 2.MySql安装完成后,环境配置 3.MySQL服务器的启动和关闭 二.MySQL常用操作命令 三.MySQL数据库学习教程 一. ...

最新文章

  1. python详细下载安装教程-Python下载并安装图形教程[超级详细]
  2. java 基础学习——基本语法(三)
  3. ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
  4. rtk采点后如何导入cad_【干货】RTK实操视频:工程之星5.0操作攻略!(第五部分)...
  5. php redis 投票_高可用Redis服务架构分析与搭建
  6. opencv python 高斯滤波_Python OpenCV实验(3):实现图像的高斯滤波处理
  7. ISO 7064:1983.MOD11-2校验码计算法(身份证18位效验码计算)
  8. 最新web打印控件 破解版 下载地址
  9. SSM高校实验室安全培训系统设计与实现.docx
  10. php写猴子搬香蕉问题,世界500强企业面试题:猴子吃香蕉
  11. 记录在Eclipse中连接JDBC数据库的功能,并且实现增删改查
  12. Excel最强玩法!用Excel做“动态日历表”,让你的好记性更牢固!
  13. golang的优劣与前景分析
  14. Javascript 实现汉字简繁体互相转换
  15. python复制上一行到下一行_eclipse复制当前行到下一行-eclipse复制-eclipse复制一行快捷键...
  16. qq空间上传html代码,100分!如何在博客或msn、qq空间里面添加html代码?
  17. 【安卓】设置应用的开机启动
  18. 股软分析系统源代码,股软开发,行情写库程序
  19. python安装模块(官网文档)
  20. 【计算机基础】多媒体技术、网页制作、计算机网络

热门文章

  1. github上7个霸榜的Python资源库
  2. Eclipse设置类和方法的注释模板
  3. 为什么云服务器淘汰了传统服务器?
  4. 算法刷题记录(Day 16)
  5. mysql连接提示Host 'XXX' is not allowed to connect to this MySql server
  6. 综合模拟试题计算机指南,综合全国计算机试文管二级模拟试题.doc
  7. WIN7 x64系统下TortoiseSVN文件夹及文件图标不显示解决方法
  8. mysql 数据库军规_MySQL 数据库开发的33 条军规-阿里云开发者社区
  9. 静态方法中注入bean对象
  10. 基于Echarts的桑葚图组件