{ "info": { "_postman_id": "76b4c2b3-30c2-49fa-87f6-bc7e24cb223e", "name": "t-erp-auto-test(修改版)", "description": "T系列ERP自动化测试集合(整合版)\n\n包含:\n- 🔐 登录(获取LoginId)\n- 📋 基础资料(部门/员工/仓库/货品/客户厂商)\n- 🔄 示例业务流程(采购→销售完整链路,含SQL库存验证)\n- 📦 单据测试用例(35种单据,按采购/销售/库存/生产/托外/非生产领退料分类)\n\n环境变量说明:\n- t-erp-api-url: API基础地址(如 http://xxx.xxx.xxx.xxx:8080/api)\n- t-erp-api-user-no: 登录账号\n- t-erp-api-user-pwd: 登录密码\n- t-erp-api-login-id: LoginId(登录后自动写入)\n- t-erp-api-sn: ERP服务定位标识(Linker sn值)\n- t-erp-api-current-date: 当前日期(各请求前置脚本自动写入)", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", "_exporter_id": "21163044" }, "item": [ { "name": "🔐 登录", "item": [ { "name": "登录获取LoginId", "event": [ { "listen": "test", "script": { "exec": [ "// 登录测试脚本", "// ===================== status:状态码 =====================", "pm.test(\"✅ 状态码 200\", () => pm.response.to.have.status(200));", "// =========================================================", "", "var jsonData = pm.response.json();", "// ===================== console:按需打印 =====================", "// 1. 单个关键值打印(按需选择)", "console.log(`📋 登录接口返回CompNo:${jsonData.CompNo}`);", "console.log(`📋 登录接口返回UserNo:${jsonData.UserNo}`);", "console.log(`📋 生成的登录令牌LoginId:${jsonData.LoginId}`);", "console.log(`📋 令牌有效期LoginIdExpiry:${jsonData.LoginIdExpiry} 秒`);", "", "// 2. 批量打印多个核心值(推荐,日志更集中,少占行数)", "console.log(\"📋 登录接口核心返回值汇总:\", {", " LoginId: jsonData.LoginId,", " CompNo: jsonData.CompNo,", " UserNo: jsonData.UserNo,", " LoginIdExpiry: jsonData.LoginIdExpiry,", " ClientType: jsonData.ClientType", "});", "", "// 3. 打印刚设置的环境变量(验证是否保存成功,可选)", "console.info(`🔧 环境变量已设置t-erp-api-login-id:${pm.environment.get(\"t-erp-api-login-id\")}`);", "// ======================================================================", "", "// ===================== test:按需验证 =====================", "pm.test(\"✅ 必需字段存在\", () => {", " pm.expect(jsonData).to.include.all.keys(", " 'LoginId', 'CompNo', 'UserNo', 'LoginIdExpiry'", " );", "});", "pm.test(\"✅ 登录信息正确\", () => {", " pm.expect(jsonData.CompNo).to.equal('TAPI');", " pm.expect(jsonData.UserNo).to.equal('API');", " pm.expect(jsonData.ClientType).to.equal('JksAutoTestApi');", " pm.expect(jsonData.LoginIdExpiry).to.equal(604800);", "});", "pm.test(\"✅ 保存登录令牌成功\", () => {", " pm.expect(jsonData.LoginId).to.be.a('string').and.not.empty;", " pm.environment.set(\"t-erp-api-login-id\", jsonData.LoginId);", "});", "// ======================================================================" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "auth": { "type": "noauth" }, "method": "POST", "header": [ { "key": "LanguageId", "value": "{{t-erp-api-language}}", "description": "0:简体;1:繁体;2:英文" }, { "key": "Authorization", "value": "{{t-erp-api-authorization}}", "description": "服务:237;账套:TAPI;用户:API" }, { "key": "ClientType", "value": "{{t-erp-api-client-type}}", "description": "JksAutoTestApi" }, { "key": "Content-Type", "value": "{{t-erp-api-content-type}}", "description": "application/json" }, { "key": "X-Tiansi-Auth-Bypass", "value": "{{t-erp-api-x-tiansi-bypass}}", "description": "跳过接口注册检验", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "description": "用于Linker定位ERP服务", "type": "text" } ], "url": { "raw": "{{t-erp-api-url}}/User/login", "host": [ "{{t-erp-api-url}}" ], "path": [ "User", "login" ] }, "description": "登录系统" }, "response": [] } ] }, { "name": "📋 基础资料", "item": [ { "name": "部门资料", "item": [ { "name": "新增部门", "event": [ { "listen": "test", "script": { "exec": [ "// 完整可用的部门接口测试脚本\r", "pm.test(\"✅ 状态码 200\", () => pm.response.to.have.status(200));\r", "\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 1. 验证响应结构\r", "pm.test(\"📋 响应结构验证\", () => {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 2. 验证请求数据(修正后的正确写法)\r", "pm.test(\"✅ 请求部门数据验证\", () => {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((dept, idx) => {\r", " const deptNum = idx + 1;\r", " \r", " // 验证必填字段存在\r", " pm.expect(dept, `部门${deptNum}`).to.include.keys('DEP', 'NAME');\r", " \r", " // 验证字段类型和值\r", " pm.expect(dept.DEP, `部门${deptNum}的部门代码`).to.be.a('string').that.is.not.empty;\r", " pm.expect(dept.NAME, `部门${deptNum}的部门名称`).to.be.a('string').that.is.not.empty;\r", " \r", " // 可选字段验证\r", " if (dept.ENG_NAME !== undefined) {\r", " pm.expect(dept.ENG_NAME).to.be.a('string');\r", " }\r", " \r", " if (dept.UP !== undefined) {\r", " pm.expect(dept.UP).to.be.a('string');\r", " }\r", " });\r", "});\r", "\r", "// 3. 验证业务结果\r", "pm.test(\"📊 操作结果验证\", () => {\r", " const total = requestData.length;\r", " \r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " if (responseData.ErrorCount === 0) {\r", " pm.expect(responseData.OkCount).to.equal(total);\r", " pm.expect(responseData.ErrorData).to.eql([]);\r", " console.log(`✅ 成功处理 ${responseData.OkCount} 个部门`);\r", " } else {\r", " console.log(`⚠️ 部分失败: ${responseData.OkCount} 成功, ${responseData.ErrorCount} 失败`);\r", " \r", " // 验证错误数据\r", " responseData.ErrorData.forEach(error => {\r", " pm.expect(error).to.include.keys('Index', 'DEP', 'ErrorMessage');\r", " pm.expect(error.Index).to.be.within(0, total - 1);\r", " });\r", " }\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"DEP\": \"0001\", // 必须,部门代号,该部门代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"0001部门\", // 必须,部门名称\r\n \"ENG_NAME\": \"0001Dep\", // 非必须,英文名称\r\n \"UP\": \"0000\" // 非必须,上层部门代号\r\n },\r\n {\r\n \"DEP\": \"0002\", // 必须,部门代号,该部门代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"0002部门\", // 必须,部门名称\r\n \"ENG_NAME\": \"0002Dep\", // 非必须,英文名称\r\n \"UP\": \"0001\" // 非必须,上层部门代号\r\n },\r\n {\r\n \"DEP\": \"0003\", // 必须,部门代号,该部门代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"0003部门\", // 必须,部门名称\r\n \"ENG_NAME\": \"0003Dep\", // 非必须,英文名称\r\n \"UP\": \"0002\" // 非必须,上层部门代号\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Dept/AppendToDept", "host": [ "{{t-erp-api-url}}" ], "path": [ "Dept", "AppendToDept" ] }, "description": "新增部门资料" }, "response": [] }, { "name": "删除部门", "event": [ { "listen": "test", "script": { "exec": [ "// 简化版删除部门测试脚本\r", "pm.test(\"✅ 状态码 200\", () => pm.response.to.have.status(200));\r", "\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 基础验证\r", "pm.test(\"✅ 响应结构验证\", () => {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", "});\r", "\r", "// 请求数据验证\r", "pm.test(\"✅ 删除请求数据验证\", () => {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((item, index) => {\r", " pm.expect(item).to.have.property('DEP');\r", " pm.expect(item.DEP).to.be.a('string').and.not.empty;\r", " });\r", " \r", " console.log(`🗑️ 请求删除 ${requestData.length} 个部门`);\r", "});\r", "\r", "// 业务结果验证\r", "pm.test(\"📊 删除结果验证\", () => {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount).to.equal(0);\r", " pm.expect(responseData.OkCount).to.equal(total);\r", " pm.expect(responseData.ErrorData).to.eql([]);\r", " \r", " console.log(`✅ 成功删除 ${responseData.OkCount} 个部门`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"DEP\": \"0003\" // 必须,部门代号,删除该笔部门资料\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Dept/DeleteForDept", "host": [ "{{t-erp-api-url}}" ], "path": [ "Dept", "DeleteForDept" ] }, "description": "删除部门资料" }, "response": [] } ], "description": "部门资料" }, { "name": "员工资料", "item": [ { "name": "新增员工", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 员工数据验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((employee, index) => {\r", " const empNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(employee, `员工${empNum}`).to.include.keys('SAL_NO', 'NAME', 'DEP');\r", " pm.expect(employee.SAL_NO, `员工${empNum}工号`).to.be.a('string').and.not.empty;\r", " pm.expect(employee.NAME, `员工${empNum}姓名`).to.be.a('string').and.not.empty;\r", " pm.expect(employee.DEP, `员工${empNum}部门`).to.be.a('string').and.not.empty;\r", " \r", " // 可选字段类型验证(如果存在)\r", " if (employee.POS !== undefined) {\r", " pm.expect(employee.POS).to.be.a('string');\r", " }\r", " if (employee.UP_SAL_NO !== undefined) {\r", " pm.expect(employee.UP_SAL_NO).to.be.a('string');\r", " }\r", " if (employee.TOPSWD !== undefined) {\r", " pm.expect(employee.TOPSWD).to.be.a('string');\r", " }\r", " if (employee.REM !== undefined) {\r", " pm.expect(employee.REM).to.be.a('string');\r", " }\r", " });\r", " \r", " console.log(`✅ 已验证 ${requestData.length} 个员工数据`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 操作结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功处理 ${responseData.OkCount}/${total} 个员工`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"SAL_NO\": \"ZS\", // 必须,员工代号,该员工代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"张三\", // 必须,员工名称 \r\n \"POS\": \"机床操作主管\", // 非必须,职称\r\n \"DEP\": \"0001\", // 部门代号\r\n \"TOPSWD\": \"T\", // 非必须,同步到登录用户\r\n \"REM\": \"机床操作主管\" // 非必须,摘要\r\n },\r\n {\r\n \"SAL_NO\": \"LS\", // 必须,员工代号,该员工代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"李四\", // 必须,员工名称 \r\n \"POS\": \"机床操作工\", // 非必须,职称\r\n \"DEP\": \"0001\", // 部门代号\r\n \"UP_SAL_NO\": \"ZS\", // 上级主管\r\n \"TOPSWD\": \"T\", // 非必须,同步到登录用户\r\n \"REM\": \"机床操作工\" // 非必须,摘要\r\n },\r\n {\r\n \"SAL_NO\": \"WW\", // 必须,员工代号,该员工代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"王五\", // 必须,员工名称 \r\n \"POS\": \"机床操作工\", // 非必须,职称\r\n \"DEP\": \"0001\", // 部门代号\r\n \"REM\": \"机床操作工\" // 非必须,摘要\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Salm/AppendToSalm", "host": [ "{{t-erp-api-url}}" ], "path": [ "Salm", "AppendToSalm" ] }, "description": "新增员工资料" }, "response": [] }, { "name": "删除员工", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 删除请求验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((item, index) => {\r", " const itemNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(item, `删除项${itemNum}`).to.have.property('SAL_NO');\r", " pm.expect(item.SAL_NO, `员工${itemNum}工号`).to.be.a('string').and.not.empty;\r", " });\r", " \r", " console.log(`🗑️ 请求删除 ${requestData.length} 个员工`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 删除结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功删除 ${responseData.OkCount}/${total} 个员工`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"SAL_NO\": \"WW\" // 必须,员工代号,删除该笔员工资料\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Salm/DeleteForSalm", "host": [ "{{t-erp-api-url}}" ], "path": [ "Salm", "DeleteForSalm" ] }, "description": "删除员工资料" }, "response": [] } ], "description": "员工资料" }, { "name": "仓库资料", "item": [ { "name": "新增仓库", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 仓库数据验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((warehouse, index) => {\r", " const whNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(warehouse, `仓库${whNum}`).to.include.keys('WH', 'NAME');\r", " pm.expect(warehouse.WH, `仓库${whNum}代号`).to.be.a('string').and.not.empty;\r", " pm.expect(warehouse.NAME, `仓库${whNum}名称`).to.be.a('string').and.not.empty;\r", " \r", " // 可选字段类型验证(如果存在)\r", " const optionalFields = ['ATTRIB', 'UP_WH', 'INVALID', 'VMIVALID', 'LOC_ID', 'OUT_ID'];\r", " optionalFields.forEach(field => {\r", " if (warehouse[field] !== undefined) {\r", " pm.expect(warehouse[field]).to.be.a('string');\r", " }\r", " });\r", " });\r", " \r", " console.log(`✅ 已验证 ${requestData.length} 个仓库数据`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 操作结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功处理 ${responseData.OkCount}/${total} 个仓库`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"WH\": \"0001\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"原料仓\", // 必须,仓库名称 \r\n \"ATTRIB\": \"2\", // 非必须,属性\r\n \"UP_WH\": \"0000\" // 非必须,上层仓库\r\n },\r\n {\r\n \"WH\": \"0002\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"半成品仓\", // 必须,仓库名称 \r\n \"ATTRIB\": \"3\", // 非必须,属性\r\n \"UP_WH\": \"0001\" // 非必须,上层仓库\r\n },\r\n {\r\n \"WH\": \"0003\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"制成品仓\", // 必须,仓库名称 \r\n \"ATTRIB\": \"5\", // 非必须,属性\r\n \"UP_WH\": \"0002\" // 非必须,上层仓库\r\n },\r\n {\r\n \"WH\": \"0004\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"废品仓\", // 必须,仓库名称\r\n \"INVALID\": \"T\", // 是否勾选废品仓\r\n \"UP_WH\": \"0000\" // 非必须,上层仓库\r\n },\r\n {\r\n \"WH\": \"0005\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"寄售仓\", // 必须,仓库名称\r\n \"VMIVALID\": \"T\", // 是否勾选寄售仓\r\n \"UP_WH\": \"0000\" // 非必须,上层仓库\r\n },\r\n {\r\n \"WH\": \"0006\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"储位仓\", // 必须,仓库名称\r\n \"LOC_ID\": \"T\", // 是否勾选寄售仓\r\n \"OUT_ID\": \"1\", // 出库规则\r\n \"UP_WH\": \"0000\" // 非必须,上层仓库\r\n },\r\n {\r\n \"WH\": \"0007\", // 必须,仓库代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"原料仓2\", // 必须,仓库名称 \r\n \"ATTRIB\": \"2\", // 非必须,属性\r\n \"UP_WH\": \"0000\" // 非必须,上层仓库\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Wh/AppendToWh", "host": [ "{{t-erp-api-url}}" ], "path": [ "Wh", "AppendToWh" ] }, "description": "新增仓库资料" }, "response": [] } ], "description": "仓库资料" }, { "name": "货品资料", "item": [ { "name": "新增货品", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 货品数据验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((product, index) => {\r", " const prodNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(product, `货品${prodNum}`).to.include.keys('PRD_NO', 'NAME', 'UT');\r", " pm.expect(product.PRD_NO, `货品${prodNum}代号`).to.be.a('string').and.not.empty;\r", " pm.expect(product.NAME, `货品${prodNum}名称`).to.be.a('string').and.not.empty;\r", " pm.expect(product.UT, `货品${prodNum}单位`).to.be.a('string').and.not.empty;\r", " \r", " // 可选字段类型验证(如果存在)\r", " const optionalFields = ['WH', 'REM', 'CHK_BAT', 'CHK_MARK'];\r", " optionalFields.forEach(field => {\r", " if (product[field] !== undefined) {\r", " pm.expect(product[field]).to.be.a('string');\r", " }\r", " });\r", " });\r", " \r", " console.log(`✅ 已验证 ${requestData.length} 个货品数据`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 操作结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功处理 ${responseData.OkCount}/${total} 个货品`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"PRD_NO\": \"YL0001\", // 必须,货品代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"原料0001\", // 必须,货品名称\r\n \"UT\": \"个\", // 必须,主单位\r\n \"WH\": \"0001\", // 非必须,预入仓库\r\n \"REM\": \"原料0001摘要,API测试\" // 非必须,摘要\r\n },\r\n {\r\n \"PRD_NO\": \"YL0002\", // 必须,货品代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"原料0002\", // 必须,货品名称\r\n \"UT\": \"个\", // 必须,主单位\r\n \"WH\": \"0001\", // 非必须,预入仓库\r\n \"REM\": \"原料0002摘要,API测试\" // 非必须,摘要\r\n },\r\n {\r\n \"PRD_NO\": \"BCP0001\", // 必须,货品代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"半成品0001\", // 必须,货品名称\r\n \"UT\": \"KG\", // 必须,主单位\r\n \"WH\": \"0002\", // 非必须,预入仓库\r\n \"CHK_BAT\": \"T\", // 批号管制\r\n \"REM\": \"半成品0001摘要,API测试\" // 非必须,摘要\r\n },\r\n {\r\n \"PRD_NO\": \"ZCP0001\", // 必须,货品代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"制成品0001\", // 必须,货品名称\r\n \"UT\": \"KG\", // 必须,主单位\r\n \"WH\": \"0003\", // 非必须,预入仓库\r\n \"CHK_MARK\": \"T\", // 特征管制\r\n \"REM\": \"制成品0001摘要,API测试\" // 非必须,摘要\r\n },\r\n {\r\n \"PRD_NO\": \"ZCP0002\", // 必须,货品代号,该货品代号在资料中存在即为修改原数据,不存在为新增\r\n \"NAME\": \"制成品0002\", // 必须,货品名称\r\n \"UT\": \"KG\", // 必须,主单位\r\n \"WH\": \"0003\", // 非必须,预入仓库\r\n \"CHK_BAT\": \"T\", // 批号管制\r\n \"CHK_MARK\": \"T\", // 特征管制\r\n \"REM\": \"制成品0002摘要,API测试\" // 非必须,摘要\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Prdt/AppendToPrdt", "host": [ "{{t-erp-api-url}}" ], "path": [ "Prdt", "AppendToPrdt" ] }, "description": "新增货品" }, "response": [] }, { "name": "删除货品", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 删除请求验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((item, index) => {\r", " const itemNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(item, `删除项${itemNum}`).to.have.property('PRD_NO');\r", " pm.expect(item.PRD_NO, `货品${itemNum}代号`).to.be.a('string').and.not.empty;\r", " });\r", " \r", " console.log(`🗑️ 请求删除 ${requestData.length} 个货品`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 删除结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功删除 ${responseData.OkCount}/${total} 个货品`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"PRD_NO\": \"ZCP0002\" // 必须,货品代号,删除该笔货品资料\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Prdt/DeleteForPrdt", "host": [ "{{t-erp-api-url}}" ], "path": [ "Prdt", "DeleteForPrdt" ] }, "description": "删除货品资料" }, "response": [] } ], "description": "货品资料" }, { "name": "客户厂商资料", "item": [ { "name": "新增客户", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 客户数据验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((customer, index) => {\r", " const custNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(customer, `客户${custNum}`).to.include.keys('CUS_NO', 'OBJ_ID', 'NAME');\r", " pm.expect(customer.CUS_NO, `客户${custNum}代号`).to.be.a('string').and.not.empty;\r", " pm.expect(customer.NAME, `客户${custNum}名称`).to.be.a('string').and.not.empty;\r", " pm.expect(customer.OBJ_ID, `客户${custNum}对象别`).to.be.a('string');\r", " \r", " // 验证OBJ_ID取值范围\r", " const validObjIds = ['1', '2', '3'];\r", " if (customer.OBJ_ID && customer.OBJ_ID !== '') {\r", " pm.expect(validObjIds).to.include(\r", " customer.OBJ_ID,\r", " `客户${custNum}的OBJ_ID应为1、2或3,当前值为:${customer.OBJ_ID}`\r", " );\r", " }\r", " \r", " // 可选字段类型验证(如果存在)\r", " const optionalFields = ['SAL', 'ID1_TAX', 'MAS_CUS', 'REM'];\r", " optionalFields.forEach(field => {\r", " if (customer[field] !== undefined) {\r", " pm.expect(customer[field]).to.be.a('string');\r", " }\r", " });\r", " });\r", " \r", " console.log(`✅ 已验证 ${requestData.length} 个客户数据`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 操作结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功处理 ${responseData.OkCount}/${total} 个客户`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"CUS_NO\": \"KH0001\", // 必须,客户厂商代号,该客户厂商代号在资料中存在即为修改原数据,不存在为新增\r\n \"OBJ_ID\": \"1\", // 必须,对象别,1:客户,2:厂商,3 :客户厂商;为空时默认取3\r\n \"NAME\": \"客户A\", // 必须,全称\r\n \"SAL\": \"ZS\", // 非必须,责任业务\r\n \"ID1_TAX\": \"2\", // 非必须,扣税类别\r\n \"REM\": \"这是客户A备注\" // 非必须,备注\r\n },\r\n {\r\n \"CUS_NO\": \"KH0002\", // 必须,客户厂商代号,该客户厂商代号在资料中存在即为修改原数据,不存在为新增\r\n \"OBJ_ID\": \"3\", // 必须,对象别,1:客户,2:厂商,3 :客户厂商;为空时默认取3\r\n \"NAME\": \"客户B\", // 必须,全称\r\n \"SAL\": \"ZS\", // 非必须,责任业务\r\n \"ID1_TAX\": \"2\", // 非必须,扣税类别\r\n \"MAS_CUS\": \"KH0001\", // 非必须,归属客户\r\n \"REM\": \"这是客户B备注\" // 非必须,备注\r\n },\r\n {\r\n \"CUS_NO\": \"KH0003\", // 必须,客户厂商代号,该客户厂商代号在资料中存在即为修改原数据,不存在为新增\r\n \"OBJ_ID\": \"1\", // 必须,对象别,1:客户,2:厂商,3 :客户厂商;为空时默认取3\r\n \"NAME\": \"客户C\", // 必须,全称\r\n \"SAL\": \"ZS\", // 非必须,责任业务\r\n \"ID1_TAX\": \"2\", // 非必须,扣税类别\r\n \"REM\": \"这是客户C备注\" // 非必须,备注\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Cust/AppendToCust", "host": [ "{{t-erp-api-url}}" ], "path": [ "Cust", "AppendToCust" ] }, "description": "新增客户资料" }, "response": [] }, { "name": "删除客户", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 删除请求验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((item, index) => {\r", " const itemNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(item, `删除项${itemNum}`).to.have.property('CUS_NO');\r", " pm.expect(item.CUS_NO, `客户${itemNum}代号`).to.be.a('string').and.not.empty;\r", " });\r", " \r", " console.log(`🗑️ 请求删除 ${requestData.length} 个客户`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 删除结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功删除 ${responseData.OkCount}/${total} 个客户`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"CUS_NO\": \"KH0003\" // 必须,客户厂商代号,删除该笔客户厂商资料\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Cust/DeleteForCust", "host": [ "{{t-erp-api-url}}" ], "path": [ "Cust", "DeleteForCust" ] }, "description": "删除客户资料" }, "response": [] }, { "name": "新增厂商", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 厂商数据验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((supplier, index) => {\r", " const supNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(supplier, `厂商${supNum}`).to.include.keys('CUS_NO', 'OBJ_ID', 'NAME');\r", " pm.expect(supplier.CUS_NO, `厂商${supNum}代号`).to.be.a('string').and.not.empty;\r", " pm.expect(supplier.NAME, `厂商${supNum}名称`).to.be.a('string').and.not.empty;\r", " pm.expect(supplier.OBJ_ID, `厂商${supNum}对象别`).to.be.a('string');\r", " \r", " // 验证OBJ_ID取值范围(这里厂商应该是2或3,但根据接口说明,1、2、3都允许)\r", " const validObjIds = ['1', '2', '3'];\r", " if (supplier.OBJ_ID && supplier.OBJ_ID !== '') {\r", " pm.expect(validObjIds).to.include(\r", " supplier.OBJ_ID,\r", " `厂商${supNum}的OBJ_ID应为1、2或3,当前值为:${supplier.OBJ_ID}`\r", " );\r", " }\r", " \r", " // 可选字段类型验证(如果存在)\r", " const optionalFields = ['SAL', 'ID1_TAX', 'MAS_CUS', 'REM'];\r", " optionalFields.forEach(field => {\r", " if (supplier[field] !== undefined) {\r", " pm.expect(supplier[field]).to.be.a('string');\r", " }\r", " });\r", " });\r", " \r", " console.log(`✅ 已验证 ${requestData.length} 个厂商数据`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 操作结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功处理 ${responseData.OkCount}/${total} 个厂商`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"CUS_NO\": \"CS0001\", // 必须,客户厂商代号,该客户厂商代号在资料中存在即为修改原数据,不存在为新增\r\n \"OBJ_ID\": \"2\", // 必须,对象别,1:客户,2:厂商,3 :客户厂商;为空时默认取3\r\n \"NAME\": \"厂商A\", // 必须,全称\r\n \"SAL\": \"ZS\", // 非必须,责任业务\r\n \"ID1_TAX\": \"2\", // 非必须,扣税类别\r\n \"REM\": \"这是厂商A备注\" // 非必须,备注\r\n },\r\n {\r\n \"CUS_NO\": \"CS0002\", // 必须,客户厂商代号,该客户厂商代号在资料中存在即为修改原数据,不存在为新增\r\n \"OBJ_ID\": \"3\", // 必须,对象别,1:客户,2:厂商,3 :客户厂商;为空时默认取3\r\n \"NAME\": \"厂商B\", // 必须,全称\r\n \"SAL\": \"ZS\", // 非必须,责任业务\r\n \"ID1_TAX\": \"2\", // 非必须,扣税类别\r\n \"MAS_CUS\": \"CS0001\", // 非必须,归属厂商\r\n \"REM\": \"这是厂商B备注\" // 非必须,备注\r\n },\r\n {\r\n \"CUS_NO\": \"CS0003\", // 必须,客户厂商代号,该客户厂商代号在资料中存在即为修改原数据,不存在为新增\r\n \"OBJ_ID\": \"2\", // 必须,对象别,1:客户,2:厂商,3 :客户厂商;为空时默认取3\r\n \"NAME\": \"厂商C\", // 必须,全称\r\n \"SAL\": \"ZS\", // 非必须,责任业务\r\n \"ID1_TAX\": \"2\", // 非必须,扣税类别\r\n \"REM\": \"这是厂商C备注\" // 非必须,备注\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Cust/AppendToCust", "host": [ "{{t-erp-api-url}}" ], "path": [ "Cust", "AppendToCust" ] }, "description": "新增厂商资料" }, "response": [] }, { "name": "删除厂商", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 基础响应验证\r", "pm.test(\"✅ 状态码 200\", function() {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "// 2. 获取数据\r", "var requestData = JSON.parse(pm.request.body.raw);\r", "var responseData = pm.response.json();\r", "\r", "// 3. 响应结构验证\r", "pm.test(\"📋 响应结构验证\", function() {\r", " pm.expect(responseData).to.have.all.keys('OkCount', 'ErrorCount', 'ErrorData');\r", " pm.expect(responseData.OkCount).to.be.a('number');\r", " pm.expect(responseData.ErrorCount).to.be.a('number');\r", " pm.expect(responseData.ErrorData).to.be.an('array');\r", "});\r", "\r", "// 4. 请求数据验证\r", "pm.test(\"✅ 删除请求验证\", function() {\r", " pm.expect(requestData).to.be.an('array').that.is.not.empty;\r", " \r", " requestData.forEach((item, index) => {\r", " const itemNum = index + 1;\r", " \r", " // 必填字段验证\r", " pm.expect(item, `删除项${itemNum}`).to.have.property('CUS_NO');\r", " pm.expect(item.CUS_NO, `厂商${itemNum}代号`).to.be.a('string').and.not.empty;\r", " });\r", " \r", " console.log(`🗑️ 请求删除 ${requestData.length} 个厂商`);\r", "});\r", "\r", "// 5. 业务结果验证\r", "pm.test(\"📊 删除结果验证\", function() {\r", " const total = requestData.length;\r", " \r", " // 验证计数逻辑\r", " pm.expect(responseData.OkCount + responseData.ErrorCount).to.equal(total);\r", " \r", " // 根据成功示例验证\r", " pm.expect(responseData.ErrorCount, \"失败数量\").to.equal(0);\r", " pm.expect(responseData.OkCount, \"成功数量\").to.equal(total);\r", " pm.expect(responseData.ErrorData, \"错误数据\").to.eql([]);\r", " \r", " console.log(`✅ 成功删除 ${responseData.OkCount}/${total} 个厂商`);\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"CUS_NO\": \"CS0003\" // 必须,客户厂商代号,删除该笔客户厂商资料\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Cust/DeleteForCust", "host": [ "{{t-erp-api-url}}" ], "path": [ "Cust", "DeleteForCust" ] }, "description": "删除厂商资料" }, "response": [] } ], "description": "客户/厂商资料" } ] }, { "name": "🔄 示例业务流程(采购→销售完整链路)", "item": [ { "name": "01-新增采购订单", "event": [ { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data", "var dataJson;", "try {", " dataJson = JSON.parse(dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \"));", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析失败:\", e.message);", " pm.test(\"Data字段可正常解析\", () => pm.expect.fail(\"Data格式错误\"));", " return;", "}", "", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 采购订单:BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增采购订单成功\", function () {", " pm.response.to.have.status(200);", " pm.expect(resJson.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ TF_TABNAME=TF_POS\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_POS\");", "});", "", "pm.test(\"✅ 采购信息写入环境变量\", function () {", " pm.environment.set(\"t-erp-api-po-bill-no\", bilNo);", " console.log(`✅ 采购订单单号已写入:${bilNo}`);", " ", " var reqBody = JSON.parse(pm.request.body.raw);", " var PrdNo = reqBody.BodyData[0].PrdNo;", " var Qty = reqBody.BodyData[0].Qty;", " pm.environment.set(\"prd-no\", PrdNo);", " pm.environment.set(\"po-qty\", Qty);", " ", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PO\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"EstDate\": \"{{t-erp-api-current-date}}\",\n \"Rem\": \"自动化测试-采购订单\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0002\",\n \"WhNo\": \"0001\",\n \"Qty\": 100,\n \"Up\": 100,\n \"Rem\": \"测试用原料\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] } }, "response": [] }, { "name": "02-查询在途量(新增PO后)", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ SQL查询在途量接口连通\", function () {", " pm.response.to.have.status(200);", " console.log(\"✅ 在途量查询成功\");", " console.log(\"📊 查询结果:\", JSON.stringify(pm.response.json()));", "});", "", "// 用例1:HTTP请求成功", "pm.test(\"✅ 接口调用成功\", function () {", " pm.expect(pm.response.code).to.equal(200, `异常状态码:${pm.response.code}`);", "});", "", "// 解析返回JSON", "const resp = pm.response.json();", "", "// 用例2:SQL业务执行成功", "pm.test(\"✅ SQL查询成功\", function () {", " pm.expect(resp.code).to.equal(0);", " pm.expect(resp.result.Success).to.be.true;", " pm.expect(resp.message).to.equal(\"SQL查询执行成功。\");", "});", "", "// 用例3:校验查询到库存数据", "pm.test(\"✅ 成功查询到产品库存数据\", function () {", " pm.expect(resp.result.Data).to.be.an(\"array\");", " pm.expect(resp.result.Data.length).gt(0, \"未查询到该产品\");", "});", "", "// 用例4:每次新增单据,在途库存增加", "pm.test(\"✅ 校验在途库存QTY_ON_WAY每次新增\", function () {", " const currentQty = Number(resp.result.Data[0].QTY_ON_WAY);", " const lastQty = pm.environment.get(\"last_qty_on_way_po\");", " console.log(\"上次库存:\", lastQty, \"本次库存:\", currentQty);", "", " if (lastQty !== null && lastQty !== undefined) {", " const addQty = Number(pm.environment.get(\"po-qty\"));", " pm.expect(currentQty).equal(Number(lastQty) + addQty,", " `库存校验失败:预期${Number(lastQty)+addQty},实际${currentQty}`);", " } else {", " console.log(\"首次执行,记录初始库存\");", " }", " // 保存本次库存,用于下一轮校验", " pm.environment.set(\"last_qty_on_way_po\", currentQty);", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" }, { "key": "DbType", "value": "1", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"SQL\": \"SELECT PRD_NO, SUM(QTY_ON_WAY) AS QTY_ON_WAY FROM PRDT1 WHERE PRD_NO=@PRD_NO GROUP BY PRD_NO\",\n \"PARAMETERS\": {\n \"@PRD_NO\": \"{{prd-no}}\"\n }\n}\n", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/SqlOperation/ExecuteSql", "host": [ "{{t-erp-api-url}}" ], "path": [ "SqlOperation", "ExecuteSql" ] } }, "response": [] }, { "name": "03-新增采购入库单(转自PO)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "var resJson = pm.response.json();", "var dataRawStr = resJson.Data;", "var dataJson;", "try {", " dataJson = JSON.parse(dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \"));", "} catch(e) { return; }", "", "var bilNo = dataJson.BIL_NO;", "console.log(`📌 采购入库单:BIL_NO=${bilNo}`);", "", "pm.test(\"✅ 新增采购入库单成功\", function () {", " pm.response.to.have.status(200);", " pm.expect(resJson.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ TF_TABNAME=TF_PSS\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 采购入库单单号写入环境变量\", function () {", " pm.environment.set(\"t-erp-api-pc-bill-no\", bilNo);", " console.log(`✅ 采购入库单单号已写入:${bilNo}`);", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PC\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"PO\",\n \"BilNo\": \"{{t-erp-api-po-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] } }, "response": [] }, { "name": "04-查询采购入库单信息", "event": [ { "listen": "test", "script": { "exec": [ "", "pm.test(\"✅ 查询采购入库单成功\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", () => {", " const res = pm.response.json();", " const pcQty = Number(res.Data.BODYDATA1[0].QTY);", " pm.environment.set(\"pc-qty\", pcQty);", "", " console.log(`✅ 已抓取入库数量,pc-qty = ${pcQty}`);", "});", "", "pm.test(\"✅ 校验本次入库数量与采购下单数量一致\", () => {", " const res = pm.response.json();", " const pcQty = Number(res.Data.BODYDATA1[0].QTY);", " const poQty = Number(pm.environment.get(\"po-qty\"));", " pm.expect(pcQty).to.equal(", " poQty,", " `数量不一致校验失败:采购下单数量PO-QTY=${poQty},本次入库数量PC-QTY=${pcQty}`", " );", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"PC\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-pc-bill-no}}\" // 必须,调用的单据号码\r\n}\r\n\r\n{\r\n \"EntryOrderId\": \"\",\r\n \"CallID\": \"PC\",\r\n \"CallNO\": \"PC20267210001\",\r\n \"CallOK\": \"T\",\r\n \"Data\": {\r\n \"HEADDATA\": {\r\n \"PS_ID\": \"PC\",\r\n \"PS_NO\": \"PC20267210001\",\r\n \"PS_DD\": \"2026/7/21 0:00:00\",\r\n \"PAY_DD\": \"2026/8/1 0:00:00\",\r\n \"CHK_DD\": \"2026/9/1 0:00:00\",\r\n \"TRAD_MTH\": \"\",\r\n \"BAT_NO\": \"\",\r\n \"CUS_NO\": \"CS0001\",\r\n \"VOH_ID\": \"\",\r\n \"VOH_NO\": \"\",\r\n \"DEP\": \"0001\",\r\n \"INV_NO\": \"\",\r\n \"TAX_ID\": \"2.00\",\r\n \"OS_ID\": \"PO\",\r\n \"OS_NO\": \"PO20267210001\",\r\n \"SEND_MTH\": \"1\",\r\n \"SEND_WH\": \"0000\",\r\n \"RP_NO\": \"\",\r\n \"ZHANG_ID\": \"1\",\r\n \"CUR_ID\": \"\",\r\n \"EXC_RTO\": \"1.00000000\",\r\n \"SAL_NO\": \"LS\",\r\n \"ARP_NO\": \"AP20267210001\",\r\n \"AMTN_IRP\": \"0.00\",\r\n \"AMT_IRP\": \"0.00\",\r\n \"RSV_PER\": \"\",\r\n \"AMTN_RSV\": \"0.00\",\r\n \"AMT_RSV\": \"0.00\",\r\n \"ADR\": \"\",\r\n \"REM\": \"自动化测试-采购订单\",\r\n \"PAY_MTH\": \"1\",\r\n \"PAY_DAYS\": \"1\",\r\n \"CHK_DAYS\": \"30\",\r\n \"INT_DAYS\": \"30\",\r\n \"PAY_REM\": \"结帐期:2026-08-01; 票据到期日:2026-09-01\",\r\n \"CLS_ID\": \"\",\r\n \"EP_NO\": \"\",\r\n \"AMTN_EP\": \"0.00\",\r\n \"TAX_IRP\": \"0.00\",\r\n \"USR\": \"API\",\r\n \"CHK_MAN\": \"API\",\r\n \"PRT_SW\": \"N\",\r\n \"CPY_SW\": \"\",\r\n \"BIL_NO\": \"\",\r\n \"DIS_CNT\": \"0.00000000\",\r\n \"CASH_ID\": \"\",\r\n \"QTY_INV\": \"0.00\",\r\n \"QTY_CASH\": \"0.00\",\r\n \"AMTN_INV\": \"0.00\",\r\n \"AMTN_CASH\": \"0.00\",\r\n \"CB_ID\": \"\",\r\n \"CONTRACT\": \"\",\r\n \"LC_NO\": \"\",\r\n \"PK_NO\": \"\",\r\n \"CLS_REM\": \"\",\r\n \"SCUS_NO\": \"\",\r\n \"SOUTYPE\": \"\",\r\n \"SGTFLAG\": \"\",\r\n \"AMT\": \"0.00\",\r\n \"VOH_MKNO\": \"\",\r\n \"POS_NO\": \"\",\r\n \"BIL_ID\": \"\",\r\n \"CLS_DATE\": \"2026/7/21 0:00:00\",\r\n \"MM_ID\": \"\",\r\n \"CUS_OS_NO\": \"\",\r\n \"PO_ID\": \"\",\r\n \"CK_CLS_ID\": \"\",\r\n \"LZ_CLS_ID\": \"F\",\r\n \"CLSCK\": \"\",\r\n \"CLSLZ\": \"\",\r\n \"BIL_TYPE\": \"\",\r\n \"IS_POS\": \"\",\r\n \"LOCK_MAN\": \"\",\r\n \"YD_ID\": \"\",\r\n \"AMTN_EP1\": \"0.00\",\r\n \"EP_NO1\": \"\",\r\n \"FC_ID\": \"F\",\r\n \"IS_PE\": \"\",\r\n \"LZ_CLS_DD\": \"\",\r\n \"EFF_DD\": \"2026/7/21 10:51:17\",\r\n \"QC_YN\": \"\",\r\n \"CLEAR_ID\": \"\",\r\n \"IJ_NO\": \"\",\r\n \"CO_NO\": \"\",\r\n \"RECORD_DD\": \"2026/7/21 10:51:17\",\r\n \"DEF_NO\": \"\",\r\n \"MAN_CK_CLS\": \"\",\r\n \"IS_TRANS\": \"\",\r\n \"IS_SP\": \"\",\r\n \"AMTN_YH\": \"0.00\",\r\n \"AMT_YH\": \"0.00\",\r\n \"CC_ID\": \"\",\r\n \"TRACE_NO\": \"\",\r\n \"SHOP_NO\": \"\",\r\n \"TRADE_ID\": \"\",\r\n \"AMTN_NET_TOT\": \"10000.00\",\r\n \"IS_SF\": \"\",\r\n \"TB_NO\": \"\",\r\n \"CONFIRMID\": \"\",\r\n \"SALERNO\": \"\",\r\n \"BUYERNO\": \"\",\r\n \"INVOICETYPE\": \"\",\r\n \"INVOICEKIND\": \"\",\r\n \"SOURCE_SYS\": \"\",\r\n \"LOCK_DD\": \"\",\r\n \"EDT_DD\": \"\",\r\n \"EDTUSR\": \"\"\r\n },\r\n \"BODYDATA1\": [\r\n {\r\n \"PS_ID\": \"PC\",\r\n \"PS_NO\": \"PC20267210001\",\r\n \"ITM\": \"1\",\r\n \"PS_DD\": \"2026/7/21 0:00:00\",\r\n \"WH\": \"0001\",\r\n \"BAT_NO\": \"\",\r\n \"OS_NO\": \"PO20267210001\",\r\n \"PRD_NO\": \"YL0002\",\r\n \"PRD_NAME\": \"原料0002\",\r\n \"PRD_MARK\": \"\",\r\n \"UNIT\": \"1\",\r\n \"QTY\": \"100.00\",\r\n \"QTY1\": \"0.00\",\r\n \"CST_SAL\": \"0.00\",\r\n \"CSTN_SAL\": \"0.00\",\r\n \"UP\": \"100.0000\",\r\n \"AMTN_NET\": \"8849.56\",\r\n \"AMT\": \"10000.00\",\r\n \"TAX\": \"1150.44\",\r\n \"DIS_CNT\": \"0.00000000\",\r\n \"QTY_RTN\": \"0.00\",\r\n \"AMTN_EP\": \"0.00\",\r\n \"PAK_UNIT\": \"\",\r\n \"PAK_EXC\": \"\",\r\n \"PAK_NW\": \"\",\r\n \"PAK_WEIGHT_UNIT\": \"\",\r\n \"PAK_GW\": \"\",\r\n \"PAK_MEAST\": \"\",\r\n \"PAK_MEAST_UNIT\": \"\",\r\n \"VALID_DD\": \"1899/12/30 0:00:00\",\r\n \"REM\": \"测试用原料\",\r\n \"AMTN_COM\": \"0.00\",\r\n \"EST_DD\": \"2026/7/21 0:00:00\",\r\n \"TAX_RTO\": \"13.00\",\r\n \"CST_STD\": \"0.00\",\r\n \"UP_QTY1\": \"0.00\",\r\n \"EST_ITM\": \"1\",\r\n \"OS_ID\": \"PO\",\r\n \"QTY_PS\": \"100.00\",\r\n \"PRE_ITM\": \"1\",\r\n \"SEND_WH\": \"\",\r\n \"QTY_LOSS\": \"0.00\",\r\n \"QTYS\": \"0.00\",\r\n \"AMTN_SNET\": \"0.00\",\r\n \"TAXS\": \"0.00\",\r\n \"UT\": \"\",\r\n \"WT\": \"\",\r\n \"AMTN\": \"0.00\",\r\n \"CODE_NO\": \"\",\r\n \"ATTR\": \"\",\r\n \"QTY_FX\": \"0.00\",\r\n \"ID_NO\": \"\",\r\n \"FREE_ID\": \"\",\r\n \"CK_NO\": \"\",\r\n \"MM_ID\": \"\",\r\n \"AMT_FP\": \"0.00\",\r\n \"AMTN_NET_FP\": \"0.00\",\r\n \"TAX_FP\": \"0.00\",\r\n \"QTY_CK\": \"0.00\",\r\n \"BZ_KND\": \"\",\r\n \"PRICE_ID\": \"\",\r\n \"OTH_ITM\": \"\",\r\n \"CUS_OS_NO\": \"\",\r\n \"QTY_RK\": \"0.00\",\r\n \"RK_NO\": \"\",\r\n \"AMT_RCV\": \"0.00\",\r\n \"AMTN_RCV\": \"0.00\",\r\n \"CLS_ID\": \"\",\r\n \"CHK_TAX\": \"\",\r\n \"FH_NO\": \"\",\r\n \"INV_NO\": \"\",\r\n \"CST_MAKE\": \"0.00\",\r\n \"CST_MAN\": \"0.00\",\r\n \"CST_PRD\": \"0.00\",\r\n \"CST_OUT\": \"0.00\",\r\n \"CST_SMAKE\": \"0.00\",\r\n \"CST_SMAN\": \"0.00\",\r\n \"CST_SPRD\": \"0.00\",\r\n \"CST_SOUT\": \"0.00\",\r\n \"QTY_FP\": \"0.00\",\r\n \"PRD_LOC\": \"\",\r\n \"SEQ_ITM\": \"0\",\r\n \"MRP_NO_SO\": \"\",\r\n \"QTY_BAD\": \"0.00\",\r\n \"UP_END\": \"100.0000\",\r\n \"QTY_NOSH\": \"0.00\",\r\n \"TY_ID\": \"\",\r\n \"TY_NO\": \"\",\r\n \"TY_EST_ITM\": \"\",\r\n \"TY1_EST_ITM\": \"\",\r\n \"UP_CST\": \"0.0000\",\r\n \"UP1_CST\": \"0.0000\",\r\n \"UP_CST_UT\": \"0.0000\",\r\n \"QTY_NOSH_FP\": \"0.00\",\r\n \"AMT_NOSH_FP\": \"0.00\",\r\n \"AMTN_NOSH_FP\": \"0.00\",\r\n \"TAX_NOSH_FP\": \"0.00\",\r\n \"QTY_NOSH_RTN\": \"0.00\",\r\n \"QTY_NOSH_FX\": \"0.00\",\r\n \"QTY_NOSH_RK\": \"0.00\",\r\n \"CO_NO\": \"\",\r\n \"EFF_DD\": \"2026/7/21 10:51:17\",\r\n \"SEFF_DATE\": \"2026/7/21 10:42:28\",\r\n \"UP_DJ\": \"0.0000\",\r\n \"UP_TC\": \"0.0000\",\r\n \"TM_ID\": \"\",\r\n \"TM_NO\": \"\",\r\n \"FORMULA_CSV\": \"\",\r\n \"OBJ_NO\": \"\",\r\n \"OBJ_CLASS\": \"\",\r\n \"SPC\": \"\",\r\n \"FREEINDEX\": \"\",\r\n \"ORDER_ID\": \"\",\r\n \"TCODE_CHK\": \"\",\r\n \"UPR\": \"0.0000\",\r\n \"QTY_TCODE\": \"0.00\",\r\n \"CONFIRMFLAG\": \"\",\r\n \"QTY1_TCODE\": \"0.00\",\r\n \"WH_TCODE\": \"\",\r\n \"PRD_LOC_TCODE\": \"\",\r\n \"PRD_MARK_TCODE\": \"\",\r\n \"BAT_NO_TCODE\": \"\",\r\n \"MFG_DD\": \"\",\r\n \"PACK_NO\": \"\",\r\n \"BC_ITM\": \"\",\r\n \"MB_NO\": \"\",\r\n \"HX_ID\": \"\",\r\n \"TB_NO\": \"\",\r\n \"TB_SUB_NO\": \"\",\r\n \"PACK_FREQUENCY\": \"\",\r\n \"CONFIRMID\": \"\",\r\n \"REV_NO\": \"\",\r\n \"COS_NO\": \"\",\r\n \"PRD_NO_SUP\": \"\",\r\n \"INVOICESPC\": \"\",\r\n \"INVOICENAME\": \"\",\r\n \"PRD_NAME_SUP\": \"\",\r\n \"AMT_ZDZK\": \"0.00\",\r\n \"AMTN_NET_ZDZK\": \"0.00\",\r\n \"TAX_ZDZK\": \"0.00\",\r\n \"AMT_DIFF_FP\": \"0.00\",\r\n \"AMTN_DIFF_FP\": \"0.00\",\r\n \"TAX_DIFF_FP\": \"0.00\",\r\n \"AMT_DIFF_NOSH_FP\": \"0.00\",\r\n \"AMTN_DIFF_NOSH_FP\": \"0.00\",\r\n \"TAX_DIFF_NOSH_FP\": \"0.00\"\r\n }\r\n ]\r\n },\r\n \"ErrorStr\": \"\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] } }, "response": [] }, { "name": "05-查询可用库存量(入库后)", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ SQL查询可用库存量接口连通\", function () {", " pm.response.to.have.status(200);", " console.log(\"✅ 可用库存量查询成功\");", " console.log(\"📊 查询结果:\", JSON.stringify(pm.response.json()));", "});", "", "// 用例1:HTTP请求成功", "pm.test(\"✅ 接口调用成功\", function () {", " pm.expect(pm.response.code).to.equal(200, `异常状态码:${pm.response.code}`);", "});", "", "// 解析返回JSON", "const resp = pm.response.json();", "", "// 用例2:SQL业务执行成功", "pm.test(\"✅ SQL查询可用库存量成功\", function () {", " pm.expect(resp.code).to.equal(0);", " pm.expect(resp.result.Success).to.be.true;", " pm.expect(resp.message).to.equal(\"SQL查询执行成功。\");", "});", "", "// 用例3:校验查询到库存数据", "pm.test(\"✅ 成功查询到产品库存数据\", function () {", " pm.expect(resp.result.Data).to.be.an(\"array\");", " pm.expect(resp.result.Data.length).gt(0, \"未查询到该产品\");", "});", "", "// 用例4:每次新增单据,在途库存减少", "pm.test(\"✅ 校验在途库存QTY_ON_WAY减少\", function () {", " const currentQty_onway = Number(resp.result.Data[0].QTY_ON_WAY);", " const lastQty_onway = pm.environment.get(\"last_qty_on_way\");", " console.log(\"上次库存:\", lastQty_onway, \"本次库存:\", currentQty_onway);", "", " if (lastQty_onway !== null && lastQty_onway !== undefined) {", " const subQty = Number(pm.environment.get(\"po-qty\"));", " pm.expect(currentQty_onway).equal(Number(lastQty_onway) - subQty,", " `库存校验失败:预期${Number(lastQty_onway)-subQty},实际${currentQty_onway}`);", " } else {", " console.log(\"首次执行,记录初始库存\");", " }", " // 保存本次库存,用于下一轮校验", " pm.environment.set(\"last_qty_on_way\", currentQty_onway);", "});", "", "// 用例5:每次新增单据,可用数量增加", "pm.test(\"✅ 校验可用数量QTY增加\", function () {", " const currentQty = Number(resp.result.Data[0].QTY);", " const lastQty = pm.environment.get(\"last_qty\");", " console.log(\"上次库存:\", lastQty, \"本次库存:\", currentQty);", "", " if (lastQty !== null && lastQty !== undefined) {", " const addQty = Number(pm.environment.get(\"pc-qty\"));", " pm.expect(currentQty).equal(Number(lastQty) + addQty,", " `库存校验失败:预期${Number(lastQty)+addQty},实际${currentQty}`);", " } else {", " console.log(\"首次执行,记录初始库存\");", " }", " // 保存本次库存,用于下一轮校验", " pm.environment.set(\"last_qty\", currentQty);", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" }, { "key": "DbType", "value": "1", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"SQL\": \"SELECT PRD_NO, QTY FROM PRDT1 WHERE PRD_NO=@PRD_NO\",\n \"PARAMETERS\": {\n \"@PRD_NO\": \"{{prd-no}}\"\n }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/SqlOperation/ExecuteSql", "host": [ "{{t-erp-api-url}}" ], "path": [ "SqlOperation", "ExecuteSql" ] } }, "response": [] }, { "name": "06-查询采购订单回写信息", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询采购订单回写信息成功\", function () {", " pm.response.to.have.status(200);", " et r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询采购订单回写信息成功\");", "});", "", "// 用例1:HTTP请求成功", "pm.test(\"✅ 接口调用成功\", function () {", " pm.expect(pm.response.code).to.equal(200, `异常状态码:${pm.response.code}`);", "});", "", "// 解析返回JSON", "const resp = pm.response.json();", "", "// 用例2:SQL业务执行成功", "pm.test(\"✅ SQL查询采购订单成功\", function () {", " pm.expect(resp.code).to.equal(0);", " pm.expect(resp.result.Success).to.be.true;", " pm.expect(resp.message).to.equal(\"SQL查询执行成功。\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", () => {", " const res = pm.response.json();", " const psQty = Number(res.result.Data[0].QTY_PS);", " pm.environment.set(\"ps-qty\", psQty);", "", " console.log(`✅ 已抓取入库数量,ps-qty = ${psQty}`);", "});", "", "pm.test(\"✅ 校验已交量回写正确\", function () {", " const res = pm.response.json();", " const psQty = Number(res.result.Data[0].QTY_PS);", " const pcQty = Number(pm.environment.get(\"pc-qty\"));", "", " if (psQty !== null && psQty !== undefined) {", " ", " pm.expect(psQty).equal(Number(pcQty) ,", " `库存校验失败:预期${psQty},实际${pcQty}`);", " } else {", " console.log(\"首次执行,记录初始库存\");", " }", "", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" }, { "key": "DbType", "value": "1", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"SQL\":\"SELECT * FROM TF_POS WHERE OS_NO=@PO_NO\",\r\n \"PARAMETERS\":{\r\n \"@PO_NO\":\"{{t-erp-api-po-bill-no}}\"\r\n }\r\n\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/SqlOperation/ExecuteSql", "host": [ "{{t-erp-api-url}}" ], "path": [ "SqlOperation", "ExecuteSql" ] } }, "response": [] }, { "name": "07-新增销售订单", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "var resJson = pm.response.json();", "var dataRawStr = resJson.Data;", "var dataJson;", "try {", " dataJson = JSON.parse(dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \"));", "} catch(e) { return; }", "", "var bilNo = dataJson.BIL_NO;", "console.log(`📌 销售订单:BIL_NO=${bilNo}`);", "", "pm.test(\"✅ 新增销售订单成功\", function () {", " pm.response.to.have.status(200);", " pm.expect(resJson.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ TF_TABNAME=TF_POS\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_POS\");", "});", "", "pm.test(\"✅ 销售订单单号写入环境变量\", function () {", " pm.environment.set(\"t-erp-api-so-bill-no\", bilNo);", " console.log(`✅ 销售订单单号已写入:${bilNo}`);", "", " ", " var reqBody = JSON.parse(pm.request.body.raw);", " var PrdNo = reqBody.BodyData[0].PrdNo;", " var Qty = reqBody.BodyData[0].Qty;", " pm.environment.set(\"prd-no\", PrdNo);", " pm.environment.set(\"so-qty\", Qty);", " ", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SO\",\n \"CusNo\": \"KH0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"EstDate\": \"{{t-erp-api-current-date}}\",\n \"Rem\": \"自动化测试-销售订单\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0002\",\n \"WhNo\": \"0001\",\n \"Qty\": 100,\n \"Up\": 100,\n \"Rem\": \"测试用原料销售\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] } }, "response": [] }, { "name": "08-查询在途量(新增SO后)", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ SQL查询在途量接口连通\", function () {", " pm.response.to.have.status(200);", " console.log(\"✅ 在途量查询成功\");", " console.log(\"📊 查询结果:\", JSON.stringify(pm.response.json()));", "});", "", "// 用例1:HTTP请求成功", "pm.test(\"✅ 接口调用成功\", function () {", " pm.expect(pm.response.code).to.equal(200, `异常状态码:${pm.response.code}`);", "});", "", "// 解析返回JSON", "const resp = pm.response.json();", "", "// 用例2:SQL业务执行成功", "pm.test(\"✅ SQL查询成功\", function () {", " pm.expect(resp.code).to.equal(0);", " pm.expect(resp.result.Success).to.be.true;", " pm.expect(resp.message).to.equal(\"SQL查询执行成功。\");", "});", "", "// 用例3:校验查询到库存数据", "pm.test(\"✅ 成功查询到产品库存数据\", function () {", " pm.expect(resp.result.Data).to.be.an(\"array\");", " pm.expect(resp.result.Data.length).gt(0, \"未查询到该产品\");", "});", "", "// 用例4:每次新增单据,在途库存增加", "pm.test(\"✅ 校验在途库存QTY_ON_WAY每次新增\", function () {", " const currentQty = Number(resp.result.Data[0].QTY_ON_WAY);", " const lastQty = pm.environment.get(\"last_qty_on_way_so\");", " console.log(\"上次库存:\", lastQty, \"本次库存:\", currentQty);", "", " if (lastQty !== null && lastQty !== undefined) {", " const addQty = Number(pm.environment.get(\"so-qty\"));", " pm.expect(currentQty).equal(Number(lastQty) + addQty,", " `库存校验失败:预期${Number(lastQty)+addQty},实际${currentQty}`);", " } else {", " console.log(\"首次执行,记录初始库存\");", " }", " // 保存本次库存,用于下一轮校验", " pm.environment.set(\"last_qty_on_way_so\", currentQty);", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" }, { "key": "DbType", "value": "1", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"SQL\": \"SELECT PRD_NO, SUM(QTY) AS ON_THE_WAY FROM PRDT1 WHERE PRD_NO=@PRD_NO GROUP BY PRD_NO\",\n \"PARAMETERS\": {\n \"@PRD_NO\": \"{{prd-no}}\"\n }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/SqlOperation/ExecuteSql", "host": [ "{{t-erp-api-url}}" ], "path": [ "SqlOperation", "ExecuteSql" ] } }, "response": [] }, { "name": "09-新增销售出库单(转自SO)", "event": [ { "listen": "test", "script": { "exec": [ "var resJson = pm.response.json();", "var dataRawStr = resJson.Data;", "var dataJson;", "try {", " dataJson = JSON.parse(dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \"));", "} catch(e) { return; }", "", "var bilNo = dataJson.BIL_NO;", "console.log(`📌 销售出库单:BIL_NO=${bilNo}`);", "", "pm.test(\"✅ 新增销售出库单成功\", function () {", " pm.response.to.have.status(200);", " pm.expect(resJson.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ TF_TABNAME=TF_PSS\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "", "pm.test(\"✅ 销售出库单号写入环境变量\", function () {", " pm.environment.set(\"t-erp-api-sa-bill-no\", bilNo);", " console.log(`✅ 销售出库单号已写入:${bilNo}`);", "", " ", " var reqBody = JSON.parse(pm.request.body.raw);", " var PrdNo = reqBody.BodyData[0].PrdNo;", " var Qty = reqBody.BodyData[0].Qty;", " pm.environment.set(\"prd-no\", PrdNo);", " pm.environment.set(\"sa-qty\", Qty);", " ", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SA\",\n \"SalNo\": \"LS\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"SO\",\n \"BilNo\": \"{{t-erp-api-so-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] } }, "response": [] }, { "name": "10-查询销售出库单信息", "event": [ { "listen": "test", "script": { "exec": [ "", "pm.test(\"✅ 查询销售出库单成功\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", () => {", " const res = pm.response.json();", " const saQty = Number(res.Data.BODYDATA1[0].QTY);", " pm.environment.set(\"sa-qty\", saQty);", "", " console.log(`✅ 已抓取入库数量,sa-qty = ${saQty}`);", "});", "", "pm.test(\"✅ 校验本次入库数量与受订下单数量一致\", () => {", " const res = pm.response.json();", " const saQty = Number(res.Data.BODYDATA1[0].QTY);", " const soQty = Number(pm.environment.get(\"so-qty\"));", " pm.expect(saQty).to.equal(", " soQty,", " `数量不一致校验失败:受订下单数量SO-QTY=${soQty},本次出库数量SA-QTY=${saQty}`", " );", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"SO\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-so-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}\r\n\r\n", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] } }, "response": [] }, { "name": "11-货品库存查询(报表)", "request": { "method": "GET", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "PRD_NO", "value": "YL0001", "type": "text" }, { "key": "WH", "value": "", "type": "text" }, { "key": "ISGROUPBYWH", "value": "T", "type": "text" } ], "url": { "raw": "{{t-erp-api-url}}/TbrECC/GetPrdStockData", "host": [ "{{t-erp-api-url}}" ], "path": [ "TbrECC", "GetPrdStockData" ] } }, "response": [] } ], "description": "采购订单→采购入库→库存验证→销售订单→销售出库 完整业务流程测试" }, { "name": "📦 单据测试用例(35种)", "item": [ { "name": "📂 采购类", "item": [ { "name": "PO - 采购订单", "item": [ { "name": "新增PO单", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data", "var dataJson;", "try {", " dataJson = JSON.parse(dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \"));", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析失败:\", e.message);", " pm.test(\"Data字段可正常解析\", () => pm.expect.fail(\"Data格式错误\"));", " return;", "}", "", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 采购订单:BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增采购订单成功\", function () {", " pm.response.to.have.status(200);", " pm.expect(resJson.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ TF_TABNAME=TF_POS\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_POS\");", "});", "", "pm.test(\"✅ 采购订单单号写入环境变量\", function () {", " pm.environment.set(\"t-erp-api-po-bill-no\", bilNo);", " console.log(`✅ 采购订单单号已写入:${bilNo}`);", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PO\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"EstDate\": \"{{t-erp-api-current-date}}\",\n \"Rem\": \"自动化测试-采购订单\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 100,\n \"Up\": 100,\n \"Rem\": \"测试用原料\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] } }, "response": [] }, { "name": "查询PO单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" }, { "key": "Content-Type", "value": "application/json", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"PO\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-po-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询PO单详情" }, "response": [] } ], "description": "单据类型:PO(采购订单),分类:采购类" }, { "name": "PC - 采购入库单", "item": [ { "name": "新增PC单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-pc-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PC\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"Rem\": \"采购入库订单测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10000,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增PC单(无来源)" }, "response": [] }, { "name": "新增PC单(转入PO来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-pc-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PC\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"PO\",\n \"BilNo\": \"{{t-erp-api-po-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增PC单(从PO单转入)" }, "response": [] }, { "name": "查询PC单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"PC\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-pc-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询PC单详情" }, "response": [] } ], "description": "单据类型:PC(采购入库单),分类:采购类" }, { "name": "PB - 采购退货单", "item": [ { "name": "新增PB单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"❌️ 需有来源单\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"F\");", " ", " // 将整个响应转为字符串检查", " let responseText = JSON.stringify(r);", " pm.expect(responseText).to.include(\"请输入来源单号\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PB\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增PB单(无来源)" }, "response": [] }, { "name": "新增PB单(转入PC来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-pb-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PB\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"PC\",\n \"BilNo\": \"{{t-erp-api-pc-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增PB单(从PC单转入)" }, "response": [] }, { "name": "查询PB单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"PB\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-pb-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询PB单详情" }, "response": [] } ], "description": "单据类型:PB(采购退货单),分类:采购类" }, { "name": "T6 - 采购暂估入库", "item": [ { "name": "新增T6单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_TI\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-t6-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"T6\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增T6单(无来源)" }, "response": [] }, { "name": "查询T6单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"T6\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-t6-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询T6单详情" }, "response": [] } ], "description": "单据类型:T6(采购暂估入库),分类:采购类" } ], "description": "采购类相关单据测试用例" }, { "name": "📂 销售类", "item": [ { "name": "SO - 销售订单", "item": [ { "name": "新增SO单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_POS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-so-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SO\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"KH0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"EstDate\": \"{{t-erp-api-current-date}}\",\n \"Rem\": \"销售订单测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SO单(无来源)" }, "response": [] }, { "name": "查询SO单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"SO\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-so-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询SO单详情" }, "response": [] } ], "description": "单据类型:SO(销售订单),分类:销售类" }, { "name": "SA - 销售出库单", "item": [ { "name": "新增SA单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-sa-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SA\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"KH0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"EstDate\": \"{{t-erp-api-current-date}}\",\n \"Rem\": \"销售订单测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SA单(无来源)" }, "response": [] }, { "name": "新增SA单(转入SO来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript" } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-sa-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript" } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SA\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"SO\",\n \"BilNo\": \"{{t-erp-api-so-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SA单(从SO单转入)" }, "response": [] }, { "name": "查询SA单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"SA\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-sa-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询SA单详情" }, "response": [] } ], "description": "单据类型:SA(销售出库单),分类:销售类" }, { "name": "SB - 销售退货单", "item": [ { "name": "新增SB单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"❌️ 需有来源单\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"F\");", " ", " // 将整个响应转为字符串检查", " let responseText = JSON.stringify(r);", " pm.expect(responseText).to.include(\"请输入来源单号\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SB\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"KH0001\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SB单(无来源)" }, "response": [] }, { "name": "新增SB单(转入SA来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-sb-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SB\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"SA\",\n \"BilNo\": \"{{t-erp-api-sa-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SB单(从SA单转入)" }, "response": [] }, { "name": "查询SB单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"SB\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-sb-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询SB单详情" }, "response": [] } ], "description": "单据类型:SB(销售退货单),分类:销售类" }, { "name": "CK - 备货单", "item": [ { "name": "新增CK单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_CK\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-ck-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"CK\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"KH0001\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增CK单(无来源)" }, "response": [] }, { "name": "查询CK单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"CK\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-ck-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询CK单详情" }, "response": [] }, { "name": "新增SA单(转入CK来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PSS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-sa-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SA\"\n },\n \"BodyData\": [\n {\n \"BilId\": \"CK\",\n \"BilNo\": \"{{t-erp-api-ck-bill-no}}\",\n \"BilItm\": 1\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SA单(从SO单转入)" }, "response": [] } ], "description": "单据类型:CK(销售开票),分类:销售类" }, { "name": "PN - 销售订单变更作业", "item": [ { "name": "新增SO单(后续转PN)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_POS\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-so-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"SO\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"KH0001\",\n \"DepNo\": \"0001\",\n \"SalNo\": \"LS\",\n \"EstDate\": \"{{t-erp-api-current-date}}\",\n \"Rem\": \"销售订单测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增SO单(无来源)" }, "response": [] }, { "name": "新增PN单(转入SO来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PM\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-pn-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": { // 必须,表头数据\n \"CallId\": \"PN\", // 必须,调用的单据识别号,\"PN\":表示销售订单变更作业\n \"Rem\": \"新增销售订单变更\" // 非必须,表头原因\n\n },\n \"BodyData\": [ // 必须,表身数据\n {\n\n \"ChgId\": \"3\", // 新增时必须,变更方式,\"1\":新增、\"2\":删除、\"3\":修改、\"4\":结案、\"5\":反结案\n \"BilNo\": \"{{t-erp-api-so-bill-no}}\", // 新增时必须,销售订单单据号码\n \"EstItm\": 1, // //新增时必须,销售订单表身项次,自2025-11-21后补丁包支持。传了该值无需在ExtendProps中传EST_ITM\n \"OldPrdNo\": \"YL0001\", // 新增时必须,原品号\n \"PrdNo\": \"YL0001\", // 新增时必须,现品号\n \"WhNo\": \"0001\", // 非必须,仓库代号\n \"Qty\": 20, // 必须,主数量\n \"Up\": 80, // 非必须,单价\n \"Rem\": \"这是表身摘要\", // 非必须,摘要\n \"ExtendProps\": { // 非必须,扩展功能,包括表身的其他字段以及用户自定义字段\n \"EST_DD\": \"{{t-erp-api-current-date}}\", // 字段名需与数据库表(TF_PM)中的栏位名称一致\n \"EST_ITM\": 1 // 新增时必须,销售订单表身项次,2025-11-21之前的程序通过这个方式指定销售订单表身项次\n }\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增PN单(无来源)" }, "response": [] }, { "name": "查询PN单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"PN\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-pn-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询PN单详情" }, "response": [] } ], "description": "单据类型:PN(销售预收款),分类:销售类" } ], "description": "销售类相关单据测试用例" }, { "name": "📂 库存类", "item": [ { "name": "WI - 库存入仓单", "item": [ { "name": "新增WI单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_IJ\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-wi-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"WI\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"WhNo\": \"0001\",\n \"DepNo\": \"0001\",\n \"Rem\": \"库存入仓单测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增W1单(无来源)" }, "response": [] }, { "name": "查询WI单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"WI\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-wi-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询W1单详情" }, "response": [] } ], "description": "单据类型:W1(库存入仓单),分类:库存类" }, { "name": "WO - 库存出仓单", "item": [ { "name": "新增WO单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_IJ\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-wo-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"WO\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"WhNo\": \"0001\",\n \"DepNo\": \"0001\",\n \"Rem\": \"库存出库单测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增WO单(无来源)" }, "response": [] }, { "name": "查询WO单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"WO\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-wo-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询WO单详情" }, "response": [] } ], "description": "单据类型:WO(库存出仓单),分类:库存类" }, { "name": "IC - 库存调拨单", "item": [ { "name": "新增IC单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_IC\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-ic-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"IC\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"WhNo2\": \"0007\",\n \"Qty\": 10,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增IC单(无来源)" }, "response": [] }, { "name": "查询IC单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"IC\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-ic-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询IC单详情" }, "response": [] } ], "description": "单据类型:IC(库存盘点单),分类:库存类" }, { "name": "IJ - 库存调整单", "item": [ { "name": "新增IJ单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_IJ\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-ij-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"IJ\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"AddId\": \"+\",\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 1000,\n \"Rem\": \"测试用摘要\"\n },\n {\n \"AddId\": \"-\",\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0007\",\n \"Qty\": 10,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增IJ单(无来源)" }, "response": [] }, { "name": "查询IJ单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"IJ\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-ij-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询IJ单详情" }, "response": [] } ], "description": "单据类型:IJ(库存调整单),分类:库存类" }, { "name": "MC - 原料调拨单", "item": [ { "name": "新增MC单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_MC\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-mc-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"MC\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\", \n \"WhNo2\": \"0007\", \n \"Up\": 200,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增MC单(无来源)" }, "response": [] }, { "name": "查询MC单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"MC\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-mc-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询MC单详情" }, "response": [] } ], "description": "单据类型:MC(原料调拨单),分类:库存类" }, { "name": "PI - 盘点作业", "item": [ { "name": "新增PI单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_PT\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-pi-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"PI\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"SalNo\": \"LS\"\n\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"QtyBook\": 970,\n \"QtyInv\": 900,\n \"Rem\": \"测试用摘要\"\n },\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0007\",\n \"QtyBook\": 0,\n \"QtyInv\": 70,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增PI单(无来源)" }, "response": [] }, { "name": "查询PI单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"PI\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-pi-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询PI单详情" }, "response": [] } ], "description": "单据类型:PI(盘点单),分类:库存类" } ], "description": "库存类相关单据测试用例" }, { "name": "📂 托外类", "item": [ { "name": "0- 新增基础资料", "item": [ { "name": "1.1 新增货品(ZCP0011+YL0011+YL0012)", "event": [ { "listen": "test", "script": { "exec": [ "var res = pm.response.json();", "console.log('新增货品返回:', JSON.stringify(res));", "", "pm.test('新增货品成功', function () {", " pm.response.to.have.status(200);", " if (res.OkCount !== undefined) {", " pm.expect(res.OkCount).to.be.greaterThan(0);", " }", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "prerequest", "script": { "exec": [ "" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "{{t-erp-api-content-type}}" }, { "key": "LoginId", "value": "{{t-erp-api-login-id}}" }, { "key": "Languageid", "value": "{{t-erp-api-language}}" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"PRD_NO\": \"ZCP0011\",\r\n \"NAME\": \"制成品0011\",\r\n \"UT\": \"台\",\r\n \"KND\": \"2\",\r\n \"REM\": \"制令调拨缴库倒冲领料测试\"\r\n },\r\n {\r\n \"PRD_NO\": \"YL0011\",\r\n \"NAME\": \"原料0011\",\r\n \"UT\": \"台\",\r\n \"KND\": \"4\",\r\n \"PRD_ML\": \"Y\",\r\n \"REM\": \"倒冲领料标记\"\r\n },\r\n {\r\n \"PRD_NO\": \"YL0012\",\r\n \"NAME\": \"原料0012\",\r\n \"UT\": \"台\",\r\n \"KND\": \"4\",\r\n \"PRD_ML\": \"Y\",\r\n \"REM\": \"倒冲领料标记\"\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Prdt/AppendToPrdt", "host": [ "{{t-erp-api-url}}" ], "path": [ "Prdt", "AppendToPrdt" ] } }, "response": [] }, { "name": "1.2 新增仓库(0008中转仓)", "event": [ { "listen": "test", "script": { "exec": [ "var res = pm.response.json();", "console.log('新增仓库返回:', JSON.stringify(res));", "", "pm.test('新增仓库成功', function () {", " pm.response.to.have.status(200);", " if (res.OkCount !== undefined) {", " pm.expect(res.OkCount).to.be.greaterThan(0);", " }", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "prerequest", "script": { "exec": [ "" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "{{t-erp-api-content-type}}" }, { "key": "LoginId", "value": "{{t-erp-api-login-id}}" }, { "key": "Languageid", "value": "{{t-erp-api-language}}" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"WH\": \"0008\",\r\n \"NAME\": \"中转仓\"\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Wh/AppendToWh", "host": [ "{{t-erp-api-url}}" ], "path": [ "Wh", "AppendToWh" ] } }, "response": [] }, { "name": "1.3 新增BOM(ZCP0011 V1.0配方)", "event": [ { "listen": "test", "script": { "exec": [ "var res = pm.response.json();", "console.log('新增BOM返回:', JSON.stringify(res));", "", "pm.test('新增BOM成功', function () {", " pm.response.to.have.status(200);", " if (res.OkCount !== undefined) {", " pm.expect(res.OkCount).to.be.greaterThan(0);", " }", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "prerequest", "script": { "exec": [ "" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "{{t-erp-api-content-type}}" }, { "key": "LoginId", "value": "{{t-erp-api-login-id}}" }, { "key": "Languageid", "value": "{{t-erp-api-language}}" } ], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"PRD_NO\": \"ZCP0011\",\r\n \"PF_NO\": \"V1.0\",\r\n \"QTY\": 1,\r\n \"WH_NO\": \"0003\",\r\n \"REM\": \"制成品0011配方\",\r\n \"BodyData\": [\r\n {\r\n \"PRD_NO\": \"YL0011\",\r\n \"QTY\": 10,\r\n \"WH_NO\": \"0001\",\r\n \"REM\": \"原料0011用量\"\r\n },\r\n {\r\n \"PRD_NO\": \"YL0012\",\r\n \"QTY\": 20,\r\n \"WH_NO\": \"0001\",\r\n \"REM\": \"原料0012用量\"\r\n }\r\n ]\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bom/AppendToBom", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bom", "AppendToBom" ] } }, "response": [] } ] }, { "name": "1- TW - 托外加工单", "item": [ { "name": "新增TW单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_TW\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-tw-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"TW\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0000\",\n \"PrdNo\": \"ZCP0011\",\n \"WhNo\": \"0003\",\n \"Qty\": 10,\n \"IdNo\": \"ZCP0011->V1.0\",\n \"CONTROL\":\"F\",\n \"CHK_SCHED\":\"F\",\n \"Rem\": \"托工倒冲领料流程-托外加工单\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0011\", // 必须,货品代号\n \"WhNo\": \"0001\", // 必须,仓库\n \"Qty\": 100 // 必须,主数量\n },\n {\n \"PrdNo\": \"YL0012\", // 必须,货品代号\n \"WhNo\": \"0001\", // 必须,仓库\n \"Qty\": 200 // 必须,主数量\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增TW单(无来源)" }, "response": [] }, { "name": "查询TW单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"TW\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-tw-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询TW单详情" }, "response": [] } ], "description": "单据类型:TW(托外加工单),分类:托外类" }, { "name": "WT - 批次托外单", "item": [ { "name": "新增WT单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_WT\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-wt-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"WT\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"CusNo\": \"CS0001\",\n \"DepNo\": \"0000\"\n\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"ZCP0011\",\n \"WhNo\": \"0003\",\n \"Qty\": 10,\n \"IdNo\": \"ZCP0011->V1.0\",\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增WT单(无来源)" }, "response": [] }, { "name": "查询WT单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});", "", "pm.test(\"✅ BUILD_BIL字段有值\", function () {", " const res = pm.response.json();", " const buildBil = res.Data.HEADDATA.BUILD_BIL;", " pm.expect(buildBil).to.exist;", " pm.expect(buildBil).not.to.be.null;", " pm.expect(buildBil).not.to.equal(\"\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"WT\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-wt-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询WT单详情" }, "response": [] } ], "description": "单据类型:WT(批次托外单),分类:托外类" } ], "description": "托外类相关单据测试用例" }, { "name": "📂 非生产领退料", "item": [ { "name": "M7 - 非生产领料单", "item": [ { "name": "新增M7单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_FL\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-m7-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"M7\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"WhNo\": \"0001\",\n \"DepNo\": \"0001\",\n \"Rem\": \"非生产领料测试\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增M7单(无来源)" }, "response": [] }, { "name": "查询M7单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"M7\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-m7-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询M7单详情" }, "response": [] }, { "name": "删除M7单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 删除成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 删除单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"CallId\": \"M7\",\n \"CallNo\": \"{{t-erp-api-m7-bill-no}}\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/DeleteBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "DeleteBill" ] }, "description": "删除M7单" }, "response": [] } ], "description": "单据类型:M7(非生产领料单),分类:非生产领退料" }, { "name": "M8 - 非生产退料单", "item": [ { "name": "新增M8单(无来源)", "event": [ { "listen": "prerequest", "script": { "exec": [ "// 【前置脚本】设置当天日期为环境变量,格式:YYYY-MM-DD", "function addZero(num) {", " return num < 10 ? '0' + num : num;", "}", "const now = new Date();", "const year = now.getFullYear();", "const month = addZero(now.getMonth() + 1);", "const day = addZero(now.getDate());", "const currentDate = `${year}-${month}-${day}`;", "pm.environment.set(\"t-erp-api-current-date\", currentDate);", "console.log(`✅ 环境变量设置成功:t-erp-api-current-date = ${currentDate}`);" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "// 1. 解析接口顶层的JSON响应", "var resJson = pm.response.json();", "console.log(\"✅ 接口顶层JSON解析成功\");", "", "// 2. 提取Data字段,做非空判断", "var dataRawStr = resJson.Data;", "if (!dataRawStr) {", " console.error(\"❌ Data字段为空/不存在,无法解析\");", " pm.test(\"Data字段非空\", () => pm.expect(dataRawStr).to.not.be.empty);", " return;", "}", "", "// 3. 解析Data为JSON对象(含异常捕获+清理\\r\\n)", "var dataJson;", "try {", " var dataCleanStr = dataRawStr.replace(/\\r\\n/g, \"\").replace(/\\s+/g, \" \");", " dataJson = JSON.parse(dataCleanStr);", " console.log(\"✅ Data字段成功转为JSON对象\", dataJson);", "} catch (e) {", " console.error(\"❌ Data解析为JSON失败:\", e.message);", " console.error(\"❌ Data原始字符串:\", dataRawStr);", " pm.test(\"Data字段可正常解析为JSON\", () => pm.expect.fail(\"Data格式错误,解析失败\"));", " return;", "}", "", "// 4. 提取关键字段", "var tfTabNameVal = dataJson.TF_TABNAME;", "var bilNo = dataJson.BIL_NO;", "var bilId = dataJson.BIL_ID;", "console.log(`📌 从Data中提取:TF_TABNAME=${tfTabNameVal},BIL_NO=${bilNo},BIL_ID=${bilId}`);", "", "pm.test(\"✅ 新增成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", "});", "", "pm.test(\"✅ Data中TF_TABNAME字段存在且正确\", () => {", " pm.expect(dataJson).to.have.property(\"TF_TABNAME\", \"TF_FL\");", "});", "", "pm.test(\"✅ 获取单据信息写入变量\", function () {", " pm.environment.set(\"t-erp-api-m8-bill-no\", bilNo);", " console.log(\"✅ 解析后的Data字段已存入环境变量\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"HeadData\": {\n \"CallId\": \"M8\",\n \"BilDate\": \"{{t-erp-api-current-date}}\",\n \"WhNo\": \"0001\",\n \"DepNo\": \"0001\"\n },\n \"BodyData\": [\n {\n \"PrdNo\": \"YL0001\",\n \"WhNo\": \"0001\",\n \"Qty\": 10,\n \"Up\": 100,\n \"Rem\": \"测试用摘要\"\n }\n ]\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/SaveBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "SaveBill" ] }, "description": "新增M8单(无来源)" }, "response": [] }, { "name": "查询M8单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 查询成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 查询单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\r\n \"CallId\": \"M8\", // 必须,调用的单据识别号\r\n \"CallNo\": \"{{t-erp-api-m8-bill-no}}\" // 必须,调用的单据号码\r\n\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/QueryBillDetail", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "QueryBillDetail" ] }, "description": "查询M8单详情" }, "response": [] }, { "name": "删除M8单", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"✅ 删除成功校验\", function () {", " pm.response.to.have.status(200);", " let r = pm.response.json();", " pm.expect(r.CallOK).to.equal(\"T\");", " console.log(\"✅ 删除单据成功\");", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [ { "key": "LoginId", "value": "{{t-erp-api-login-id}}", "type": "text" }, { "key": "sn", "value": "{{t-erp-api-sn}}", "type": "text" } ], "body": { "mode": "raw", "raw": "{\n \"CallId\": \"M8\",\n \"CallNo\": \"{{t-erp-api-m8-bill-no}}\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{t-erp-api-url}}/Bill/DeleteBill", "host": [ "{{t-erp-api-url}}" ], "path": [ "Bill", "DeleteBill" ] }, "description": "删除M8单" }, "response": [] } ], "description": "单据类型:M8(非生产退料单),分类:非生产领退料" } ], "description": "非生产领退料相关单据测试用例" } ], "description": "覆盖全部35种单据类型,每种单据包含:新增(无来源)、新增(有来源转入,适用有来源关系的单据)、查询、审核、打印、删除" } ], "event": [ { "listen": "prerequest", "script": { "type": "text/javascript", "exec": [ "" ] } }, { "listen": "test", "script": { "type": "text/javascript", "exec": [ "" ] } } ] }