### Jmeter性能测试记录01
最近有2个项目同时需要性能测试,中间出现了不少问题,简单记录下,以防后续忘记。
问题1:同一线程如何共享cookie或session
基于系统代码比较旧,所以目前有一个很大的问题,我们的登录如果接口测试,需要登录两次(很不理解),基于此,暂时没有想到比较好的方法,目前的方法就是第一次登录后台app接口,然后请求第二次的web后台接口;公用一个cookie。这里就需要拿第一次登录的cookie作为第二次请求的body的一部分,所以需要用到同线程中共用cookie。
第一步:登录接口如图
登录接口返回结果中有token如下所示
{"msg":"成功登录","rcm.session.id":"884508c3b2504a5b922aacccc8aaf552","code":0}
第二步:使用正则表达式获取对应的token信息,操作如图:(问题一非必要)
如上:
引用名称:access_token
正则表达式:"rcm.session.id":"(.+?)"
模板:$1$
第三步:使用BeanShell 后置处理程序将获取的token转换为全局变量(问题一非必要)
${__setProperty(access_token,${access_token},)};
第四步:添加第二个登录接口如图3中的rcm_login_web
第五步:修改jmeter配置文件
修改apache-jmeter-5.2.1/bin/jmeter.properties文件,把CookieManager.save.cookies设置为true,并去掉前面的注释#号,如下图所示:
第六步:在线程组下添加一个HTTP Cookie管理器,此Cookie管理器属于当前线程组,如图
此时启动线程测试,发现两个接口都调用成功,且公用同一个cookis
问题2:跨线程如何共享cookie或session
正常情况下,性能测试其他接口,登录接口仅需要登录一次,非不需要每次都要登录。如果跨线程多个接口,共享cookie的操作如下
第一步:参考问题1的第一、二、三步操作,
第二步:在测试计划下添加一个HTTP Cookie管理器,获取之前的cookie信息,如图
cookie使用:
值:${__P(access_token)}
域:当前的访问地址
路径:默认/
此时运行线程,验证以上配置实现跨线程使用cookie。
问题3:SetUp线程组如何使用
在接口测试中,登录接口仅需要出现登录一次;所以这里使用到SetUp线程组,具体使用可参考jmeter压测学习15-setUp线程组实现用户先登录
问题4:Stepping Thread Group使用
Stepping Thread Group可以实现类似的混合压测场景,具体配置说明如下
This Group will start 100 threads:这次的测试总共会起 100 个线程。
First , wait for 0 seconds:等待 0s 后开始起线程,也就是不等待直接起线程。
Then start 10 threads every 30 seconds:每起 10 个线程后会运行 30s,再起余下的 10 个线程,再运行 30s,以此类推。
Using ramp-up 5 seconds:前面每起多少个线程的时候花 5s,与上面结合起来即 5s 内起 10 个线程,运行 30s,然后再再 5s 内再起 10 个线程,再运行 30s,以此类推。
Then hold load for 60 seconds. :全部的线程起来后,运行 60s 后开始停止(跟 loadrunner 类似,从 jmeter 聚合报告里面可以看出来,这里的 hold load 的意思,其实是这些线程,一直在请求,相当于 jmeter 普通线程组里面的循环运行)。
Finally , stop 5 threads every 1 seconds:最后停止线程,5 个线程停一次,等 1s 再停 5 个线程(当然,第一次是 hold 时间一过就先停 5 个线程,然后等 1s 再停余下的 5 个线程)。