美文网首页
jmeter处理参数(json提取器和BeanShell脚本)

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

作者: 东南枝下 | 来源:发表于2021-08-08 17:25 被阅读0次

    场景:
    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脚本)

          本文链接:https://www.haomeiwen.com/subject/tnsovltx.html