test(deploy): 记录转换服务测试发布与浏览器验收

This commit is contained in:
2026-10-04 13:48:04 +08:00
parent 2a1192eb7e
commit 125b12a1d8
20 changed files with 2214 additions and 6 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

@@ -0,0 +1,139 @@
{
"passed": true,
"environment": "test",
"url": "https://demo.51easyai.com/ai/canvas/6ac046133db0eda177a9896e",
"projectId": "6ac046133db0eda177a9896e",
"nodeId": "model-conversion-deployment-acceptance",
"apiVersion": "3.23.0.20261003.1",
"standingHeight": 1.72,
"lightweight": true,
"quality": "performance",
"importedDimensions": {
"width": "20.00",
"height": "0.20",
"depth": "20.00"
},
"uncachedUploadEvidence": "uncached-import.json",
"scaleChecks": [
{
"scale": 0.05,
"width": 1.0,
"height": 0.01,
"depth": 1.0
},
{
"scale": 10.0,
"width": 200.0,
"height": 2.0,
"depth": 200.0
},
{
"scale": 20.0,
"width": 400.0,
"height": 4.0,
"depth": 400.0
},
{
"scale": 1.0,
"width": 20.0,
"height": 0.2,
"depth": 20.0
}
],
"scaleChecksEvidence": "transform-save.json",
"savedResource": {
"resourceId": "c459455a-7479-4310-8b66-3da706dfc513",
"selected": "lightweight",
"format": "obj",
"sceneBytes": 3239,
"containsBase64": false
},
"reopenedDimensions": {
"width": 20,
"height": 0.2,
"depth": 20
},
"errors": [],
"requests": [
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugins/runtime-manifest"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/runtime-snapshots"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/upload/files/2026-10-04%2F6937758647fc2fff48b99759%2Fupload%2Fdirector-3d-model-conversion-deployme-3sfggu.png"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/resource-actions"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

@@ -0,0 +1,33 @@
{
"passed": true,
"source": "captured live Playwright import, scale and UI save run",
"scaleChecks": [
{
"scale": 0.05,
"width": 1.0,
"height": 0.01,
"depth": 1.0
},
{
"scale": 10.0,
"width": 200.0,
"height": 2.0,
"depth": 200.0
},
{
"scale": 20.0,
"width": 400.0,
"height": 4.0,
"depth": 400.0
},
{
"scale": 1.0,
"width": 20.0,
"height": 0.2,
"depth": 20.0
}
],
"savedResourceId": "c459455a-7479-4310-8b66-3da706dfc513",
"saveBehavior": "Save persists sceneState and closes editor; no extra Close click is needed",
"logExcerpt": "stage: 'saved',\n scaleChecks: [\n { scale: 0.05, width: 1, height: 0.01, depth: 1 },\n { scale: 10, width: 200, height: 2, depth: 200 },\n { scale: 20, width: 400, height: 4, depth: 400 },\n { scale: 1, width: 20, height: 0.2, depth: 20 }\n ],\n resourceId: 'c459455a-7479-4310-8b66-3da706dfc513'"
}
@@ -0,0 +1,124 @@
{
"passed": true,
"standingHeight": "1.72",
"lightweight": true,
"quality": "performance",
"dimensions": {
"width": "20.00",
"height": "0.20",
"depth": "20.00"
},
"errors": [],
"requests": [
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugins/runtime-manifest"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/runtime-snapshots"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/resource-actions"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "POST",
"status": 201,
"path": "https://demo.51easyai.com/api/model-conversion/resources/source-upload"
},
{
"method": "PUT",
"status": 200,
"path": "https://demo.51easyai.com/api/file/upload/presigned"
},
{
"method": "POST",
"status": 201,
"path": "https://demo.51easyai.com/api/model-conversion/resources/complete"
},
{
"method": "POST",
"status": 201,
"path": "https://demo.51easyai.com/api/canvas-workflow/execute"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/tasks/6ac1e6066b4e2617cabdafa5"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/plugin-installations/snapshot"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/tasks/6ac1e6066b4e2617cabdafa5"
},
{
"method": "GET",
"status": 200,
"path": "https://demo.51easyai.com/api/canvas-workflow/tasks/6ac1e6066b4e2617cabdafa5"
}
]
}
@@ -0,0 +1,50 @@
{
"environment": "test",
"trigger": {
"entry": "/ai/canvas/:projectId",
"file": "stage-20m.obj",
"sourceUnit": "m",
"lightweight": true,
"quality": "performance",
"storage": "local presigned upload with optional headers omitted"
},
"before": {
"sourceUploadHTTP": 201,
"headersPresent": false,
"putAttempted": false,
"completeAttempted": false,
"exception": "TypeError: Cannot convert undefined or null to object",
"uiMessage": "模型未能加载,当前场景保持不变。请检查文件后重试。",
"screenshot": "import-failed.png"
},
"cause": {
"frontend": "Object.entries(upload.headers)",
"api": "ModelConversionService.prepareSource returned optional storage headers without normalizing its required browser response field",
"storageContract": "OssService.getPreSignedUrlS3 headers is optional; local storage intentionally omits it"
},
"fix": {
"backendSource": "be56a7e0ec79d1a1e7420d870709014ed4bf010a",
"apiVersion": "3.23.0.20261003.1",
"change": "Return upload.headers ?? {} in model-conversion source-upload API; leave supplied signature headers unchanged",
"scope": "Model conversion upload plan only; generic storage behavior unchanged"
},
"regression": {
"before": {
"tests": 2,
"failed": 1,
"passed": 1,
"seconds": 0.579,
"failure": "browserPlan.upload.headers expected {} but received undefined"
},
"after": {
"modelConversionTests": 13,
"modelConversionSeconds": 0.84,
"nxElapsedSeconds": 2.38,
"storageTests": 27,
"storageSeconds": 0.638,
"storageNxElapsedSeconds": 1.87
},
"sharedBuildSeconds": 0.66,
"apiNxBuildSeconds": 20.83
}
}