【项目实战】如何使用Jmeter来压测接口?
一、背景
压力测试是一种需要在每个Web应用程序都需要进行的测试。它能够帮助我们发现系统中的性能瓶颈,减少发布生产环境后出现问题的可能性,评估系统的承载能力,并据此制定对策。所以压力测试是一个非常重要的步骤,下面介绍一款非常常用的压力测试工具,JMeter。
测试同学反馈说,我们首页的接口,这个接口/mallapi/pagedevise/getDetailByComponentReq
单个接口1000个线程跑完,大概有6%的error的情况,而且每次都是最后结尾的时候出现error。我倒要看看是不是测试说的那样。
二、介绍JMeter
Apache JMeter是由Apache组织开发的一个基于java的压力测试工具。
- 软件压力测试
用于软件压力测试,最初为Web应用程序测试设计,但后来扩展到其他测试领域。 - 测试静态资源和动态资源
如静态文件、CGI脚本、Java对象、数据库、FTP服务器等。 - 模拟服务器的巨大负载
可用于模拟服务器、网络或对象上的巨大负载,这来自于测试它们的强度和分析它们在不同压力类别下的整体性能。 - 功能/回归测试
此外,能够对应用程序进行功能/回归测试,通过创建带有断言的脚本来验证程序是否返回所需的结果。为了最大化灵活性,JMeter允许使用正则表达式创建断言。
三、 Jmeter的使用步骤
Step1、创建线程组
在“测试计划”上右键 【添加】–>【Threads(Users)】–>【线程组】。
设置线程数和循环次数。测试说的是1000。所以,此处设置线程数为1000,循环一次。
Step2、创建HTTP请求
在“线程组”右键 【添加-】->【samlper】–>【HTTP 请求】配置需要进行测试的程序协议、地址和端口设置需要测试的API的请求路径和数据。这里是用的json
Step3、添加HTTP请求头#
在刚刚创建的线程组上右键 【添加】–>【配置元件】–>【HTTP信息头管理器】。
因为要传输的数据为json,所以设置一个 Content-Type:application/json
Step4、添加断言
在刚刚创建的线程组上右键 【添加】–>【断言】–>【响应断言】。
根据响应的数据来判断请求是否正常。在这里只判断的响应代码是否为200。还可以配置错误信息
Step5、添加察看结果树
在刚创建的线程组上右键 【添加】–>【监听器】–>【察看结果树】。
直接添加,然后点击运行按钮就可以看到结果了。
Step6、添加Summary Report
在刚刚创建的线程组上右键 【添加】–>【监听器】–>【Summary Report】。
直接添加,然后点击运行按钮就可以看到结果了。
Step7、测试计划创建完成
记得点保存。保存为一个JMX文件,方便下次打开
四、 Jmeter常见问题解决
(1)下载地址:
JMeter:https://jmeter.apache.org/download_jmeter.cgi
因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境
bat是win的,sh是linux的。
本文使用的版本是JMeter5.4.1
打开之后的这个对话框可忽略
上面的意思就是:不要使用GUI运行压力测试,GUI仅用于压力测试的创建和调试;执行压力测试请不要使用GUI。使用下面的命令来执行测试:
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
并且修改JMeter批处理文件的环境变量:HEAP=“-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m”
(2)Jmeter如何针对https协议进行接口测试?
解决方法:
将协议更改为:https,端口号更改为443;
Jmeter默认的是:http协议,端口号是:80
(3)Jmeter如何解决默认中文显示?响应内容中文乱码
解决方法: 更改语言为中文官方默认为我们提供了简体中文。
方案1:通过 【Options】->【Choose Language】变更为简体中文
方案2:通过编辑jmeter目录/bin/jmeter.porperties文件,将其language的值更改为:zh_CN,然后保存,重启Jmeter即可。
(4)Jmeter如何解决Sampler样本-响应结果乱码?
原因:jmeter默认是ISO-8859-1编码,可以通过修改:jmeter.properties文件
解决方法: 将sampleresult.default.encoding=ISO-8859-1,将其修改为sampleresult.default.encoding=UTF-8;保存后,重新启动Jmeter即可。
(5)响应返回协议不支持
注意在请求头中携带Content type = ‘text/plain;charset=UTF-8’ 即可
org.springframework.web.HttpMediaTypeNotSupportedException: Content type ‘text/plain;charset=UTF-8’
五、参考文章:
https://blog.csdn.net/mengwuyoulin/article/details/125786649
https://www.cnblogs.com/stulzq/p/8971531.html
http://t.zoukankan.com/xiaoqiao0307-p-9004271.html
相关文章
- Tomcat 配置 项目 到tomcat目录外面 和 域名绑定访问(api接口、前端网站、后台管理网站)
- 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装
- java接口中多继承的问题
- 项目中加入百度地图(调用百度地图的接口)
- 路飞学城项目-支付相关-结算接口
- 利用接口调用服务中特定的方法
- mysql、sqlserver、oracle分页,java分页统一接口实现
- 路飞学城项目-支付相关-购物车接口
- nginx配置部署vuejs gva(gin-vue-admin)项目并解决后端api接口请求时报404问题(附nginx.conf)
- 利用IIdentify接口实现点选和矩形选择要素
- Atitit 项目通讯接口方案attilax总结.docx
- Springboot项目如何设计接口中敏感字段的加密、解密?
- 【项目实战】并发编程之线程池(ExecutorService接口与Executors)入门介绍
- 〖Python接口自动化测试实战篇①〗- 自动化测试基础扫盲及项目的生命周期详述
- 〖Python接口自动化测试实战篇⑤〗- 接口自动化测试必备基础 - http协议
- 全干工程师神器 - Jmeter 08 - 如何利用Jmeter进行接口测试
- 解析鸿蒙内核消息队列QueueMail接口的哼哈二将
- 接口interface修饰符相关问题总结
- XCode中在提示窗体中对已弃用的API接口画上红线
- 手把手教你完整Python接口自动化--附源码
- 接口文档神器之apidoc
- 自研开源项目(3)基于pytest和数据驱动的自定义接口自动化框架caterpillar_apitest
- Springboot项目如何设计接口中敏感字段的加密、解密?
- 【项目实战】威积分首页接口开发踩坑日记