目录
一、主流性能测试工具
1.1 LoaderRunner
1.2 JMeter
二、JMeter环境搭建
2.1下载安装JDK
2.2 下载安装JMeter
2.3 JMeter文件目录介绍
2.3.1 bin目录
2.3.2 docs目录
2.3.3 lib目录
三、JMeter中基本元件和组件
3.1 基本元件及组件
3.2 JMeter元件作用域及执行顺序
3.3 JMeter三大重要组件
3.3.1线程组
3.3.2 HTTP请求
3.3.3结果数
四、JMeter参数化
4.1用户定义的变量
4.2 用户参数设置
4.3 CSV数据文件设置
4.4函数(_counter)
一、主流性能测试工具
主流性能测试工具:LoadRunner和JMeter
1.1 LoaderRunner
HPLoaderRunner是一种工业级标准性能测试负载工具,可以模拟上万用户实施测试,并监控性能提供报表。
支持多协议:Web(HTTP/HTML)、Windows Sockets、FTP、ODBC、MS SQL Sever等协议,由C语言编写。
优点:多用户(支持数量单位万),提供详细分析报表,支持ip欺骗;
缺点:收费、体积庞大(单位GB)、无法定制功能。
1.2 JMeter
JMeter是由Apache组织开发的基于Java的开源软件,用于对系统接口测试和性能测试。
最初设计用于Web应用测试,后来逐步扩展,可用于静态文件、Java程序、shell脚本、Mail等;
优点:免费、开源、小巧、丰富的学习资料及扩展组件、应用广泛、容易上手;
缺点:不支持ip欺骗、分析和报表能力相对于lr欠精度。
选择JMeter的原因:免费、功与lr基本一致,能满足绝大部分性能测试需求。
二、JMeter环境搭建
2.1下载安装JDK
官网:http://www.Oracle.com/
JDK8下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151html下载时注意电脑系统是32位或者64位
配置环境变量
JAVA_HOME=安装路径
在path中添加:%JAVA_HOME\bin;%JAVA_HOME%\jre\bin
校验:java -version
2.2 下载安装JMeter
下载地址:http://jmeter.apache.org/download_jmeter.cgi
安装提示:安装目录中不要出现空格,也不要将其装在中文文件夹内。要关注与JDK版本匹配。
环境配置:
1)新建JMETER_HOME变量,并添加jemeter所在目录,如:->D:\Program Files\apache-jmeter-5.4.3
2)PATH->.;%JEMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\loki
启动验证:
进入JMeter安装目录下的bin目录,以下三种方式任意一种打开都可。
·双击 jmeter.bat
·双击ApacheJMeter.jar选择使用java程序打开
·命令行输入:java -jar ApacheJMeter. jar
2.3 JMeter文件目录介绍
jmeter目录结构
bin目录:存放可执行的文件和配置文件
printable-docs:存放用户手册
lib目录:jmeter运行时以来的jar包
docs目录:存放jmeter接口文档
2.3.1 bin目录
存放可执行文件和配置文件
2.3.2 docs目录
是JMeter的api文档,可打开api/index html页面来查看
printable_docs的usermanual子目录下的内容是JMeter的用户手册文档;
printable_docs的demos子目录下有一些常用的JMeter脚本案例,可参考;
usermanual下component_reference.html是最常用到的核心元件帮助文档。
2.3.3 lib目录
三、JMeter中基本元件和组件
3.1 基本元件及组件
元件:类似于类的概念;组件:类似于类中定义的方法的概念。
JMeter中基本元件和组件 |
取样器 |
发送请求,类似于自动化中的业务测试语句; |
逻辑控制器 |
控制元件执行顺序,类似于自动化中的逻辑控制语句; |
前置处理器 |
对发送的请求参数进行预处理,类似于自动化中的参数化; |
后置处理器 |
对收到的响应数据进行处理。类似于自动化中获得对应的测试结果; |
定时器 |
等待一定时间,类似于自动化中的sleep语句;
|
测试片段 |
封装的脚本,供其他脚本调用。类似于自动化中封装的函数 ; |
配置元件 |
测试前的环境及数据配置。类似于自动化中的初始化动作 |
监听器 |
查看测试的结果。类似于自动化中的日志和报告。 |
组件 |
实现独立的某个功能(类似于方法) |
3.2 JMeter元件作用域及执行顺序
在JMeter中,按照jmeter测试计划的树形结构中的父子关系来定义作用域;
作用域的原则:
1)取样器:jmeter核心,其他组件都以取样器为核心运行,不作用于其他组件。
2)逻辑控制器:只对子节点中的取样器和控制器起作用。
3)其他六大元件:
·如果父节点是取样器,则只对父节点起作用。
·如果父节点不是取样器,则对父节点下所有组件起作用
元件的执行顺序:
写脚本的顺序:定义参数-->对参数进行赋值-->发送请求-->收响应-->提取响应数据-->断言响应中的字段-->观察运行结果
元件执行顺序:配置元件->前置处理器->定时器->取样器->后置处理程序->断言->监听器
注:
1.前置处理器、后置处理器和断言等组件只对取样器起作用,若其所在作用域内没有任何取样器,则 不会被执行。
2.如果同一作用域内有多个同类型的元件,则这些元件按照所在测试计划中的上下顺序依次执行。
3.3 JMeter三大重要组件
在JMeter中,基本每一次操作都至少包含三大重要组件:线程组、HTTP请求和结果树。
3.3.1线程组
线程组主要是模拟多人操作;如果有多个线程组,可以并行或者串行执行。串性即从上到下顺序执行,并行的先后顺序无法保证。
线程组分类:
普通线程组:用于发送业务请求的线程组(受并行、串行配置的影响)
setup线程组:在所有的线程组之前执行(不受并行、串行配置的影响)
terdown线程组:在所有的线程组之后执行(不受并行、串行配置的影响)
线程组属性:
线程数:模拟用户数
ramp-up time:模拟用户全部启动所需时间,目的是为了模拟性能测试场景,用户慢慢接入系统。
循环次数:设置固定次数为n,脚本发送请求n次后停止;设置循环次数为永远,脚本将一直运行;
调度器:配合循环次数为永远使用,其他请无效;
·调度器设置持续时间为n,则脚本发送的时间为n秒
延迟启动设置为n,脚本等待n秒后发送;
延迟创建线程直到需要:当启动线程发送请求时,才分配资源;如果暂未启动该线程,则不分配。
如果 不勾选,在jmeter点击运行时立即分配(使用不多,了解即可,无法观察效果)
线程数m和循环次数n的关系
如果同时配置,实际发送的HTTP请求数应该为:m*n,
虽然发送的请求次数相同,但不能相互代替线程数,代表并发用户数,体现服务器的负载量,循环次数代表执行时间。
3.3.2 HTTP请求
案例一:发送http请求
发送请求时:协议未填写,默认HTTP协议;
端口号未填写,默认80;
将
GET
请求参数放在路径中填写
案例二:发送https请求
发送请求时,协议要填https;端口号为443,
将GET请求参数放在下面的参数列表中进行填写
案例3:发送POST请求
将参数内容放入到消息体数据中,在发送时参数会添加到请求体中发送
3.3.3结果数
注:如果jmeter响应中出现乱码:
修改路径:bin目录下,修改配置文件jmeter.properties中的内容:
四、JMeter参数化
4.1用户定义的变量
配置方法:
1)配置元件中配置:测试计划—>线程组—>配置元件—>用户定义的变量
参数设置:
参数名:参数值
在HTTP取样其中应用:${参数名}
线程组下配置的用户定义的变量,在线程组下生效,与测试计划中配置的变量冲突时,以线程组下的为准;
2)在测试计划中配置(全局生效)
使用用户定义变量,不同的用户在访问时,读取的数值完全相同;如果要是读取的数值不同,就要使用用户参数。
4.2 用户参数设置
配置方法:线程组—>前置处理器—>用户参数
添加用户:可以添加多组用户
添加参数:每个用户添加多个参数
4.3 CSV数据文件设置
使用用户参数时,每个用户可以取不同的数据,但同一用户多次循环时读取的数据是不变的。要使同一个用户循环多次发送不同的请求值,可以使用CSV数据文件设置。
添加方式:测试计划—>线程组—>配置元件—>CSV数据文件设置
案例:请求https:www.baidu.com
要求:循环4次,每次请求时附带参数username,password,code的值不同。
1.定义CSV数据文件
2.添加线程组
3.配置CSV数据文件设置:线程组—>配置元件—>CSV数据文件设置
参数配置:
4.添加HTTP请求:引用参数值时,使用时CSV数据文件中定义的变量名
5.查看结果树
4.4函数(_counter)
函数:计数函数,一般做执行次数统计使用;对于传递内容无要求,仅仅要求传递内容不一样,可以使用函数助手。
位置:在菜单中—>工具—>函数助手对话框
函数助手
在HTTP取样器中,应用counter函数生成的函数字符串,就可以读取counter函数生成的数值。
如果counter参数设置为TRUE,则每个用户分别从1开始计算,每循环一次加1 ;
如果counter参数设置为FALSE,则所有用户公用一个计数器,每发送一个请求时,取值加1。