目录
一、Jmeter 简介
Jmeter是Apache组织开发的基于Java的压力测试工具。Jmeter被广泛应用到测试领域,可做接口测试、压力测试、性能测试等。本文介绍Jmeter性能测试
二、Jmeter 安装
2.1、JDK安装
安装后配置系统环境变量,参考这一篇DOS窗口下运行HelloWorld显示错误:找不到或无法加载主类文章配置
2.2、Jmeter 安装
Jmeter 安装参考这一篇Jmeter 中文版安装指南(零基础)文章配置
三、Jmeter 性能测试
用常见的百度接口作为例子
3.1、接口地址
http://www.baidu.com/s?ie=utf-8&wd=jmeter性能测试
复制地址去浏览器试一下,OK。
3.2、请求参数
ie:编码方式,默认为utf-8,wd: 搜索词
3.3、返回结果
搜索结果,我们可以通过校验结果中是否含有搜索词wd来判断本次请求成功或失败
四、Jmeter 脚本编写
步骤在上两篇博文已有介绍,学会的同学可以快速过
4.1、添加线程组
测试计划,右键添加->线程(用户)->线程组
这里可以配置线程组名称,线程数,准备时长(Ramp-Up Period(in seconds))循环次数,调度器等参数:
线程组参数解释:
1、线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
2、Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
3、循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
4、Delay Thread creation until needed:直到需要时延迟线程的创建。
5、调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
先使用默认配置,进行接口调试。执行性能测试的时候再进行配置
接口测试前面的博文已写
4.2、添加HTTP请求
线程组,右键添加->取样器->HTTP请求
对于我们的接口http://www.baidu.com/s?ie=utf-8&wd=jmeter性能测试,可以参考下图填写:
Http请求主要参数解释:
1、Web服务器
协议:向目标服务器发送HTTP请求协议,可以是HTTP或HTTPS,默认为HTTP
服务器名称或IP :HTTP请求发送的目标服务器名称或IP
端口号:目标服务器的端口号,默认值为80
2、Http请求
方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、OPTIONS、TRACE、DELETE等。
路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
Content encoding :编码方式,默认为ISO-8859-1编码,这里配置为utf-8
同请求一起发送参数
在请求中发送的URL参数,用户可以将URL中所有参数设置在本表中,表中每行为一个参数(对应URL中的 name=value),注意参数传入中文时需要勾选“编码”
4.3、添加查看结果树
线程组,右键添加->监听器->查看结果树
点击启动
这时,我们运行Http请求,修改响应数据格式为“HTML Source Formatted”,可以看到本次搜索返回结果页面标题为”百度安全验证“。
咦,不应该是返回结果页面标题为”jmeter性能测试_百度搜索“吗?这是因为百度现在不允许做压测了,可以添加一个参数tn ,值为monline_4_dg(模拟http请求)
再次点击运行就有返回值了
4.4、添加用户自定义变量
线程组,右键添加->配置元件->用户定义的变量
新增一个变量wd,存放搜索词
并在Http请求中使用该参数,语法为:${wd}
4.5、添加断言
前面的博文已有详细的记录,不会的再看着做一遍。HTTP请求,右键添加->断言->响应断言
我们校验返回的文本中是否包含搜索词,添加参数${wd}到要测试模式中
4.6、添加断言结果
HTTP请求,右键添加->监听器->断言结果
这时,再点击运行一次就可以看到断言结果成功或失败了
断言成功
断言失败 (注意这里可以把匹配模式改一下就会失败,如下)
结果失败了
4.7、添加聚合报告
线程组,右键添加->监听器->聚合报告,用来存放性能测试报告
于是,第一次编写的第一个的完整http接口的jmeter性能测试脚本完成
五、Jmeter 性能测试执行
5.1、配置线程组
点击线程组,配置本次性能测试相关参数:线程数,循环次数,持续时间等,这里我们配置并发用户数为10,持续时间为60s
5.2、执行测试
匹配模式改回去
执行测试前点击扫把,清除之前的结果,再点击运行
六、测试报告分析
等待一会,打开聚合报告
聚合报告参数解释
1、Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
2、#样本(Samples):请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
3、平均值(Average):平均响应时间(单位:ms)——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
4、中位数(Median):中位数,也就是 50% 用户的响应时间
5、90% 百分位(90% Line):90% 用户的响应时间
6、最小值(Min):最小响应时间
7、最大值(Max):最大响应时间
8、异常%(Error%):错误率——错误请求数/请求总数
9、吞吐量(Throughput):吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
10、KB每秒(KB/Sec):每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量
七、总结
性能测试是软件测试工程师必知必会的内容,在面试中面试官经常会提问你会不会性能测试,性能测试怎么测,用的什么性能测试工具,性能测试常用指标有哪些等等。通过本节课的练习,发现性能测试入门也是很简单的,只不过在不了解的人眼里,觉得性能测试很高大上,特别是对于刚转行的人来说。希望大家能好好学习,做一个优秀的软件测试工程师
2020年4月23日