背景
在测试的时候,经常会有模拟用户登录,拿到用户 token 后再去请求接口的场景。
这个模拟用户登录就会分为两种,一种是单用户,另一种是多用户。
日常自动化测试的时候可能一个用户对应 n 个用例就可以满足大多数场景;
如果是在压力测试的场景下面,可能就会略显单调,也无法满足一些真实业务场景。
对于单用户的情况下,和我们常规的多接口有依赖的测试其实没什么太大的差别。
所以这里主要讲的是多用户产生多个 token 的情况。
场景接口
一个是登录拿 token,一个是有 token 才能请求
- 登录接口处理
登录接口属于预请求,所以我们一般会选择把它放在 setUp 线程组里面
首先要先准备好多个用户可进行登录,这里需要用到csv数据文件配置进行多用户登录
然后是把登录的 HTTP 请求配置好做好登录参数化
由于后面要用到 token,所以要先把 token 提取出来,这里用的是json提取器
由于我们会有多个用户进行登录,但是这一个提取操作每次都会把 token 赋值到 token这个变量上面,是覆盖的操作。
换句话就是说,每登录一个用户,这个 token 的值就会是最后一个登录的用户的 token,。
换个思路,每次它会覆盖,那么把这些 token 存到一个地方,然后业务接口去这个地方取就可以了。
如果没有用户登录这一步,给的直接是 token,那么我们也是直接把这个 token 放到 csv 文件里面,然后让 jmeter 去循环使用里面的 token。
那么要做的东西其实就很确定了,就是在提取到 token 后,把这个 token 写到一个 csv 文件里面。
要想做到这一步,需要在登录接口后面加一个后置的处理。
String p1 = System.getProperty("user.dir");
String p2 = System.getProperty("file.separator");
String p3 = "user_token.csv";
String path = p1 + p2 + p3;
FileWriter fileWriter = new FileWriter(new File(path), true);
BufferedWriter writer = new BufferedWriter(fileWriter);
writer.append(vars.get("token")+"\n");
writer.close();
把用户名和提取到的 token 写进到 csv 文件里面,这个文件在的位置是 jmeter 下的bin目录。
这里是对文件路径做了处理,可以适配所有操作系统的。不会出现说指定了一个 windows 系统的路径,然后放到 linux 系统下面就跑不了了。
还有最重要的一个是,要修改 setUp 线程组的属性,把循环次数改成 100 。因为前面的 csv 文件里面有 100个用户,这样它才会触发100次登录。(具体根据自己需要的用户量设置,如果自己的登录用户有50个则这里的线程数可设置为50个,跑出来就有50个token)
运行setUp线程后就能在jmeter目录中看到user_token.csv文件
拿到这100个token后即可运行对应需要多用户并发的接口