在做接口测试过程中,我们经常会碰到当前请求需要上一个请求响应的数据做参数的值传入到当前请求里,这种情况必须保证上一个请求先执行,才能保证当前请求可以得到参数的值。下面就一个例子:
以接口请求需要携带token为例。每个请求都需要携带token。
从图片中,我们不难看出,如果把获取token的请求放在APP线程组中,会导致获取token时会携带信息头,这样获取会失败。如果一定要添加进APP线程组中,就需要把http请求默认值和http信息头管理器放到每个请求接口下方。这样会导致整体看上去很臃肿。所以我这里把token获取单独放在一个线程组里。
这时候就有一个问题,怎么从其他线程组获取token到当前线程组使用。
第一步:先通过正则表达式提取器提取token,使用Debug PostProcessor判断是否获取成功。
备注:正则表达式是根据请求响应数据中信息来编写的。
第二步:通过BeanShell PostProcessor 把获取到的token值定义到jmeter公共变量中。
第三步 通过函数助手获取token的值放到请求头信息中。
重点:
怎么保证线程组是先执行线程组1(token获取请求),首先我们一般会把优先执行的线程组放在最上面。
通过修改测试计划执行方式:
勾选第一项后执行测试计划,APP线程组获取token成功,接口正常通过。
在此还有一个问题?不注意很难发现,改了线程组执行方式,APP线程组还是优先执行!查看日志不难看出。
之后发现是创建线程组时出现的问题。日志看不出你在测试计划创建线程组所选择的是那个。
我这个日志的是因为APP线程组创建时选择是是线程组,token获取和后台线程组选择的是tearDown线程组。如果所有线程组创建方式一样,修改执行方式后就不会出现这问题。
除了主线程组,还有两种特殊的线程组:setUp线程组和tearDown线程组,它们与主线程组区别在于,setUp线程在主线程执行前自动触发执行;而tearDown线程组在主线程结束后执行。
setUp线程组可以用于测试准备,比如用它来创建测试用户等。
Teardown线程组可以用于测试清理工作,比如删除测试用户等。
从这段话不难看出,不改变测试计划配置,想优先执行token获取线程组可以改变创建方式。只要把token获取线程组的创建为setup线程组。