按以下步骤来,以下各种处理程序的放置位置很重要!!不然会出现各种问题:
1、setup线程组
-
前置获取token的接口(login,以下都用login表示获取token接口)请求,获取类似token等后续需要用的参数,并写入文本文件
2、获取上层接口返参
-
login接口配置JSON提取器,json表达式可以通过结果树,选择请求的显示格式为json path tester,通过右侧JSON Path Expression来提取参数变量 (https://www.cnblogs.com/laumcc/p/12319612.html)
-
这一步也可以用“后置处理器-正则提取器”来提取参数
-
PS:【JSON提取器】放在login层级下方
3、接口参数写入文件,用于后续使用
-
JSR223后置处理程序,用java语言将参数写入文本文件,若文件内含<EOF>,则存入前过滤下,或者后续接口请求时过滤
以下是在存储前过滤
//请求login接口返回token,Json或正则提取后,存储 FileOutputStream fps1 = new FileOutputStream("/file_path/token.txt",true); OutputStreamWriter osw1 = new OutputStreamWriter(fps1); BufferedWriter bw1 =new BufferedWriter(osw1); if("${token}"=="<EOF>"){ return ;} bw1.append("${token}\n"); if(bw1!=null){bw1.close();} if(osw1!=null){osw1.close();} if(fps1!=null){fps1.close();}
-
若文本文件存入的数据条数多于线程数,同一个token重复写入,1、JSR223后置处理器放到login接口层级下方,Json提取器后面【不能放到测试计划层级下,不能与线程组同一层级】
4、后续token为入参/header的接口请求
- 【CSV数据文件设置】用于提取本地文件的数据,放在测试计划层级下,与线程组同一层级
- 后续接口http信息头管理器(header)的token值 ${token} ,即可引用
仍存在个别疑惑,如果有老铁知道原因,求解惑,感激不尽
1、setUp线程组拿到token参数,但值为空,尝试增加【调试取样器】,token值就拿到了(JSON Path 表达式没有写错!!)