itboyer 发表于 2019-5-30 09:22

JMeter测试案例[加密登录、post请求]

> 近期项目上做了接口的平台迁移,为了测试迁移前后的性能损耗,以及socket长短连接的响应耗时时长,想测一下相关接口的性能级别
> 百度了一下相关测试软件,JMeter的文档比较多,使用率比较高,就跟着网上教程现学现卖了一下,做个小记录,方便以后翻阅

# 下载和安装
1. 官方网站:http://jmeter.apache.org/ 在这里我下载的是最新版5.0的zip包
2. 5.0版本依赖JDK8以上的环境,配置JAVA_HOME
3. 解压后, 运行“bin/jmeter.bat”如果运行不了,请检查JDK是否正常配置,javaw.exe是否在环境变量中
4. Jmeter是支持中文的, 启动Jmeter 后, 点击 Options -> Choose Language来选择语言,如果低版本的找不到选择语音的选项,可以看下bin/jmeter.properties 在36行左右有语言配置设置`language=zh_CN`
<!-- more -->

# 测试场景
> 首先明确要测试的接口场景

1. 平台下登陆做了随机值+对称公钥加密做MD5的方式进行密码认证,要考虑登陆问题
2. 接口请求是POST请求,需要设置传参的方式和请求头关于报文的格式
3. 一个页面有多个接口调用,需要出整体的性能级别报告

# 操作

## 创建线程组
首先进入应用界面,新建线程组
右键添加线程组
![添加线程组](https://itboyer.github.io/images/pasted-36.png)
线程组配置如下,先设置1个线程数,1次循环,调试单个接口能正常调用
![添加线程组](https://itboyer.github.io/images/pasted-37.png)

> 相关参数释义:
线程数:虚拟用户数,一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数
Ramp-Up Period(in seconds):设置的虚拟用户数需要多长时间全部启动。如果线程数为10 ,Ramp-Up Period为100,那么就是100秒钟内启动10个线程。每一个线程都会在上一个线程启动10秒钟后才开始运行;设置为0则表示同时启动(注:Ramp-Up Period(in secods)不能设置太小的数值,否则会一开始就给服务器过大的压力;也不能设置太大的数值,否则第一个线程已经执行完了,最后一个还没启动的情况)刚开始Ramp-Up值可以等于总线程数,之后再作调整
> 循环次数:每个线程发送请求的次数,如果线程数为20 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为20*100=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
> 启动时间:线程运行的起始时间
> 结束时间:线程运行的结束时间
> 持续时间:设置了持续时间则启动时间会失效
> 启动延迟:设置了启动延迟则结束时间会失效
> 线程数1000循环1次与线程数10循环100次的区别:线程数1000循环1次可以选择并发;线程数10循环100次是类似于长时间施加压力

## 登陆验证
> 首先明确javaWeb的项目工程,对于身份的登陆状态一般都是使用获取Session方式来判断是否登陆,使用用户名密码的形式因为密码做了加密,所以我们这里的解决方案为,使用Google浏览器做个登陆,然后在浏览器获取SessionID,使用sessionID模拟已经登陆的状态

1. 首先登陆,
2. F12,打开Google浏览器的调试界面,打开network选项卡,随便点击一个按钮,发起接口请求
3. 打开请求详情,Request Headers就是我们要的内容
!(https://itboyer.github.io/images/pasted-39.png)
4. 右键线程组添加HTTP信息请求头管理器
![添加HTTP信息请求头管理器](https://itboyer.github.io/images/pasted-40.png)
5. 将请求头内容相关粘贴到配置中
!(https://itboyer.github.io/images/pasted-41.png)

## 创建HTTP请求
在线程组内添加HTTP请求
![创建HTTP请求](https://itboyer.github.io/images/pasted-38.png)
配置HTTP请求参数
> 注: json格式的报文,必须在`消息体数据`选项卡内填写报文,不能再参数内填写

![配置HTTP请求参数](https://itboyer.github.io/images/pasted-42.png)
## 添加监听器
在整个测试计划中,添加相关结果类的监听器
![添加监听器](https://itboyer.github.io/images/pasted-43.png)

启动任务,查看相关报告

## 最终结果
使用5个线程模拟并发,循环5次,对30多个接口进行同步请求:
![汇总报告](https://itboyer.github.io/images/pasted-45.png)
![响应时间图](https://itboyer.github.io/images/pasted-44.png)

> 参考:
> https://blog.csdn.net/huashao0602/article/details/72845378
> https://www.cnblogs.com/test002/p/8034154.html

itboyer 发表于 2019-8-26 09:33

yike911 发表于 2019-8-25 08:29
一般用非gui方式来压测,另外写死session压测对服务器木有用,服务器有缓存的。

学到了,那么不写死session,如何绕过身份鉴权呢?

yike911 发表于 2021-1-21 20:19

天空法则 发表于 2019-5-30 09:50

测试人员,可以共同交流

itboyer 发表于 2019-5-30 09:54

天空法则 发表于 2019-5-30 09:50
测试人员,可以共同交流

哈哈,我是开发人员,只不过没事的时候,自己做个小测试能用到

范你好 发表于 2019-5-30 13:39

谢谢楼主,很实用{:301_1009:}

glk1010282338 发表于 2019-5-30 14:43

谢谢楼主!

断尘缘老佛 发表于 2019-8-25 00:51

哎呦 不错哦

yike911 发表于 2019-8-25 08:29

yike911 发表于 2019-8-26 12:27

q791299243 发表于 2019-12-26 14:08

好东西,可以做个小型压测接口
页: [1] 2
查看完整版本: JMeter测试案例[加密登录、post请求]