背景

压测接口往往需要进行身份鉴权。

对于简单的接口场景,可以直接将用户名和密码等放入请求体以完成身份构造。

实际操作中用户身份信息往往进行了加密,并存放在cookie中,当待压测接口难以改造鉴权方式时,便需要在发起压测请求前模拟用户登录,获取用户cookie信息。

一、单用户--抓包获取的cookie登录态

这种方式首先通过抓包获取正常操作时的用户请求,并从中复制出cookie信息,然后将信息粘贴到Jmeter线程组的COOKIE Manager或者Header Manager中即可。

Jmeter从单用户到多用户并发_压测

 

 经过上述配置,并发请求时每个请求体都会带上我们实现设置的cookie信息。

二、单用户--模拟登录获取cookie等登录态信息

此方式不需要抓包,通过Jmeter模拟登录接口,将用户信息自动写入线程组cookie,只在待压测请求前发起登录请求,并添加HTTP COOKIE MANAGER即可。

Jmeter从单用户到多用户并发_单用户_02

 

 三、单用户-登录优化

 上一种方式对于线程组中的登录接口也进行了并发请求,实际上我们只需要获取到用户的登录态即可,并不需要对登录接口进行压测。因此可以做如下优化

将登录请求放到逻辑控制器下,使用only once controller,这样用户在登录时便只会发送一次登录请求,并在后续的请求中携带上cookie信息。

Jmeter从单用户到多用户并发_压测_03

 

四、多用户登录

1、正确理解 once only controller:此控制器实际上对于它下面的请求并非只限制发送一次请求,而是针对线程组中设置的线程数量,每个线程发送一次请求。

例如线程组设置Threads数量为5,那么在once only controller下登录请求便会发送5次。

Jmeter从单用户到多用户并发_用户信息_04

 

 

Jmeter从单用户到多用户并发_线程组_05

 

 

 而查询用户信息的接口则符合线程组的设置,一共发送了10次请求。

Jmeter从单用户到多用户并发_用户登录_06

 

2、多用户登录信息获取--CSV data set config

从用户信息文件中读取用户的id,并作为登录请求时的变量发送出去。变量配置文件可以选择csv或者TXT格式,默认使用英文逗号进行变量分割,每行代表一个用户数据。

 

 Jmeter从单用户到多用户并发_压测_07

 

 

 3、通过组合HTTP cookie manager以及once only controller使用,便可模拟多用户登录,并且请求查询不同用户的信息。

线程组线程数量:10,循环10次

Jmeter从单用户到多用户并发_压测_08

 

 登录请求一共发送10次,均为从配置文件中读取的不同的用户信息

Jmeter从单用户到多用户并发_用户登录_09

 

 Jmeter从单用户到多用户并发_线程组_10

 

 Jmeter从单用户到多用户并发_用户信息_11

 

 待压测接口总共完成了100次请求,共计10个不同的用户身份。实际查询的响应数据也为不同用户的身份信息

Jmeter从单用户到多用户并发_线程组_12

 

 Jmeter从单用户到多用户并发_单用户_13

 

 Jmeter从单用户到多用户并发_压测_14

 

 

五、多用户只登录一次

注意如果要模拟200个用户身份,那么我们设置的线程数便为200,且配置文件中的用户身份信息也大于等于200,这样才能保证用户线程读取文件时不会重复。

 

总结

从复制cookie模拟单用户,到使用jmeter模拟登录单用,直到最后使用Jmeter模拟多用户登录,是不断对压测接口设置的优化提炼,减少对非目标接口的压测干扰,从而得到更为准确的性能测试数据。