应用场景介绍: {#heading-1}
调用系统的 API 接口,获取目标数据,将目标数据自动入库,并利用 DataEase 制作数据分析看板。
DataEase 本身是支持 API 数据集的,不过存在一定的局限性。比如当前我们要获取数据的系统接口仅支持定量数据的获取,不支持一次性全量数据的获取,且系统接口是固定的,接口二次开发的话需要耗费较大的成本。在这种场景下,DataEase 无法做到像 MeterSphere 中的场景循环控制器的配置。
因此我们可以借助 MeterSphere 这款开源测试工具的接口自动化场景功能,分批循环获取数据并将数据入库,入库后再通过 DataEase 对数据进行分析。
本文以获取易快报系统的合同数据为例进行介绍,针对不同的使用场景所涉及的步骤,自动化场景会有所不同,此文仅供参考。
步骤: {#heading-2}
1、梳理接口获取目标数据的流程以及参数 {#heading-3}
(1)获取授权 accessToken
接口文档地址:https://docs.ekuaibao.com/docs/open-api/getting-started/auth
(2)获取业务对象 ID
接口文档地址:https://docs.ekuaibao.com/docs/open-api/datalink/get-entity-list
(3)获取业务对象实例列表(每次请求获取数据存在条数限制)
接口文档地址:https://docs.ekuaibao.com/docs/open-api/datalink/get-entity-info
以上接口可通过 PostMan 或其他接口调试工具测试通过后,记录其接口请求地址及参数信息,后面配置自动化测试场景时会用到。
2、环境准备 {#heading-4}
(1)部署 MeterSphere
可参考官方文档进行部署:
在线安装:https://metersphere.io/docs/v2.x/installation/online_installation/
离线安装:https://metersphere.io/docs/v2.x/installation/offline_installation/
(2)部署 DataEase
可参考官方文档进行部署:
在线安装:https://dataease.io/docs/installation/online_installation/
离线安装:https://dataease.io/docs/installation/offline_installation/
(3)数据库及入库表的准备
根据目标数据的数据字段设计存储数据的表结构,并创建数据库表(此处我使用的是 MySQL 数据库)
-- 建表语句如下
DROP TABLE IF EXISTS `t_fit2cloud_contract`;
CREATE TABLE `t_fit2cloud_contract` (
`id` varchar(20) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`code` varchar(255) DEFAULT NULL COMMENT '合同编号',
`form_code` varchar(255) DEFAULT NULL COMMENT '合同编号',
`form_name` varchar(255) DEFAULT NULL,
`form_签约客户名称` varchar(255) DEFAULT NULL COMMENT '签约客户名称',
`form_最终客户名称` varchar(255) DEFAULT NULL COMMENT '最终客户名称',
`form_合同所属区域` varchar(20) DEFAULT NULL COMMENT '合同所属区域',
`form_合同金额` float(10,4) DEFAULT NULL,
`form_期初已开票金额` float(10,4) DEFAULT NULL,
`form_累计已开票金额` float(10,4) DEFAULT NULL,
`form_已回款金额` float(10,4) DEFAULT NULL,
`form_预计毛利率` float(10,4) DEFAULT NULL,
`form_实际毛利率` float(10,4) DEFAULT NULL,
`form_合作伙伴名称` varchar(255) DEFAULT NULL,
`form_签约方式` varchar(20) DEFAULT NULL,
`form_回款合同等级` varchar(4) DEFAULT NULL,
`form_费用所属部门` varchar(60) DEFAULT NULL,
`form_负责人` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3、将接口获取数据的流程转化为 MeterSphere 的接口自动化场景 {#heading-5}
(1)环境信息配置
(2)接口定义,利用第 1 步中梳理的接口进行配置,分别创建获取 token 接口和获取合同接口。
(3)制作场景
创建场景中的第一个步骤,获取 token 认证信息。
配置运行环境信息,选择第(1)步中配置好的环境信息,并按照实际的使用场景设置环境变量。
添加场景的第二步,循环控制器,此处循环控制器用于循环请求获取合同数据,直至请求完所有的合同数据为止,设置的进入循环的条件为合同总数大于当前已入库的数据条数(此处合同总数在每次接口请求中都有返回,第一次进入循环前设置了默认值,接口请求中设置后置操作提取此数值覆盖初始值)。
//先引入Jar包 import org.json.*; log.info("json::"+vars.get("item")); String json = vars.get("item");
//将string 类型返回值构造成Jsonobject 对象 JSONObject data_obj= new JSONObject(json); //获取Json中 id 的值 String id= data_obj.get("id").toString(); vars.put("id", id); log.info("id::"+id);
if(data_obj.has("name")){ String name= data_obj.get("name").toString(); vars.put("name", name); log.info("name::"+name); }else{ vars.put("name", ""); }
if(data_obj.has("code")){ String code= data_obj.get("code").toString(); vars.put("code", code); log.info("code::"+code); }else{ vars.put("code", ""); }
if(data_obj.has("ownerId")){ String ownerId= data_obj.get("ownerId").toString(); vars.put("ownerId", ownerId); log.info("ownerId::"+ownerId);
}else{ vars.put("ownerId", ""); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_code")){ String form_code= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_code").toString(); vars.put("form_code", form_code); log.info("form_code::"+form_code);
}else{ vars.put("form_code", ""); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_name")){ String form_name= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_name").toString(); vars.put("form_name", form_name); log.info("form_name::"+form_name);
}else{ vars.put("form_name", ""); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_签约客户名称")){ String form_contract_customer= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_签约客户名称").toString(); vars.put("form_contract_customer", form_contract_customer); log.info("form_contract_customer::"+form_contract_customer); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_最终客户名称")){ String form_end_customer= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_最终客户名称").toString(); vars.put("form_end_customer", form_end_customer); log.info("form_end_customer::"+form_end_customer); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_合同所属区域")){ String form_region= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_合同所属区域").toString(); vars.put("form_region", form_region); log.info("form_region::"+form_region); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_合同金额")){ if(data_obj.get("form").get("E_fd0e3a1b6033d2d59800_合同金额").toString()=="null"){ vars.put("form_contract_money", "0"); log.info("form_contract_money::"+form_contract_money); }else{ String form_contract_money= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_合同金额").get("standard").toString(); vars.put("form_contract_money", form_contract_money); log.info("form_contract_money::"+form_contract_money); } }else{ vars.put("form_contract_money", "0"); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_期初已开票金额")){ if(data_obj.get("form").get("E_fd0e3a1b6033d2d59800_期初已开票金额").toString()=="null"){ vars.put("form_draw_bill_money", "0"); log.info("form_draw_bill_money::"+form_draw_bill_money); }else{ String form_draw_bill_money= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_期初已开票金额").get("standard").toString(); vars.put("form_draw_bill_money", form_draw_bill_money); log.info("form_draw_bill_money::"+form_draw_bill_money); } }else{ vars.put("form_draw_bill_money", "0"); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_累计已开票金额")){ if(data_obj.get("form").get("E_fd0e3a1b6033d2d59800_累计已开票金额").toString()=="null"){ vars.put("form_total_draw_bill_money", "0"); log.info("form_total_draw_bill_money::"+form_total_draw_bill_money); }else{ String form_total_draw_bill_money= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_累计已开票金额").get("standard").toString(); vars.put("form_total_draw_bill_money", form_total_draw_bill_money); log.info("form_total_draw_bill_money::"+form_total_draw_bill_money); } }else{ vars.put("form_total_draw_bill_money", "0"); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_已回款金额")){ if(data_obj.get("form").get("E_fd0e3a1b6033d2d59800_已回款金额").toString()=="null"){ vars.put("form_return_money", "0"); log.info("form_return_money::"+form_return_money); }else{ String form_return_money= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_已回款金额").get("standard").toString(); vars.put("form_return_money", form_return_money); log.info("form_return_money::"+form_return_money); } }else{ vars.put("form_return_money", "0"); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_预计毛利率")){ if(data_obj.get("form").get("E_fd0e3a1b6033d2d59800_预计毛利率").toString()=="null"){ vars.put("form_expect_interes_rate", "0"); }else{ String form_expect_interes_rate= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_预计毛利率").toString(); vars.put("form_expect_interes_rate", form_expect_interes_rate); log.info("form_expect_interes_rate::"+form_expect_interes_rate); } }else{ vars.put("form_expect_interes_rate", "0"); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_实际毛利率")){ if(data_obj.get("form").get("E_fd0e3a1b6033d2d59800_实际毛利率").toString()=="null"){ vars.put("form_actual_interes_rate", "0"); }else{ String form_actual_interes_rate= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_实际毛利率").toString(); vars.put("form_actual_interes_rate", form_actual_interes_rate); log.info("form_actual_interes_rate::"+form_actual_interes_rate); } }else{ vars.put("form_actual_interes_rate", "0"); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_合作伙伴名称")){ String form_partner_name= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_合作伙伴名称").toString(); vars.put("form_partner_name", form_partner_name); log.info("form_partner_name::"+form_partner_name); }
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_签约方式")){ String form_signing_way= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_签约方式").toString(); vars.put("form_signing_way", form_signing_way); log.info("form_signing_way::"+form_signing_way);
}
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_回款合同等级")){ String form_contract_level= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_回款合同等级").toString(); vars.put("form_contract_level", form_contract_level); log.info("form_contract_level::"+form_contract_level);
}
if(data_obj.get("form").has("E_fd0e3a1b6033d2d59800_费用所属部门")){ String form_belong_depart= data_obj.get("form").get("E_fd0e3a1b6033d2d59800_费用所属部门").toString(); vars.put("form_belong_depart", form_belong_depart); log.info("form_belong_depart::"+form_belong_depart);
}
前置操作脚本如下:
log.info("begin count::${count}");
int count= Integer.parseInt("${count}")+1;
log.info("count+1=::"+count);
vars.put("count", count+"");
log.info("end count::"+vars.get("count"));
后置操作 SQL 脚本如下:
-- 更新数据
UPDATE t_fit2cloud_contract SET name='${name}',code='${code}',form_code='${form_code}',form_name='${form_name}',form_签约客户名称='${form_contract_customer}',form_最终客户名称='${form_end_customer}',
form_合同所属区域='${form_region}',form_合同金额='${form_contract_money}',form_期初已开票金额='${form_draw_bill_money}',form_累计已开票金额='${form_total_draw_bill_money}',form_已回款金额='${form_return_money}',
form_预计毛利率='${form_expect_interes_rate}',form_实际毛利率='${form_actual_interes_rate}',form_合作伙伴名称='${form_partner_name}',form_签约方式='${form_signing_way}',
form_回款合同等级='${form_contract_level}',form_费用所属部门='${form_belong_depart}' WHERE id='${id}';
`-- 插入数据
INSERT INTO t_fit2cloud_contract(id,name,code,form_code,form_name,form_签约客户名称,form_最终客户名称,form_合同所属区域,form_合同金额,form_期初已开票金额,form_累计已开票金额,form_已回款金额,form_预计毛利率,form_实际毛利率,form_合作伙伴名称,form_签约方式,form_回款合同等级,form_费用所属部门,form_负责人)
VALUE ('${id}','${name}','${code}','${form_code}','${form_name}','${form_contract_customer}','${form_end_customer}','${form_region}','${form_contract_money}','${form_draw_bill_money}','${form_total_draw_bill_money}','${form_return_money}','${form_expect_interes_rate}','${form_actual_interes_rate}',
'${form_partner_name}','${form_signing_way}','${form_contract_level}','${form_belong_depart}','');`
也可以直接合并为一个SQL脚本:
INSERT INTO t_fit2cloud_contract(id,name,code,form_code,form_name,form_签约客户名称,form_最终客户名称,form_合同所属区域,form_合同金额,form_期初已开票金额,form_累计已开票金额,form_已回款金额,form_预计毛利率,form_实际毛利率,form_合作伙伴名称,form_签约方式,form_回款合同等级,form_费用所属部门,form_负责人)
VALUE ('${id}','${name}','${code}','${form_code}','${form_name}','${form_contract_customer}','${form_end_customer}','${form_region}','${form_contract_money}','${form_draw_bill_money}','${form_total_draw_bill_money}','${form_return_money}','${form_expect_interes_rate}','${form_actual_interes_rate}',
'${form_partner_name}','${form_signing_way}','${form_contract_level}','${form_belong_depart}','${ownerId}')
ON DUPLICATE KEY
UPDATE name='${name}',code='${code}',form_code='${form_code}',form_name='${form_name}',form_签约客户名称='${form_contract_customer}',form_最终客户名称='${form_end_customer}',
form_合同所属区域='${form_region}',form_合同金额='${form_contract_money}',form_期初已开票金额='${form_draw_bill_money}',form_累计已开票金额='${form_total_draw_bill_money}',form_已回款金额='${form_return_money}',
form_预计毛利率='${form_expect_interes_rate}',form_实际毛利率='${form_actual_interes_rate}',form_合作伙伴名称='${form_partner_name}',form_签约方式='${form_signing_way}',
form_回款合同等级='${form_contract_level}',form_费用所属部门='${form_belong_depart}',form_负责人='${ownerId}';
后置操作参数置空脚本如下:
log.info("start 参数置空++++++++++++++");
vars.put("id", "");
log.info("id::"+id);
vars.put("name", "");
vars.put("code", "");
vars.put("form_code", "");
vars.put("form_name", "");
vars.put("form_contract_customer", "");
vars.put("form_end_customer", "");
vars.put("form_region", "");
vars.put("form_contract_money", "0");
vars.put("form_draw_bill_money", "0");
vars.put("form_total_draw_bill_money", "0");
vars.put("form_return_money", "0");
vars.put("form_expect_interes_rate", "0");
vars.put("form_actual_interes_rate", "0");
vars.put("form_partner_name", "");
vars.put("form_signing_way", "");
vars.put("form_contract_level", "");
vars.put("form_belong_depart", "");
log.info("end 参数置空++++++++++++++");
点击开始执行,等待执行结束即可。
(4)检查数据入库情况,查询数据库表中的数据,可以看到数据已经入库了。
4、DataEase 数据接入 {#heading-6}
(1)配置数据源
此处我们使用的是 MySQL 数据源,详细配置可参考官方文档。
https://dataease.io/docs/user_manual/datasource_configuration/MySQL_datasource_configuration/
(2)配置数据集
添加好数据源之后就可以正常添加数据库数据集或者 SQL 数据集等进行使用了,数据集的相关使用可参考官方文档
https://dataease.io/docs/user_manual/dataset_configuration/dataset_database/
(3)使用数据集制作仪表板,进行数据分析
仪表板的相关操作请移步官方文档进行学习
https://dataease.io/docs/user_manual/dashboard_create/