| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 测试必备技能之JMeter详解 -> 正文阅读 |
|
[开发测试]测试必备技能之JMeter详解 |
Jmeter环境搭建及元件讲解目录 1.1 Jmeter概述1.1-1 什么是Jmeter Apache JMeter是 Apache 组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP服务器等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言 ? 1.1.2 JMeter的作用和特点 ? ? ?作用:
特点:
1.1.3 Jmeter的工作原理 ? ? ?在客户端通过多线程或多进程模拟虚拟用户访问,对服务器端施加压力,然后在过程中监控和收集性能数据 1.1.4 性能测试工具应该具备的特质
1.1.5 Jmeter与LR的区别 1.2 Jmeter环境搭建1.2-1
?说明:开源软件一般都有两个版本的包,二进制版本和源码版。 Source 是源代码版,你需要自己编译成可执行软件,我们用到不到,故无需下载。?
?1.2-2 环境搭建
? ?? ?配置完环境变量后,需要在cmd中进行验证jdk是否配置成功,打开cmd,输入以下指令,如果返回以下信息说明jdk配置成功: ? 2. 启动Jmeter:Jmeter无需做任何安装配置,配置好jdk之后,Jmeter即可启动,打开Jmeter的二进制包里的jmeter.bat即可启动,如下: 需要注意的是:Jmeter在启动之前,会加载一个文件,等待加载完成无误后Jmeter即可启动。此加载文件不可以关闭。 ? 1.3 Jmeter工具设置?1.3-1 中文设置 修改配置文件,保存后重启Jmeter后即可。 1.3-2 界面字体大小设置 1.3-3 Jmeter插件工具 使用Jmeter的实际过程中,需要使用到一些插件比如json的插件,还有做websocket接口测试的时候需要下载websocket的插件… 下载地址:https://jmeter-plugins.org/地址中,点击 Plugins Manager,下载该插件,该插件名称为:jmeter-plugins-manager-x.xx.jar。下载后,把该文件放到apache-jmeter-5.1\lib\ext目录下,如下图: ?重启JMeter后,可以再GUI上看到插件的图标。点击插件图标可以进行插件的安装和更新,如下: ? 注意:以下三个插件不要安装,可能会影响JMeter的使用: 1.4 Jmeter原件讲解? ? ?JMeter工具和其他性能工具在原理上完全一致,工具包含四个部分:
?1.4-1 测试计划原件(Test Plan) ? ? ? ? ??Test Plan用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就是说本地性能测试的所有内容是基于一个计划的。它是一个根节点,Jmeter脚本执行执行请求的所有组件都在Test Plan下面。 1.4-2 线程(用户)(Threads(user)) ? ? ? ?Threads(User)就是Thread Group线程组,是一组执行相同测试案例操作的用户(线程),简而言之就是JMeter的脚本,等同于LoadRunner的脚本概念。 线程组的创建和其下面的3个不同线程组的作用和概念如下: 虽然有三个添加线程组的选项,名字不一样,创建之后,其界面是完全一样的。如下:
? ? ? ? 重点说明下Ramp-Up Period参数的设置:此参数单位是秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在2秒内启动10个线程,每个线程的时间间隔时间是0.2秒(2/10)”。如果你需要Jmeter立即启动所有线程(同时并发),将此设定为0即可。 ? ? ? ?2. setUp Thread?Group:一种特殊类型的ThreadGroup,可用于执行预测试操作,类似于Loadrunner的init。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。它的参数配置说明同上。 ? ? ? ?3. tearDown Thread Group:一种特殊类型的ThreadGroup,可用于执行测试后动作,类似于lr的end。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。它的参数配置说明同上? 1.4-3 配置原件(Config Element) ? ? ? ?点Test Plan右键—>Add—>Config Element中是配置元件(ConfigElement)用于提供静态数据配置支持。用于配置JMeter的各种参数。 配置元件仅对其所在的测试树分支有效。 ? ? ? ??以下是常用的配置元件的具体讲解: ? ? ? ? ? 1. CSV Data Set Config:用于从文件中读取行,并将它们拆分为变量。它比__CSVRead()和__StringFromFile()函数更容易使用。它非常适合处理大量变量,并且对于使用“随机”和惟一值进行测试也很有用。以下是文件参数释义及具体说明:
? ? ? ?2. HTTP Header Manager:主要用来添加HTTP请求头。JMeter现在支持多个头管理器。合并标题项以形成采样器的列表。如果要合并的条目与现有的标头名称匹配,它将替换以前的条目,除非条目值为空,在这种情况下,任何现有条目都将被删除。这允许你设置默认的标头集,并对特定的采样器应用调整。HTTP信息头管理器在Jmeter的使用过程中起着很重要的作用,通常我们在通过Jmeter向服务器发送HTTP请求(get或者post)的时候,往往后端需要一些验证信息,比如说web服务器需要带过去cookie给服务器进行验证,一般就是放在请求头(Header)中,因为对于此类请求,在Jmeter中就可以通过HTTP信息头管理器,在添加http请求之前,添加一个HTTP信息头管理器,发请求头中的数据通过键值对的形式放到HTTP信息头管理器中。在往后端请求的时候就可以模拟web携带Header信息了。填写信息头的时候,只填写User-Agent或者cookie就可以请求成功了。 请求头的参数数据说明: ?>>? Accept:告诉服务器,客户机支持的数据类型 ?>>? Accept - Encoding:告诉服务器,客户机支持的数据的压缩格式 ?>>? Cache - Control:缓存控制,服务器通过控制浏览器要不要缓存数据 ?>>? Connection:处理完这次请求,是断开连接还是保持连接 ?>>? Cookie:客户机通过这个可以向服务器带数据 ?>>? Host:访问主机名 ?>>? Upgrade - Insecure - Requests:告诉服务器,浏览器可以处理https协议 ?>>? User - Agent:告诉服务器,客户机的软件环境 ? ? ? ? 3.? HTTP cookie Manager:Cookie管理器元素有两个功能,首先,它像web浏览器一样存储和发送cookie。如果您有一个HTTP请求,并且响应包含一个cookie,cookie管理器将自动存储该cookie,并将其用于将来对该特定web站点的所有请求。每个JMeter线程都有自己的“cookie存储区域”。因此,如果正在测试一个使用cookie来存储会话信息的web站点,那么每个JMeter线程都有自己的会话。注意,这些Cookie不会出现在Cookie管理器显示中,但是可以使用查看结果树监听器看到它们。第二,你可以手动向cookie管理器添加cookie。但是,如果这样做,cookie将由所有JMeter线程共享。默认情况下,使用空值(null)的cookie会被忽略。 ? ? ? ? ? ?注意:如果采样器的作用域中有多个Cookie管理器,那么目前无法指定使用哪个Cookie管理器。另外,存储在一个cookie管理器中的cookie对任何其他管理器都不可用,所以要小心使用多个cookie管理器 ? ? ? ? ?4. JDBC Connection Configuration:从提供的JDBC连接设置中创建数据库连接(JDBC Request?Sampler)。连接可以在线程间可选地合用。否则,每个线程都有自己的连接。JDBC采样器使用连接配置名称来选择适当的连接。? ? ? ? ???注意:不同的数据库和JDBC drivers需要不同的JDBC settings。Database URL和JDBC Driver class由JDBC implementation提供者定义。 ? ? ? 5.??User?Defined?Variables:用户定义的变量,会在测试的初始阶段执行(无论它处于测试树的那个位置) 1.4-4 监听器(Listeners) ? ? ? ? ?监听器(Listeners)是一种展示采样结果的测试元件,采样结果可以通过树、表格、图片加以展示,或者简单地写入某个结果文件之中。注:不同的监听器通过不同的方式展示服务器响应信息,但它们都将同样的原始数据记录到某个输出文件中。在我们调试jmeter项目时,需要用到这些结果查看器,在正式进行压测时,需要将这些结果器都禁用了,不然会很容易将jmeter 运行机器的io耗尽导致机器假死。 ?1.4-5 定时器(Timer) ? ? ? ? ?在默认情况下,JMeter发送每个请求之间是没有延时的,如果采用默认方式,如果线程数足够大,瞬间就会将服务器压死。再则在实际的业务过程中,请求之间是有一定时间的停顿的所以在请求之间设置合理的延时是必须的,也是更接近用户真实业务情况。在JMeter中,定时器组件提供了系列不同类型的延时控制。合理使用定时器组件,能让你的性能测试更接近真实,更能挖掘出系统的瓶颈和评估系统的性能指标。定时器是在它作用域内的所有取样器执行之前执行生效。定时器最主要的作用就是用来控制测试场景的吞吐量大小,类似于LoadRunner里面的TPS。? ? ? ? ?这里,需要重点说明下Synchronizing Timer(同步定时器),简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点,每到输入用户名和密码登录时,所有的虚拟用户都相互之间等一等,然后,一起访问。
1.4-6 前置处理器(Pre Pocessors) ? ? ? ?前置处理器,用于对于采集器进行处理,且是在sampler启动之前,此处和后置处理器是有所区别的。 ?1.4-7 后置处理器(Post Pocessors) ? ? ? 后置处理器,用于对于采集器进行处理,和前置处理器相反,是在sampler启动之后。 ?1.4-8 断言(Assertions) ? ? ? ? 断言用于验证被测试对象是否返回了预期的结果.在Jmeter中断言一般针对response,但也可以对request进行断言?
?响应数据的设置如下: 测试字段:针对响应数据不同部分进行匹配
模式匹配规则:
1.5 八类可被执行的软件>>配置元件:用来提供对静态数据配置的支持。例CSV Data Set config可以将本地数据文件形成数据池(Date Pool)。 >>定时器(具有LR的Think_time功能):用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。 >>前置处理器:用于在实际的请求发出之前对即将发出的请求进行特殊处理。例当url中有SessionID一类的信息时,可以通过该处理器填充发出请求实际的SessionID。 >>后置处理器(具有类似于LR中的关联功能):用于对Sampler发出请求后得到的服务器响应数据进行处理,一般用于提取响应中的特定数据。 >>断言(具有类似于LR中的检查点功能):用于检查测试中得到的响应数据是否符合预期。断言一般用来设置检查点,验证测试过程中的数据交互是否与预期一致。 >>监听器(具有类似于LR中的日志功能):用来对测试结果数据进行处理和可视化显示的一系列原件。图形结果、查看结果树、聚合报告等都是比较常用的原件。 >>取样器--Sampler:是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元。每一种不同类型的Sampler可以根据设置的参数向服务器发送不同的请求。 >>逻辑控制器:逻辑控制器的作用域只对其子节点的sampler有效,作用是控制采样器的执行顺序。分为两类元件:一类用于控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,常用的有 如果(If)控制器、Swirch Controller、Runtime Controller、循环控制器等。另一类用来对Test Plan中的脚本进行分组,方便Jmeter统计执行结果以及脚本运行时的控制。如事务控制器、吞吐量控制器等。 1.6 Jmeter元件作用域? ? ? ?元件收集其作用范围的每一个sampler元件的信息并呈现。在jmeter中,元件的作用域是靠测试计划的的树型结构中元件的父子关系来确定的,作用域的原则是:
示例一: 取样器(HTTP请求1?、FTP请求2?、TCP取样器3)逻辑控制器(循环控制器)?监听器(图形结果1、聚合报告2) >> HTTP请求1、FTP请求2、TCP取样器3,元件没有作用域的概念 >>循环控制器 元件的作用域是其子点FTP请求2、TCP取样器3 >>图形结果1 元件的作用域是FTP请求2、TCP取样器3 >>聚合报告2 元件的作用域是HTTP请求1、FTP请求2、TCP取样器3 示例二: 这个例子稍微复杂一些,包含的元件较多。先来分分类。取样器(HTTP请求、FTP请求、TCP取样器、JDBC?Request)逻辑控制器(循环控制器、随即控制器)定时器(固定定时器、Uniform ?Random?Timer)断言(响应断言、XML断言)监听器(图形结果、聚合报告) >>HTTP请求、FTP请求、TCP取样器、JDBC Request元件没有作用域名概念 >>循环控制器的作用域为FTP请求、TCP取样器和随机控制器 >>固定定时器作用于HTTP请求 >>Uniform Random Timer作用于所有取样器 >>响应断言作用于JDBC Request >>XML断言作用于FTP请求、TCP取样和JDBC Request >>图形结果作用于FTP请求、TCP取样和JDBC?Request,聚合报告作用于作用于所有取样器 ?总结:记住一句话,从各个元件的成次结构(父子关系)判断每个元件的作用域 1.7 Jmeter元件的执行顺序
?注意:
新人作者,希望大家多多支持,后续还会写关于Jmeter的文章。感谢观看! |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 0:30:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |