Jmeter学习和一个关于jmeter获取X-XSRF-TOKEN时的坑
现在想对一个接口做性能测试,需要测试它多个线程并发下的调用
1.新建测试计划和线程组
略
2.新建http接口
一个完整的http接口包含请求头和请求,这里就需要两个组件:HTTP request、HTTP Header Manager。
2-1 HTTP request
需要填写以下内容。
2-2 HTTP Header Manager
这里需要关注的是X-XSRF-TOKEN,它是动态的。
如果是第一次发请求,请求参数不带X-XSRF-TOKEN,响应头就会返回一个X-XSRF-TOKEN。
第二次请求就必须在请求头中带上上次请求返回的X-XSRF-TOKEN,否则就会返回403,并报错如下。
Invalid CSRF Token 'null' was found on the request parameter 'csrf' or header 'x-xsrf-token'
那么这里的难点就在于每次都需要从上一次请求的响应头中获取返回的X-XSRF-TOKEN,并设置到下一次请求的请求头中
响应头中要提取的数据长这样:
3.提取response Header返回的动态变量
这里介绍了正则表达式提取和边界表达式提取两种方法,任选一种即可。
遇到的一个坑,暂时不知道为什么:
在本地启动项目时,即项目地址的IP是localhost时,正则提取不到,必须用边界表达式提取;
在云服务器上启动时,即项目地址的IP是云服务器的IP时,边界表达式提取不到,必须用正则提取。
3-1 Regular Expression Extractor
通过正则表达式提取和引用X-XSRF-TOKEN
提取之后在下一个请求的请求头中这样引用
3-2 Boundary Extractor
通过边界表达式提取和引用X-XSRF-TOKEN
提取之后在下一个请求的请求头中这样引用