Commit 6cac9e12 authored by wangliping's avatar wangliping

123

parents
Pipeline #10904 failed with stages
# EZ_TEST 使用说明
1. excel用例编写说明
![image-20210202111839946](C:\Users\huhong\AppData\Roaming\Typora\typora-user-images\image-20210202111839946.png)
2. 场景用例组装
![image-20210202112035198](C:\Users\huhong\AppData\Roaming\Typora\typora-user-images\image-20210202112035198.png)
3. 复杂逻辑扩展
![image-20210202112329010](C:\Users\huhong\AppData\Roaming\Typora\typora-user-images\image-20210202112329010.png)
4. ini中配置
![image-20210209160825653](C:\Users\huhong\AppData\Roaming\Typora\typora-user-images\image-20210209160825653.png)
\ No newline at end of file
from base.logs import case_log
from base.setting import setting
loginfo = case_log()
\ No newline at end of file
import requests
import json
from base.setting import setting
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from base import loginfo
import socket
socket.setdefaulttimeout(20)
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
class ApiRequests:
"""
请求类,对请求的方法,数据的处理,主要json数据类型
"""
def __init__(self, header=None):
self.header = json.loads(setting.env['header'])
if header:
self.header.update(header)
def post_main(self, url, data):
return requests.post(url=url, data=data, headers=self.header, verify=False)
def get_main(self, url):
return requests.get(url=url, headers=self.header, verify=False)
def run_main(self, url, data=None, flag=True, method='post'):
"""
:param url: 接口地址
:param data: 请求数据
:param flag: 是否执行
:param method: 请求方式
:return: 结果数据
"""
url = setting.env['domain'] + url
if flag:
# 进行编码处理
if method.lower() == 'get':
res = self.get_main(url)
else:
loginfo.debug('请求参数: \n\t\t\t\t\t\t{}'.format(data))
res = self.post_main(url, json.dumps(data))
return res.content.decode('utf-8')
This diff is collapsed.
import logging
from logging import handlers
from base.setting import setting
import time
import os
log_name = os.path.join(setting.log_path['path'], time.strftime('%Y-%m-%d', time.localtime()) + '-log.log')
def case_log():
log_format = '%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s'
logging.basicConfig(level=logging.DEBUG, format=log_format)
logger = logging.getLogger()
# 屏幕写入
# th = logging.StreamHandler()
# 文件输出
format_str = logging.Formatter(log_format)
sh = handlers.TimedRotatingFileHandler(filename=log_name, when='D', encoding='utf-8')
sh.setFormatter(format_str)
logger.addHandler(sh)
# logger.addHandler(th)
return logger
if __name__ == '__main__':
log = case_log()
log.debug('hello')
\ No newline at end of file
"""
配置类,读取配置信息
"""
import configparser
import os
class Setting:
def __init__(self, path=None):
if not path:
base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
self.config_path = os.path.join(base_path, 'config/config.ini')
else:
self.config_path = path
self.config = configparser.ConfigParser()
self.config.read(self.config_path, encoding='utf-8')
self.setting()
def setting(self):
for attr in self.config.sections():
self.__dict__[attr] = dict(self.config.items(attr))
setting = Setting()
from util.excel_data import OperatorExcel
import copy
class TestData:
def __init__(self, file=None):
api_datas = OperatorExcel(file).get_all_case()
scene_datas = OperatorExcel(file).get_scene_case()
self.title, self.case_data = api_datas[0], api_datas[1:]
self.scene_title, self.scene_data = scene_datas[0], scene_datas[1:]
def get_data(self):
case_datas = []
for case in self.case_data:
case_dict = {}
for index, title in enumerate(self.title):
case_dict[title] = case[index]
case_datas.append(case_dict)
return case_datas
def get_scene_data(self):
scene_datas = []
for case in self.scene_data:
case_dict = {}
for index, title in enumerate(self.scene_title):
case_dict[title] = case[index]
scene_datas.append(case_dict)
for scene in scene_datas:
if scene['scene_case']:
a = copy.deepcopy(scene['scene_case'])
tmp_case = copy.deepcopy(a.split('-'))
tmp_cases = []
for c in tmp_case:
for cc in self.get_data():
if c == cc['name']:
tmp_cases.append(cc)
scene['scene_case'] = tmp_cases
return scene_datas
if __name__ == '__main__':
TestData().get_scene_data()
import json
import os
from base import loginfo
from base.setting import setting
class TestCase:
"""
测试基类
"""
def __init__(self, **kwargs):
"""
:param name: 用例名称
:param priority: 优先级 1,2,3
:param api_address: 请求地址
:param save_field: 需要保存的字段
:param method: 请求方法 post,get
:param data: 请求参数
:param expected: 期望结果
:param actual: 实际结果
:param case_pass: 是否通过 成功,失败
"""
self.name = kwargs.get('name')
self.priority = kwargs.get('priority')
self.api_address = kwargs.get('api_address')
self.method = kwargs.get('method')
# 请求参数--需要转换成json,支持以F=开头的路径方式传入
self.request_data = kwargs.get('request_data')
if str(self.request_data).startswith('F='):
path = self.request_data.split('F=')[-1]
if setting.json_data['json_data_path']:
base_path = setting.json_data['json_data_path']
self.request_data = self.read_json_case(os.path.join(base_path, path))
else:
self.request_data = self.read_json_case(path)
elif isinstance(self.request_data, str):
if self.request_data:
self.request_data = json.loads(self.request_data)
self.expected = kwargs.get('expected')
self.actual = kwargs.get('actual')
self.case_pass = kwargs.get('case_pass')
self.assert_method = kwargs.get('assert_method')
self.save_field = kwargs.get('save_field')
self.logs = None
def read_json_case(self, path):
with open(path, 'r', encoding='utf-8') as fp:
data = fp.read()
try:
data = json.loads(data)
except Exception as e:
print('json数据转换失败{}'.format(e))
finally:
return data
def api_assert(self):
"""
根据传入参数调用断言方法
:return: bool
"""
loginfo.debug('期望结果: {}, 断言方式: {}'.format(self.expected, self.assert_method))
if self.assert_method == 'include_text':
self.include_text()
elif self.assert_method == 'include_json':
self.include_json()
elif self.assert_method == 'equal_text':
self.equal_text()
# elif self.assert_method == '':
# self.assert_json()
else:
self.equal_json()
# 文本包含
def include_text(self):
if self.expected in str(self.actual):
self.case_pass = True
# json包含
def include_json(self):
if isinstance(self.expected, str):
self.expected = json.loads(self.expected)
if isinstance(self.actual, str):
self.actual = json.loads(self.actual)
if self.assert_json(self.expected, self.actual):
self.case_pass = True
def assert_json(self, exp, act):
if exp == act:
return True
elif isinstance(exp, dict):
for j in exp.keys():
if j in act:
return self.assert_json(exp[j], act[j])
else:
return False
elif isinstance(exp, list) and isinstance(act, list):
for i in exp:
if i in act:
return self.assert_json(i, act[act.index(i)])
else:
return False
else:
return False
# 文本相等
def equal_text(self):
if self.expected == self.actual:
self.case_pass = True
# json相等
def equal_json(self):
if self.expected == self.actual:
self.case_pass = True
if __name__ == '__main__':
a = {"code":'0'}
b = {"code":'0'}
print(a)
print(b)
a = TestCase().assert_json(a, b)
print(a)
[env]
domain=https://hmdh--gbltest.dev1.logwirecloud.com/
header={"Content-Type": "application/json;charset=UTF-8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}
[login]
username=test
password=test
[log_path]
path=../logs/
[report]
name=API-TEST-DEMO
report_path=../report/report.html
[json_data]
json_data_path=../data/json_data/
[warehouse_rule]
warehouse_name=GQC-广汽中心仓
warehouse_code=GQC-广汽中心仓
[seq_env]
start=0
step=2
[user_name]
user_name=张三
name_xid=123456
[env]
domain=http://119.3.73.53:18082/
header={"Content-Type": "application/json;charset=UTF-8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"}
[login]
username=ADMIN
password=password
[log_path]
path=../logs/
[report]
name=API-TEST-DEMO
report_path=../report/report.html
[json_data]
json_data_path=../data/json_data/
[warehouse_rule]
warehouse_name=茶园⼯⼚-线边仓
warehouse_code=2003
"""
支持用例编写的另一种方式--相较于excel,使用py文件编写用例,可用python相关的一些方法来制造数据,更加灵活
"""
import random
from base.setting import setting
whid =setting.warehouse_rule['warehouse_name']
ruleid = whid + '预分配规则'
# 接口用例合集
API = [
{'name': 'auto', 'priority': '1',
'api_address': 'api/query/warehouse_auto_q/auto',
'save_field': 'id=$.data.datas[?(@.name=="{}")].id'.format(whid), 'method': 'post',
'request_data': 'F=auto.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'batch_rule', 'priority': '1',
'api_address': 'api/query/rule_lot_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=batch_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'mixing_rule', 'priority': '1',
'api_address': 'api/query/rule_mix_storage_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=mixing_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'receiving_verification_rule', 'priority': '1',
'api_address': 'api/query/rule_in_validation_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=receiving_verification_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'turnover_rule', 'priority': '1',
'api_address': 'api/query/rule_rotate_q/action/commonSave',
'save_field': 'turnover_rule_id=$.data.header.id', 'method': 'post',
'request_data': 'F=turnover_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'listing_rule', 'priority': '1',
'api_address': 'api/query/rule_putaway_q/action/commonSave',
'save_field': 'listing_rule_id=$.data.header.id', 'method': 'post',
'request_data': 'F=listing_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'listing_rule_s', 'priority': '1',
'api_address': 'api/query/rule_putaway_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=listing_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'pre_allocation_rule', 'priority': '1',
'api_address': 'api/query/rule_preallocate_q/action/commonSave',
'save_field': 'pre_allocation_id=$.data.header.id', 'method': 'post',
'request_data': 'F=pre_allocation_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'allocation_rule', 'priority': '1',
'api_address': 'api/query/rule_allocate_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=allocation_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'cutbox_rule', 'priority': '1',
'api_address': 'api/query/rule_cutbox_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=cutbox_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'wave_rule', 'priority': '1',
'api_address': 'api/query/rule_wave_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=wave_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'pick_order_rule', 'priority': '1',
'api_address': 'api/query/rule_pick_order_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=pick_order_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'out_validation_rule', 'priority': '1',
'api_address': 'api/query/rule_out_validation_q/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=out_validation_rule.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
{'name': 'make_kuwei', 'priority': '1',
'api_address': 'api/query/w_location/action/commonSave',
'save_field': '', 'method': 'post',
'request_data': 'F=make_kuwei.json', 'expected': {"messageType": "success"},
'assert_method': 'include_json'},
]
# 场景用例
SCENE = [{'name': 'make_kuwei',
'scene_case': ['make_kuwei'], 'priority': '', 'is_run': '1', 'case_pass': ''},
]
#[i['name'] for i in API]
if __name__ == '__main__':
print('re_allocation_id=$.data.header[?(@.name=="{}")].id'.format(ruleid))
\ No newline at end of file
{"selectedRows":[{"header":{"currentData":{"id":"","warehouse_id":"292114446938148864","code":"12","name":"121212","remark":"","enabled":true,"preallocate_rule_id":"","domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"10001","warehouse__name":"茶园工厂外库","preallocate__code":"","preallocate__name":"","_TX_CODE":""},"originalData":{"id":"","warehouse_id":"","code":"","name":"","remark":"","enabled":true,"preallocate_rule_id":"","domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"","warehouse__name":"","preallocate__code":"","preallocate__name":"","_TX_CODE":""}},"lines":{"rows":[]}}],"aux":{"new":true}}
\ No newline at end of file
{"keyword":null,"template":"${code!}-${name!}","restriction":null,"pageNum":0,"caseSensitive":true}
\ No newline at end of file
{"keyword":null,"template":"${code!}-${name!}","restriction":null,"fields":["code","name"],"pageNum":0,"caseSensitive":true,"queryFields":{"warehouse_id":""}}
\ No newline at end of file
{"selectedRows":[{"header":{"currentData":{"id":"","warehouse_id":"292114446938148864","code":"111111","name":"茶园工厂外库-批次规则","remark":"","status":true,"domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"10001","warehouse__name":"茶园工厂外库","_TX_CODE":""},"originalData":{"id":"","warehouse_id":"","code":"","name":"","remark":"","status":true,"domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"","warehouse__name":"","_TX_CODE":""}},"fields":{"rows":[]}}],"aux":{"new":true}}
\ No newline at end of file
{"selectedRows":[{"header":{"currentData":{"id":"","warehouse_id":"292114446938148864","code":"341324","name":"1234321","remark":"","enabled":true,"domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"10001","warehouse__name":"茶园工厂外库","_TX_CODE":""},"originalData":{"id":"","warehouse_id":"","code":"","name":"","remark":"","enabled":true,"domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"","warehouse__name":"","_TX_CODE":""}},"computes":{"rows":[]},"groups":{"rows":[]},"sorts":{"rows":[]}}],"aux":{"new":true}}
\ No newline at end of file
{"selectedRows":[{"header":{"currentData":{"id":"","warehouse_id":"292114446938148864","code":"345345","name":"123","remark":"","enabled":true,"domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"10001","warehouse__name":"茶园工厂外库","_TX_CODE":""},"originalData":{"id":"","warehouse_id":"","code":"","name":"","remark":"","enabled":true,"domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"","warehouse__name":"","_TX_CODE":""}},"lines":{"rows":[]}}],"aux":{"new":true}}
\ No newline at end of file
{"selectedRows":[{"header":{"currentData":{"id":"","model1":"","model2":"","model3":"","code":"SH-KW-L-001","refer_code":"SH-KW-L-001","name":"SH-KW-L-001","address":"292114735460126720","door":"","parent":"293318029012504576","truck":"","qty":"","avl_qty":"","length":2500,"width":500,"height":500,"longitude":"","latitude":"","gps_fence":"","wx_fence":"","truck_type":"","capacity_type":"volume","capacity_type_label":"","load_capacity":"","unload_capacity":"","static_minute":"","sort_num":"","detail":"","recognition":"","barrier":"","bulletin":"","speaker":"","parent2":"293318429983772672","roadway":"293308432495284224","storage_type":"","storage_type_label":"","shelf_type":"","shelf_type_label":"","x_coordinate":0,"y_coordinate":0,"z_coordinate":0,"x_coordinate2":"","y_coordinate2":"","z_coordinate2":"","bays":"","bay_length":"","bay_space":"","heap_lines":"","heap_tiers":"","row":"","column":"","layer":"","layer_count":"","abc_type":"","abc_type_label":"","line_order":"","line_order2":"","line_order3":"","floor":"","volume":"","ground_pallet_count":"","stack_limit":"","pack_handle_type":"","pack_handle_type_label":"","lose_id":false,"mix_rule_id":"","zone_row_mix_rule_id":"","zone_col_mix_rule_id":"","mix_rule_name":"","zone_row_mix_rule_name":"","zone_col_mix_rule_name":"","storage_condition":"","storage_condition_label":"","sku_form_types":[],"sku_form_types_label":"","section_type":"OTHER","section_type_label":"","enabled":true,"description":"","effective_date":"","expiration_date":"","dock_type":"","dock_type_label":"","gateway_type":"","gateway_type_label":"","operation_interval":"","berthing_time":"","rule":"","calendar":"","is_auto":false,"is_open":true,"zone":"","hight_low_type":"","hight_low_type_label":"","w_zone_type":"","w_zone_type_label":"","w_location_type":"","w_location_type_label":"","roadway_in_location_id":"","roadway_out_location_id":"","zone_stage_location_id":"","domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"10002","warehouse__name":"上海 DC 库","section__code":"","section__name":"","section__section_type":"","section__section_type_label":"","zone__code":"SH-KQ001","zone__name":"SH-KQ001","roadway__code":"SH-XD001","roadway__name":"SH-XD001","_TX_CODE":""},"originalData":{"id":"","model1":"","model2":"","model3":"","code":"","refer_code":"","name":"","address":"","door":"","parent":"","truck":"","qty":"","avl_qty":"","length":"","width":"","height":"","longitude":"","latitude":"","gps_fence":"","wx_fence":"","truck_type":"","capacity_type":"volume","capacity_type_label":"","load_capacity":"","unload_capacity":"","static_minute":"","sort_num":"","detail":"","recognition":"","barrier":"","bulletin":"","speaker":"","parent2":"","roadway":"","storage_type":"","storage_type_label":"","shelf_type":"","shelf_type_label":"","x_coordinate":"","y_coordinate":"","z_coordinate":"","x_coordinate2":"","y_coordinate2":"","z_coordinate2":"","bays":"","bay_length":"","bay_space":"","heap_lines":"","heap_tiers":"","row":"","column":"","layer":"","layer_count":"","abc_type":"","abc_type_label":"","line_order":"","line_order2":"","line_order3":"","floor":"","volume":"","ground_pallet_count":"","stack_limit":"","pack_handle_type":"","pack_handle_type_label":"","lose_id":false,"mix_rule_id":"","zone_row_mix_rule_id":"","zone_col_mix_rule_id":"","mix_rule_name":"","zone_row_mix_rule_name":"","zone_col_mix_rule_name":"","storage_condition":"","storage_condition_label":"","sku_form_types":"","sku_form_types_label":"","section_type":"","section_type_label":"","enabled":true,"description":"","effective_date":"","expiration_date":"","dock_type":"","dock_type_label":"","gateway_type":"","gateway_type_label":"","operation_interval":"","berthing_time":"","rule":"","calendar":"","is_auto":false,"is_open":true,"zone":"","hight_low_type":"","hight_low_type_label":"","w_zone_type":"","w_zone_type_label":"","w_location_type":"","w_location_type_label":"","roadway_in_location_id":"","roadway_out_location_id":"","zone_stage_location_id":"","domain_name":"","version":"0","insert_user":"","insert_user_common_name":"","insert_date":"","update_user":"","update_user_common_name":"","update_date":"","warehouse__code":"","warehouse__name":"","section__code":"","section__name":"","section__section_type":"","section__section_type_label":"","zone__code":"","zone__name":"","roadway__code":"","roadway__name":"","_TX_CODE":""}}}],"aux":{"new":true}}
\ No newline at end of file
{
"selectedRows":[
{
"header":{
"currentData":{
"id":"",
"model1":"",
"model2":"",
"model3":"",
"code":"A1-A1-1-101",
"refer_code":"A1-A1-1-101",
"name":"A1-A1-1-101",
"address":"293329199773646848",
"door":"",
"parent":"293332980317945856",
"truck":"",
"qty":"",
"avl_qty":"",
"length":1000,
"width":1000,
"height":500,
"longitude":"",
"latitude":"",
"gps_fence":"",
"wx_fence":"",
"truck_type":"",
"capacity_type":"volume",
"capacity_type_label":"",
"load_capacity":"",
"unload_capacity":"",
"static_minute":"",
"sort_num":"",
"detail":"",
"recognition":"",
"barrier":"",
"bulletin":"",
"speaker":"",
"parent2":"293333187927605248",
"roadway":"293331476613824512",
"storage_type":"STORAGE",
"storage_type_label":"",
"shelf_type":"",
"shelf_type_label":"",
"x_coordinate":0,
"y_coordinate":0,
"z_coordinate":0,
"x_coordinate2":"",
"y_coordinate2":"",
"z_coordinate2":"",
"bays":"",
"bay_length":"",
"bay_space":"",
"heap_lines":"",
"heap_tiers":"",
"row":"",
"column":"",
"layer":"",
"layer_count":"",
"abc_type":"",
"abc_type_label":"",
"line_order":"",
"line_order2":"",
"line_order3":"",
"floor":"",
"volume":"",
"ground_pallet_count":"",
"stack_limit":"",
"pack_handle_type":"",
"pack_handle_type_label":"",
"lose_id":false,
"mix_rule_id":"",
"zone_row_mix_rule_id":"",
"zone_col_mix_rule_id":"",
"mix_rule_name":"",
"zone_row_mix_rule_name":"",
"zone_col_mix_rule_name":"",
"storage_condition":"",
"storage_condition_label":"",
"sku_form_types":[
],
"sku_form_types_label":"",
"section_type":"OTHER",
"section_type_label":"",
"enabled":true,
"description":"",
"effective_date":"",
"expiration_date":"",
"dock_type":"",
"dock_type_label":"",
"gateway_type":"",
"gateway_type_label":"",
"operation_interval":"",
"berthing_time":"",
"rule":"",
"calendar":"",
"is_auto":false,
"is_open":true,
"zone":"",
"lot_type":"",
"lot_type_label":"",
"hight_low_type":"",
"hight_low_type_label":"",
"w_zone_type":"",
"w_zone_type_label":"",
"w_location_type":"",
"w_location_type_label":"",
"roadway_in_location_id":"",
"roadway_out_location_id":"",
"zone_stage_location_id":"",
"domain_name":"",
"version":"0",
"insert_user":"",
"insert_user_common_name":"",
"insert_date":"",
"update_user":"",
"update_user_common_name":"",
"update_date":"",
"warehouse__code":"GQC-广汽中心仓",
"warehouse__name":"GQC-广汽中心仓",
"section__code":"",
"section__name":"",
"section__section_type":"",
"section__section_type_label":"",
"zone__code":"GQ-KQ-A-100",
"zone__name":"GQ-KQ-A-100",
"roadway__code":"GQ-XD-100",
"roadway__name":"GQ-XD-100",
"_TX_CODE":""
},
"originalData":{
"id":"",
"model1":"",
"model2":"",
"model3":"",
"code":"",
"refer_code":"",
"name":"",
"address":"",
"door":"",
"parent":"",
"truck":"",
"qty":"",
"avl_qty":"",
"length":"",
"width":"",
"height":"",
"longitude":"",
"latitude":"",
"gps_fence":"",
"wx_fence":"",
"truck_type":"",
"capacity_type":"volume",
"capacity_type_label":"",
"load_capacity":"",
"unload_capacity":"",
"static_minute":"",
"sort_num":"",
"detail":"",
"recognition":"",
"barrier":"",
"bulletin":"",
"speaker":"",
"parent2":"",
"roadway":"",
"storage_type":"",
"storage_type_label":"",
"shelf_type":"",
"shelf_type_label":"",
"x_coordinate":"",
"y_coordinate":"",
"z_coordinate":"",
"x_coordinate2":"",
"y_coordinate2":"",
"z_coordinate2":"",
"bays":"",
"bay_length":"",
"bay_space":"",
"heap_lines":"",
"heap_tiers":"",
"row":"",
"column":"",
"layer":"",
"layer_count":"",
"abc_type":"",
"abc_type_label":"",
"line_order":"",
"line_order2":"",
"line_order3":"",
"floor":"",
"volume":"",
"ground_pallet_count":"",
"stack_limit":"",
"pack_handle_type":"",
"pack_handle_type_label":"",
"lose_id":false,
"mix_rule_id":"",
"zone_row_mix_rule_id":"",
"zone_col_mix_rule_id":"",
"mix_rule_name":"",
"zone_row_mix_rule_name":"",
"zone_col_mix_rule_name":"",
"storage_condition":"",
"storage_condition_label":"",
"sku_form_types":"",
"sku_form_types_label":"",
"section_type":"",
"section_type_label":"",
"enabled":true,
"description":"",