目录
记录一下如何使用Jmeter进行并发操作。如有不同意见,欢迎讨论。
一、脚本组织
如图所示 ,登陆和支付请求都加上了定时器,根据查看结果树,可看出所有用户登陆完成后,才进行支付请求的提交,且登陆和支付发起请求的时间几乎是同时(详细的请求信息可以通过 用表格查看结果 进行查看,严格来讲还是做不到同时发起请求,但是时间间隔极小,可以认为同时进行)。
csv数据文件:需要进行参数化的请求参数,这里有个小坑,就是如果新建txt文本,然后再重命名为csv文件,在编辑csv文件时,如果数值是复制粘贴到csv文件的,且复制的数值较长时,直接粘贴的时候,会变成科学记数法的形式,双击或在前面加英文的逗点,复制的数值最后几位会变成0000,这个问题不知道怎么解决。最正确的方式就是直接用txt文本编辑参数,参数用英文的逗号间隔,缺点是不太好编辑,效率和速度没那么快。
HTTP cookie管理器:这个配置元件要放在线程组下,不能放在HTTP请求下!我的看有些文章是放在HTTP请求下的,但是我试过,请求失败提示没有登陆。cookie管理器直接添加就行了,不用做什么配置。
HTTP信息头管理器:主要添加Content-Type:application/json;charset=UTF-8
下面我们看一下用表格查看结果:
如图所示,加上同步定时器后,几乎可以认为是同一时间发起的请求,不加同步定时器时,开始时间差距还是很明显的。这个可以自己尝试一下。
二、疑惑
可能有人跟我一样想过这样一个问题,这样设置,会不会登陆之后,后面所有请求都是使用同一个cookie发起的请求呢,后续的业务请求是否都是使用第一个或是某一个登陆用户的cookie发起的请求呢?之前也有想过好像也有人说过可以把登陆后cookie或session保存到一个文件,然后再后面的请求添加cookie管理器,cookie管理器取保存好的cookie或session。我也这么试过,但是一直调不通,可能是方法不对吧。
下面看看按当前的脚本设置,后续的请求所使用的cookie是否相同:
第一个登陆的cookie
第二个登陆的cookie
第三个登陆的cookie
下面汇总一下
1 | JSESSIONID=DC7B28B4F4F9E68C489F64EEECEE6DA9 |
2 | JSESSIONID=3FACDD1EC0836E41B2D3ABBD2C0E41D6 |
3 | JSESSIONID=D6AB05E70D821F4AA0F03C9FEA6167C7 |
4 | JSESSIONID=59C62C414C8885CE0EB471AB6FF5D8B1 |
5 | JSESSIONID=A92A2F83BA2464CDCD2663C49302A533 |
6 | JSESSIONID=EA42EDB202E68D51C742D61FB2248002 |
现在看看支付请求所携带的cookie是否都是同一个
第一个请求
第二个请求
第三个请求
第四个请求
后面两个请求就不贴出来了。
从上面的结果可以看出:所有的请求使用的cookie都不相同!
三、总结
个人认为以上的结果是真正意义上的并发!
如果登陆了100个用户,但后续的请求都是使用同一个cookie,这并不能算是并发,起码与实际业务场景无法对应。
如果请求的结果是 登陆-支付-登陆-支付-登陆-支付……,这明显也不是并发,来一个发一个,来一个发一个,怎么能算并发呢!