Jmeter压测--从单用户到多用户
背景
压测接口往往需要进行身份鉴权。
对于简单的接口场景,可以直接将用户名和密码等放入请求体以完成身份构造。
实际操作中用户身份信息往往进行了加密,并存放在cookie中,当待压测接口难以改造鉴权方式时,便需要在发起压测请求前模拟用户登录,获取用户cookie信息。
一、单用户--抓包获取的cookie登录态
这种方式首先通过抓包获取正常操作时的用户请求,并从中复制出cookie信息,然后将信息粘贴到Jmeter线程组的COOKIE Manager或者Header Manager中即可。
经过上述配置,并发请求时每个请求体都会带上我们实现设置的cookie信息。
二、单用户--模拟登录获取cookie等登录态信息
此方式不需要抓包,通过Jmeter模拟登录接口,将用户信息自动写入线程组cookie,只在待压测请求前发起登录请求,并添加HTTP COOKIE MANAGER即可。
三、单用户-登录优化
上一种方式对于线程组中的登录接口也进行了并发请求,实际上我们只需要获取到用户的登录态即可,并不需要对登录接口进行压测。因此可以做如下优化
将登录请求放到逻辑控制器下,使用only once controller,这样用户在登录时便只会发送一次登录请求,并在后续的请求中携带上cookie信息。
四、多用户登录
1、正确理解 once only controller:此控制器实际上对于它下面的请求并非只限制发送一次请求,而是针对线程组中设置的线程数量,每个线程发送一次请求。
例如线程组设置Threads数量为5,那么在once only controller下登录请求便会发送5次。
而查询用户信息的接口则符合线程组的设置,一共发送了10次请求。
2、多用户登录信息获取--CSV data set config
从用户信息文件中读取用户的id,并作为登录请求时的变量发送出去。变量配置文件可以选择csv或者TXT格式,默认使用英文逗号进行变量分割,每行代表一个用户数据。
3、通过组合HTTP cookie manager以及once only controller使用,便可模拟多用户登录,并且请求查询不同用户的信息。
线程组线程数量:10,循环10次
登录请求一共发送10次,均为从配置文件中读取的不同的用户信息
待压测接口总共完成了100次请求,共计10个不同的用户身份。实际查询的响应数据也为不同用户的身份信息
五、多用户只登录一次
注意如果要模拟200个用户身份,那么我们设置的线程数便为200,且配置文件中的用户身份信息也大于等于200,这样才能保证用户线程读取文件时不会重复。
总结
从复制cookie模拟单用户,到使用jmeter模拟登录单用,直到最后使用Jmeter模拟多用户登录,是不断对压测接口设置的优化提炼,减少对非目标接口的压测干扰,从而得到更为准确的性能测试数据。