Skip to main content
Glama
ferocknew

Fusion360 LLM Assistant

by ferocknew
test_view_tools.py8.64 kB
""" 视图相关工具的单元测试 """ import unittest from unittest.mock import patch, AsyncMock from test_base import Fusion360TestBase, MockFusion360API class TestViewTools(Fusion360TestBase): """视图工具测试类""" def setUp(self): super().setUp() self.mock_api = MockFusion360API() def test_get_view_default_params(self): """测试使用默认参数获取视图""" async def test(): # 模拟 get_view 调用 result = { "success": True, "result": { "view_data": "base64_encoded_image_data", "format": "png", "width": 1920, "height": 1080, "camera_position": None, "target_position": None } } self.log_test_result("获取视图(默认参数)", result) self.assert_api_call_success(result, ["view_data", "format", "width", "height"]) # 验证默认值 self.assertEqual(result["result"]["format"], "png") self.assertEqual(result["result"]["width"], 1920) self.assertEqual(result["result"]["height"], 1080) self.async_test(test()) def test_get_view_custom_size(self): """测试自定义尺寸获取视图""" async def test(): custom_sizes = [ (800, 600), (1024, 768), (1280, 720), (3840, 2160) # 4K ] for width, height in custom_sizes: result = { "success": True, "result": { "view_data": f"base64_image_{width}x{height}", "format": "png", "width": width, "height": height } } self.assert_api_call_success(result) self.assertEqual(result["result"]["width"], width) self.assertEqual(result["result"]["height"], height) self.log_test_result(f"自定义尺寸视图({len(custom_sizes)}种)", {"success": True}) self.async_test(test()) def test_get_view_different_formats(self): """测试不同格式的视图""" async def test(): formats = ["png", "jpg", "jpeg", "bmp", "tiff"] for fmt in formats: result = { "success": True, "result": { "view_data": f"base64_image_data_{fmt}", "format": fmt, "width": 1920, "height": 1080 } } self.assert_api_call_success(result) self.assertEqual(result["result"]["format"], fmt) self.log_test_result(f"不同格式视图({len(formats)}种)", {"success": True}) self.async_test(test()) def test_get_view_with_camera_position(self): """测试指定相机位置的视图""" async def test(): camera_positions = [ [100, 100, 100], # 等距视角 [0, 0, 200], # 正上方 [200, 0, 0], # 侧面 [-100, -100, 50], # 斜角 ] for cam_pos in camera_positions: result = { "success": True, "result": { "view_data": f"base64_camera_view_{cam_pos[0]}_{cam_pos[1]}_{cam_pos[2]}", "format": "png", "width": 1920, "height": 1080, "camera_position": cam_pos } } self.assert_api_call_success(result) self.assertEqual(result["result"]["camera_position"], cam_pos) self.log_test_result(f"相机位置视图({len(camera_positions)}个)", {"success": True}) self.async_test(test()) def test_get_view_with_target_position(self): """测试指定目标位置的视图""" async def test(): target_positions = [ [0, 0, 0], # 原点 [50, 50, 0], # 偏移目标 [0, 100, 50], # Y轴偏移 ] for target_pos in target_positions: result = { "success": True, "result": { "view_data": f"base64_target_view_{target_pos[0]}_{target_pos[1]}_{target_pos[2]}", "format": "png", "width": 1920, "height": 1080, "target_position": target_pos } } self.assert_api_call_success(result) self.assertEqual(result["result"]["target_position"], target_pos) self.log_test_result(f"目标位置视图({len(target_positions)}个)", {"success": True}) self.async_test(test()) def test_get_view_invalid_params(self): """测试无效参数的视图获取""" async def test(): invalid_cases = [ {"width": -100, "height": 600, "error": "无效的宽度"}, {"width": 800, "height": -100, "error": "无效的高度"}, {"width": 0, "height": 600, "error": "宽度不能为0"}, {"format": "invalid_format", "error": "不支持的格式"}, ] for case in invalid_cases: result = { "success": False, "error": case["error"] } self.assert_api_call_failure(result) self.log_test_result("无效参数处理", {"success": True}) self.async_test(test()) def test_view_data_validation(self): """测试视图数据验证""" async def test(): result = { "success": True, "result": { "view_data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==", "format": "png", "width": 1920, "height": 1080 } } # 验证返回的数据结构 self.assert_api_call_success(result) view_data = result["result"]["view_data"] self.assertIsInstance(view_data, str, "视图数据应该是字符串") self.assertGreater(len(view_data), 0, "视图数据不应为空") # 简单的 base64 格式验证 import base64 try: base64.b64decode(view_data) base64_valid = True except: base64_valid = False self.assertTrue(base64_valid, "视图数据应该是有效的 base64 编码") self.log_test_result("视图数据验证", {"success": True}) self.async_test(test()) def test_view_performance_simulation(self): """测试视图性能模拟""" async def test(): # 模拟不同分辨率下的性能 resolution_tests = [ {"width": 320, "height": 240, "expected_time": 0.1}, # 低分辨率,快速 {"width": 1920, "height": 1080, "expected_time": 0.5}, # 标准分辨率 {"width": 3840, "height": 2160, "expected_time": 2.0}, # 4K,较慢 ] for test_case in resolution_tests: result = { "success": True, "result": { "view_data": f"performance_test_{test_case['width']}x{test_case['height']}", "format": "png", "width": test_case["width"], "height": test_case["height"], "render_time": test_case["expected_time"] } } self.assert_api_call_success(result) render_time = result["result"].get("render_time", 0) self.assertGreater(render_time, 0, "渲染时间应该大于0") self.log_test_result("视图性能模拟", {"success": True}) self.async_test(test()) def tearDown(self): """测试结束后清理""" self.print_test_summary() super().tearDown() if __name__ == '__main__': unittest.main(verbosity=2)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ferocknew/fusion360_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server