2_C# 实现VMS客户端——使用DotNetBar 10.9.0.4控件库

本文介绍如何使用C#结合DotNetBar 10.9.0.4控件库创建美观的VMS客户端。探讨了第三方控件库的功能、稳定性,并对比了知名控件库DotNetBar和DevExpress,提供了DotNetBar的下载链接。

声明:

  • 本博客为原创博客,主要讲述使用C#语言调用服务端SDK方式完成VMS客户端完整功能实现,转载请声明出处。
  • 如有技术问题或需交流可直接联系本人邮箱:chuiwenwei@163.com

简述:

  • 在C/S架构设计下,客户端是直接面对用户的应用软件,所以好用好看与否就显的非常重要,虽然VS已经在不断的改进自己的WinForm控件库,但依然在很多方面看起来非常的不好用也不好看,那么在这种情况下对于开发者有多种选择方式去解决这个问题。最常见的就是使用第三方成熟的控件库或是使用皮肤等主题库,或是直接由开发者自己重绘WinForm控件库为自己想要的效果。三种各有利弊,本篇主要讲述使用第三方成熟的控件库来实现好用好看的效果。

目录:

  • 第三方控件库、主题和重绘控件
  • 知名.Net 第三方控件库
  • DotNetBar 10.9.0.4控件库简述
  • DotNetBar 10.9.0.4 控件库下载链接

1.第三方控件库的功能和稳定性

  • 不论使用哪种方式,最根本的永远是基于WinForm的控件库进行修改然后重绘实现我们想要的效果。这里主要谈论两个问题:

  • 功能

首先我们要确定我们需要哪些功能,比如控件点击、滑动等操作时动态改变效果,背景透明,丰富的Tab

# -*- coding: utf-8 -*- # @Time : 2025/07/10 # @Author : likunyu1@tp-link.com.hk import uuid from test_cases.vms_cloud import VMSCloudBaseTestCase from function.vms_cloud.vms_org_mgmt.vms_org_mgmt import * from function.vms_cloud.design_tool.design_tool import * ''' 用例描述: 1、 2、 3、 ''' class MyTestCase(VMSCloudBaseTestCase): def __init__(self): super().__init__() self.init_case_name_id(os.path.basename(__file__)) self.case_info.author = '' self.logger.info('start test: {}'.format(self.case_info.name)) self.session = self.get_session() self.vms_id = None self.project_id = None self.map_id = None self.unique_id = None def pre_test(self): self.vms_id = get_a_vms_id_with_devices(self.session) self.project_id = get_a_project_id(self.session, self.vms_id) self.map_id = get_a_map_id(self.session, self.vms_id, self.project_id) data = {"markerName": 'lb{0}'.format(uuid.uuid1())[:10],"markerType":"LABEL","coordinate":[375.1453504407401,-8.077292235078176],"label":{"description":""}} errorCode, message, result = add_marker(self.session, self.vms_id, self.project_id, self.map_id, data) self.check_result(errorCode, 0, '新增标记点') self.check_result(message, 'success.', '新增标记点') self.unique_id = result['uniqueId'] def do_test(self): data = {"coordinate":[-2.9973357015985584,114.39831261030429]} errorCode, message = edit_marker_v2(self.session, self.vms_id, self.project_id, self.map_id, self.unique_id, data) self.check_result(errorCode, 0, '编辑标记点v2') self.check_result(message, 'success.', '编辑标记点v2') def clean_test(self): errorCode, message = delete_marker_v2(self.session, self.vms_id, self.project_id, self.map_id, self.unique_id) self.check_result(errorCode, 0, '删除标记点') self.check_result(message, 'success.', '删除标记点') if __name__ == "__main__": test = MyTestCase() try: test.pre_test() test.do_test() test.clean_test() except Exception as e: test.export_test_result_when_catch_exception(e) raise e else: test.export_test_result()
最新发布
09-11
你提供的这段 Python 代码是一个基于 `unittest` 或自定义封装的自动化测试用例脚本,用于测试 VMS(视频管理系统)云平台中标记点(marker)的新增、编辑和删除功能。下面我将从结构、流程、代码优化建议、潜在问题等角度进行分析,并给出改进方案。 --- ## ✅ 代码功能解析 ### 类结构 ```python class MyTestCase(VMSCloudBaseTestCase): ``` - 继承自 `VMSCloudBaseTestCase`,说明这是一个封装了基础功能的测试类,如登录、会话管理、断言方法等。 ### 初始化方法 ```python def __init__(self): super().__init__() ... ``` - 初始化测试类,并设置日志、会话、vms_id、map_id 等变量。 ### 测试流程 1. `pre_test()`: - 获取 `vms_id`、`project_id`、`map_id` - 使用 `add_marker()` 添加一个标记点,并保存 `unique_id` 2. `do_test()`: - 使用 `edit_marker_v2()` 编辑刚刚添加的标记点 3. `clean_test()`: - 使用 `delete_marker_v2()` 删除该标记点,确保测试后环境干净 --- ## ✅ 代码优点 - 结构清晰:`pre_test`, `do_test`, `clean_test` 分工明确 - 日志记录完整:使用 `self.logger.info()` 记录测试开始 - 异常处理完善:`try-except` 块中捕获异常并导出结果 --- ## 🛠️ 建议改进点 ### 1.使用 `setUp()` 和 `tearDown()` 替代手动调用 Python 的 `unittest` 框架提供了标准的测试生命周期方法: ```python def setUp(self): self.vms_id = get_a_vms_id_with_devices(self.session) ... def tearDown(self): if self.unique_id: delete_marker_v2(self.session, self.vms_id, self.project_id, self.map_id, self.unique_id) ``` 这样可以确保即使测试失败,也能清理资源。 --- ### 2.使用 `uuid.uuid4()` 替代 `uuid.uuid1()` ```python "markerName": 'lb{0}'.format(uuid.uuid1())[:10] ``` - `uuid1()` 包含时间戳,容易重复(在极短时间内) - 推荐使用 `uuid4()`,生成更随机的 ID: ```python "markerName": f'lb{uuid.uuid4()}' ``` --- ### 3.使用 `f-string` 提升可读性 ```python "markerName": 'lb{0}'.format(uuid.uuid1())[:10] ``` 可以改写为: ```python "markerName": f'lb{uuid.uuid1()}'[:10] ``` --- ### 4. ✅ 增加失败重试机制(可选) 如果接口调用偶尔失败,可以使用装饰器或封装函数实现重试逻辑: ```python from retry import retry @retry(tries=3, delay=1) def add_marker_with_retry(...): ... ``` --- ### 5. ✅ 添加测试描述和用例信息 ```python ''' 用例描述: 1、 2、 3、 ''' ``` 建议补充完整描述,例如: ```python ''' 用例描述: 1. 验证用户可以成功添加一个标记点 2. 验证用户可以编辑该标记点的坐标 3. 验证用户可以删除该标记点 ''' ``` --- ## ✅ 改进后的完整代码示例 ```python # -*- coding: utf-8 -*- # @Time : 2025/07/10 # @Author : likunyu1@tp-link.com.hk import uuid from test_cases.vms_cloud import VMSCloudBaseTestCase from function.vms_cloud.vms_org_mgmt.vms_org_mgmt import * from function.vms_cloud.design_tool.design_tool import * ''' 用例描述: 1. 验证用户可以成功添加一个标记点 2. 验证用户可以编辑该标记点的坐标 3. 验证用户可以删除该标记点 ''' class MyTestCase(VMSCloudBaseTestCase): def __init__(self): super().__init__() self.init_case_name_id(os.path.basename(__file__)) self.case_info.author = '' self.logger.info('start test: {}'.format(self.case_info.name)) self.session = self.get_session() self.vms_id = None self.project_id = None self.map_id = None self.unique_id = None def setUp(self): self.vms_id = get_a_vms_id_with_devices(self.session) self.project_id = get_a_project_id(self.session, self.vms_id) self.map_id = get_a_map_id(self.session, self.vms_id, self.project_id) data = { "markerName": f'lb{uuid.uuid4()}', "markerType": "LABEL", "coordinate": [375.1453504407401, -8.077292235078176], "label": {"description": ""} } errorCode, message, result = add_marker(self.session, self.vms_id, self.project_id, self.map_id, data) self.check_result(errorCode, 0, '新增标记点') self.check_result(message, 'success.', '新增标记点') self.unique_id = result['uniqueId'] def test_edit_marker(self): data = {"coordinate": [-2.9973357015985584, 114.39831261030429]} errorCode, message = edit_marker_v2(self.session, self.vms_id, self.project_id, self.map_id, self.unique_id, data) self.check_result(errorCode, 0, '编辑标记点v2') self.check_result(message, 'success.', '编辑标记点v2') def tearDown(self): if self.unique_id: errorCode, message = delete_marker_v2(self.session, self.vms_id, self.project_id, self.map_id, self.unique_id) self.check_result(errorCode, 0, '删除标记点') self.check_result(message, 'success.', '删除标记点') if __name__ == "__main__": import unittest unittest.main() ``` --- ## ✅ 总结建议 | 项目 | 建议 | |------|------| | 使用 `setUp()` / `tearDown()` | ✅ 更规范的测试生命周期管理 | | 使用 `uuid.uuid4()` | ✅ 更安全的唯一标识 | | 使用 `f-string` | ✅ 提高代码可读性 | | 补充测试描述 | ✅ 提高测试可维护性 | | 使用 `unittest.main()` | ✅ 更标准的执行方式 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值