文章目录
-
-
- 1. 目录介绍
-
- 1.1 backups(备份)
- 1.2 bin
- 1.3 docs
- 1.4 extras
- 1.5 lib
- 1.6 licenses
- 1.7 printable_docs
- 2. 主要概念
-
- 2.1 测试计划
- 2.2 Threads
- 2.3 测试片段
- 2.4 控制器
-
- 2.4.1 取样器(Sampler)
- 2.4.2 逻辑控制器(Logic Controller)
- 3. 先举个栗子
-
- 3.1 添加线程组
- 3.2 添加HTTP请求
- 3.3 添加查看结果树
- 3.4 参数化
- 3.5 添加断言
- 3.6 添加断言结果
- 3.7 添加聚合报告
-
1. 目录介绍
1.1 backups(备份)
顾名思义,该目录是个备份目录,是将自己的各个Jmx脚本进行备份,所谓备份便是每次保存都会将该脚本进行保存到该目录下,如果保存多次便会保存多个同样的文件,文件名进行默认递增更改。
1.2 bin
- examples(例子):该目录下存放Jmeter官方给的请求模板
- report-template(报告模板):该目录下存放Jmeter的报告模板(Jmeter是有自己的报告的)t
- templates(模板):该目录下存放Jmeter的各类配置模板,例如:JDBC、Beanshell、ThinkTime等
- Beanshell----:Beanshell请求、监听、断言、函数等
- Jmeter.bat:启动文件
- jmeter.properties:配置文件(属性在官方文档中有解释)
- jmeter-server.bat:用于分布式
- shutdown.cmd:硬停止
- stoptest.cmd:软停止
- xxx.sh:Linux下运行
- user.properties:用户配置i文件(同上)
1.3 docs
- api:前面谈到Jmeter是开源的,此处便是它的API文档。
- css:xxxx
- Image:部分图片资源
1.4 extras
存放Build等配置,用于第三方集成构建
1.5 lib
存放各类jar包,组件类函数类等
1.6 licenses
许可证等
1.7 printable_docs
用户手册
2. 主要概念
2.1 测试计划
描述一个性能测试,包含本次测试所有相关功能
其中各个配置的信息详见另一篇博文:https://blog.csdn.net/qq_34659777/article/details/99960544
2.2 Threads
- Setup thread group:
一种特殊类型的线程,可用于执行预测试操作。即执行测试前进行定期线程组的执行
- Teardown thread group:
一种特殊类型的线程,可用于执行测试后动作。即执行测试结束后执行定期的线程组
以上两个线程组,举个例子:loadrunner的脚本除了action里是真正的脚本核心内容,还有初始化“环境”的初始化脚本和测试完毕后对应的清除信息的脚本块,与其对应
- Thread group:
通常添加使用的线程,一般一个线程组可看做一个虚拟用户组,其中每个线程为一个虚拟用户
2.3 测试片段
2.5版本之后新增的一个选项,是一种特殊的线程组,在测试树上与线程组一个层级,但是它不被执行,除非它是一个模块控制器或者被控制器所引用时才会被执行
2.4 控制器
Jmeter有2种控制器:取样器(sampler)和逻辑控制器(Logic Controller)
作用:用这些原件驱动处理一个测试
2.4.1 取样器(Sampler)
是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler
如 HTTP Request Sampler 、 FTP Request Sampler 、TCP Request Sampler 、JDBC Request Sampler 等
每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
Java Request Sampler 和 Beanshell Request Sampler 是两种特殊的可定制的 Sampler (暂不讨论)
2.4.2 逻辑控制器(Logic Controller)
包含两类原件:
一类是控制Test Plan中Sampler节点发送请求的逻辑顺序控制器,常用的有:If Controller、Swith Controller、Loop Controller、Random Controller等
另一类是用来组织和控制Sampler节点的,如Transaction Controller、Throughput Controller等
3. 先举个栗子
3.1 添加线程组
线程组参数详解:
- 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
- Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
- 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
- Delay Thread creation until needed:直到需要时延迟线程的创建。
- 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
结束时间:测试结束时间,持续时间会覆盖它。
现在先试一个简单的例子,后面再进行详细的配置。
3.2 添加HTTP请求
这里我用了聚合数据的新闻API:
接口文档如上,在JMeter中填写就是这个样子:
Http请求主要参数详解:
- Web服务器
协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
服务器名称或IP :HTTP请求发送的目标服务器名称或IP
端口号:目标服务器的端口号,默认值为80,非必填项
- Http请求
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
Content encoding :编码方式,默认为ISO-8859-1编码,也可配置为utf-8
- 下面的几个多选框
自动重定向:如果选中该项,发出的http请求得到响应是301/302,jmeter会重定向到新的界面
Use keep Alive:jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信(默认选中)
Use multipart/from-data for HTTP POST :当发送HTTP POST 请求时,使用
- Parameters
parameter是指函数定义中参数
- Body Data
实体数据,就是请求报文里面主体实体的内容,一般我们向服务器发送请求,携带的实体主体参数,可以写入这里
- Files Upload
指的是:从HTML文件获取所有有内含的资源:被选中时,发出HTTP请求并获得响应的HTML文件内容后还对该HTML 进行Parse 并获取HTML中包含的所有资源(图片、flash等):(默认不选中)
如果用户只希望获取特定资源,可以在下方的Embedded URLs must match 文本框中填入需要下载的特定资源表达式,只有能匹配指定正则表达式的URL指向资源会被下载
3.3 添加查看结果树
3.4 参数化
在这里我们添加一个新的变量:
然后在之前的HTTP请求中调用,调用格式为${keji_type}:
启动就会在结果树中查看到相应的结果。
3.5 添加断言
因为我们刚刚查找的是科技类的文章,所以我们来断言,响应结果中是否有“科技”字段。
3.6 添加断言结果
3.7 添加聚合报告
存放性能测试报告,在每次测试之前需要点击小扫把按钮清除之前的调试结果。
聚合报告参数详解:
- Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
- #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
- Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
- Median:中位数,也就是 50% 用户的响应时间
- 90% Line:90% 用户的响应时间
- Min:最小响应时间
- Max:最大响应时间
- Error%:错误率——错误请求数/请求总数
- Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
- KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。
这样,我们就完成了一个完整HTTP接口的JMeter性能测试脚本编写。
其他JMeter的使用教程在我的另一篇博客中做了整合,传送门:
https://blog.csdn.net/qq_34659777/article/details/85765309
最后总结一下:
如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入:软件测试技术群:593462778,群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
作者:暗潮汹涌
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。