beanshell数组批量数组数据传入数组类型参数接口测试场景——BeanShell完美解决

beanshell数组批量数组数据传入数组类型参数接口场景——BeanShell完美解决

1.概述

做自动化接口测试会遇到许多的测试场景,有些复杂的场景需要脚本语言的参与才能帮助我们胜任自动化测试,下面就来介绍一个复杂场景解决思路。

1.1.场景描述

  • A接口返回值中有一个参数是数组类型且该数组中有多个值。
  • B接口参数入参也是一个数组类型且它的参数必须是A接口动态返回的数组类型中全部的数据。

1.2.场景接口数据展示

A接口返回数据类型结构

从接口返回数据中遍历data数组,提取出所有的id值,然后保存到新的数组变量。

{
    "code": 0,
    "data": [
        {
            "id": 1,
            "menuId": null,
            "operateName": "购物车",
            "selected": false
        },
        {
            "id": 2,
            "menuId": null,
            "operateName": "订单",
            "selected": false
        },
        {
            "id": 4,
            "menuId": null,
            "operateName": "拼单",
            "selected": false
        },
        {
            "id": 5,
            "menuId": null,
            "operateName": "上架新品",
            "selected": false
        },
        {
            "id": 6,
            "menuId": null,
            "operateName": "商品详情",
            "selected": false
        },
        {
            "id": 7,
            "menuId": null,
            "operateName": "好友圈",
            "selected": false
        },
        {
            "id": 8,
            "menuId": null,
            "operateName": "销售额",
            "selected": false
        },
        {
            "id": 9,
            "menuId": null,
            "operateName": "用户详情",
            "selected": false
        },
        {
            "id": 10,
            "menuId": null,
            "operateName": "短信",
            "selected": false
        },
        {
            "id": 11,
            "menuId": null,
            "operateName": "售后",
            "selected": false
        }
    ],
    "message": "成功"
}
B接口入参结构

B接口shopId参数是一个数组类型,它的值既不是固定的且不是一个值,而是A接口返回的所有值。每次自动化测试的时候都需要将A接口返回数组的值全部传入B接口中。

{
    "data": {
        "shopId": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10
        ]
    }
}

1.3.测试思路分析

  • 我们要做的事情从A接口拿到数组并传给B接口。
  • 难点分析如何将A接口返回的数组数据保存到变量中,然后如何将数组所有的数据赋值给B接口的参数。

2.开发脚本实现传入批量数据场景

2.1.导入jar包

在脚本开发中需要引入两个jar包,他们帮助我们实现核心功能。

  • jar包上传入口
    在这里插入图片描述

  • 上传jar包
    上传jar包路径,在我们本地安装的java \jre\lib\rt.jar
    在这里插入图片描述

2.2.封装A接口数据脚本

脚本开发思路在脚本注释中非常完善,这里就不再描述。

//注意必须导入这两个包,否则脚本运行会保存找不到这两个包提供的方法
import org.json.*;
import java.util.Collections;

public static void getValue(){
    // 接收接口返回的数据
    String response_data = prev.getResponseDataAsString();
    // 转换成JSONObject 对象类型,这样java才能操作对象里面数据
    JSONObject data_obj= new JSONObject(response_data);
    
    //判断当前响应数据是否为空,如果为空直接返回null,不再走后面的for流程。
     if (data_obj.get("data").equals(null)){
        log.info("接口返回数据列表为空");
        
    } else{
        // 获取JSONObject里面数组类型数据 data是个数组类型,将数组赋值给JSONArray
        JSONArray data_array = data_obj.getJSONArray("data");
        
        int len = data_array.length();
        // 创建List集合封装数组数据
        ArrayList ids = new ArrayList();
        // 遍历数组数据,将数据封装到集合中
        for(int i=0;i<len;i++){
            JSONObject jsonTemp =  (JSONObject)data_array.getJSONObject(i);
            ids.add(jsonTemp.get("id"));
        }
        /*
            这里非常关键,这里**也是一个坑**。
            jmeter设置变量有两个方法,它们的使用场景区别非常大,用错了就无法取到值。
            vars.put("key","value"): 该方法的value值只能是字符串类型,传入其他的类型就会报错。
            vars.putObject("key",list、Object):该方法的value值类型可以接收Object类型、List、数组类型。
            
        */
        vars.putObject("menuId",ids);
        log.info("测试========" + ids);    
    } 
}

getValue();


2.3.接收数组参数脚本

B接口调用A接口变量时会有一个坑,引用变量时千万不能加上双引号否则会强转,导致接口返回失败。
在这里插入图片描述

2.4.测试B接口结束批量数据

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值