jmeter处理参数(json提取器和BeanShell脚本)

场景:
1、调用/list接口返回json对象列表,返回参数结构如下

{
    "count":0,
    "content":[
        {
            "id":1,
            "name":"aaa",
            "status":"new",
            "description":"xx",
            "version":"1",
            "_token":"dadakda-adaad_dada"
        },
        {
            "id":2,
            "name":"bbbb",
            "status":"new",
            "description":null,
            "version":"1",
            "_token":"dadasv_34f_aa"
        }
    ]
}

2、调用数据编辑接口/edit循环编辑上述列表查询接口查询到的数据,content中的数组,由于edit为保证幂等性和数据安全,参数中需要包含/list接口中查询出来的最新的version_token,所以参数必须基于上一个接口的查询结果。

jmeter脚本编写:

1、通过json提取器提取出/list接口中content下的每一个json对象

图片.png

Names of created variables: 提取出的数据存储的变量名
JSON Path expressions: 提取的位置,括号中的*代表提取列表中所有的数据
ps:据说这两个参数可以提取多个值,但我没有成功
Match N0.(0 for Random):0代表随机匹配,n代表匹配第n个,-1代表匹配所有
ps:说实在的没搞懂这个参数什么意思,填个-1保险一点

2、ForEach循环取到的json对象,并调用编辑接口


图片.png

3、对象处理,在原数据的基础上修改需要编辑的字段

处理json需要一个工具,这里用的阿里的fastJson,将用到的第三方jar包放在jmeter的lib/ext目录下

图片.png

4、编写脚本处理参数
这里在调用/edit接口前,是用了个BeanShell预处理程序,写的是个java脚本

图片.png

import com.alibaba.fastjson.JSONObject;


//log.info("hello");
String jsonDataStr = vars.get("lineData");
//log.info(jsonDataStr);
JSONObject jsonData = JSONObject.parseObject(jsonDataStr);

// 将json中的参数拆开来单独存储在jmeter变量中
// 为什么不直接使用lineData这个对象呢,因为使用这个接口内部会报一个utf-8转码的报错,就干脆把参数拆开好了

// 修改状态为pending
vars.put("status","pending");

// 下列数据不做修改
// 这里转成String是因为vars里只能存数字的话会报错
vars.put("id",String.valueOf(jsonData.get("id")));
vars.put("name",jsonData.get("name"));
vars.put("version",String.valueOf(jsonData.get("version")));
vars.put("_token",jsonData.get("_token"));
// 如果有会为空的字段需要转成空字符串,否则参数为空的话在使用改参数的地方并不会传空值,而是会直接使用这个参数的参数字符串,即"${description}"不会被替换为null而是会直接使用"${description}"
vars.put("description",jsonData.get("description")==null?:"",jsonData.get("description"));

5、调用/edit接口,参数填“消息体数据”

{
            "id":"${id}",
            "name":"${name}",
            "status":"${status}",
            "description":"${description}",
            "version":"${version}",
            "_token":"${_token}"
        }

6、完结撒花

你可能感兴趣的:(jmeter处理参数(json提取器和BeanShell脚本))