我们的实际工作中,需要先登录,然后才能做某些操作的现象非常常见。但是,对于一个刚刚学会用jmeter做性能测试的人来说,这可能是自己的性能测试之路的第一个坎。
为什么这么说呢?
首先,从这个诉求中,我们至少能提取出两个重要信息,1、需要登录;2、登录后才能做,以为着登录之后的接口,都有登录认证,判断是否登录,登录认证未通过,那么接口请求就会失败。
那么好了,问题来了。我做性能测试,是需要用多个虚拟用户来实现并发的。
场景一:我是用把所有虚拟用户使用同一个用户账户,每次都是先调登录接口,再调登录之后接口请求吗?如果你的系统,业务上允许一个用户在不退出情况下,反复登录,且没有登录次数限制,这种最理想的情况,你完全可以这么做。做完了,你可能会想,我不用一个账户,100个并发用户数,我就用100个独立账户,
场景二:每个虚拟用户都试用一个独立账户,还是先调登录,再调登录之后接口请求,这样可以吗,要怎么做?当然可以,做法也非常简单,就是在你的线程组里面用上“csv数据文件设置”读取出用户账户信息,或者用JDBCrequest从数据库获取出用户信息,然后再在登录接口中用取出的用户信息来登录。这样,在性能测试时,就会循环使用你用户总量中的用户来发送请求,这样,理论上是行的通的,但是,现实有些骨干,因为我们做性能测试,使用的是高并发,可能存在竞争关系,就可能出现后续接口,使用的关联参数可能取不到值,从而导致请求报错,而这种错误,不是性能测试服务器响应报错,而是脚本问题导致报错,影响我们对性能结果的判断。那么,我们就会问,还有没有其他办法呢?
场景三:用一定量的用户登录一次,登录之后,再去调其他接口,是不是也可以呢?下面,我就重点讲讲这种做法。
是不是,看了上面的动画,还是没有明白?
下面,给大家解释一下,我们在一个普通的线程组下面,新增一个逻辑控制器中的‘仅一次控制器’,在这个控制器下面,新增一个 login登录接口的请求;再在仅一次逻辑控制器平级的位置添加如 ‘重置密码’‘修改密码’等接口(模拟你的需要登录之后才能调用的接口),因为接口需要关联,所以,在登录接口下添加一个后置处理器(json提取器),提取出参数,最为后续接口的输入参数,实现接口关联。
从上面,是不是发现,线程数设置5,登录接口总共调用5次,而其他接口,在整个测试运行过程中,一直运行。
![](https://img2018.cnblogs.com/common/1805244/201912/1805244-20191219173622755-1395360626.jpg)
从最后的这个聚合报告,我们也可以看出,login接口,总共调用5次,重置密码接口分别对5个用户进行了并发请求(从后缀可以看出),只是需要明确,并发请求,并不代表整个过程每个用户的并发总次数相等(从样本总数不同可以看出)。
好了,你是否已经懂得需要先登录才能请求的接口,性能测试脚本该怎么写了呢?附带衍生的知识点是否get到了?
想要获取更多有趣有料的测试知识,欢迎关注** 柠檬班** 微信公众号。