2026/6/20 9:51:38
网站建设
项目流程
黑龙江建设厅网站 孙宇,嘉兴网站建设运营,vi设计公司深圳,传奇辅助网站怎么做17 按照pytest自动化测试方案规划建立测试基础框架**
测试目录结构#xff1a;
tests/
├── pytest.ini
├── conftest.py
├── unit/ # 单元测试#xff08;优先#xff1a;protocol、macro、alarm#xff09;
├── integration/ # …17 按照pytest自动化测试方案规划建立测试基础框架**测试目录结构tests/ ├── pytest.ini ├── conftest.py ├── unit/ # 单元测试优先protocol、macro、alarm ├── integration/ # 集成测试serial protocol macro ├── ui/ # UI 测试keyboard、macro_editor、log_panel ├── e2e/ # 端到端测试完整用户流程 └── performance/ # 性能测试宏大循环、日志吞吐1. pytest.ini1.1 指定测试文件的位置和命名规则你可以通过配置项来改变pytest默认的测试文件查找规则。例如你可以指定测试文件所在的目录、测试文件的命名模式等。1.2 配置测试搜索路径可以添加额外的目录到测试搜索路径中。1.3 添加命令行默认选项你可以在pytest.ini中设置一些默认的命令行选项这样每次运行pytest时都会自动使用这些选项而不需要每次都手动输入。例如你可以设置默认使用详细输出-v或者自动识别并运行测试–tbshort等。1.4 注册标记markspytest允许你使用标记来分类测试但是为了避免标记名拼写错误你可以在pytest.ini中注册标记这样pytest会检查标记名是否有效。注册标记时还可以提供标记的描述信息。1.5 配置测试报告可以配置测试报告的格式例如使用JUnit XML格式输出测试结果以便于持续集成工具如Jenkins读取。1.6 配置插件可以启用或禁用pytest插件也可以配置插件的参数。1.7 环境变量设置可以在pytest.ini中设置环境变量这些环境变量将在测试运行时生效。1.8 配置测试运行的行为例如可以配置测试超时时间、并发执行测试的进程数如果使用了pytest-xdist插件等。# tests/pytest.ini [pytest] testpaths tests python_files test_*.py *_test.py python_classes Test* *Test python_functions test_* *_test addopts -ra --tbshort --strict-markers --maxfail5 -p no:warnings --covcore --cov-reportterm-missing --cov-reporthtml:coverage_html --cov-reportxml:coverage.xml markers unit: 单元测试隔离依赖 integration: 集成测试模块交互 ui: UI 测试pytest-qt e2e: 端到端测试完整流程 performance: 性能测试cProfile slow: 慢测试可跳过 serial: 需要真实或mock串口 macro: 宏相关测试 filterwarnings ignore::DeprecationWarning ignore::PendingDeprecationWarning # 超时保护 timeout 30 timeout_method thread2. conftest.pyconftest.py 是 pytest 的一个特殊文件它用于存放 pytest 的夹具fixtures和插件配置这些夹具可以在该文件所在的目录以及所有子目录中的测试文件中使用。主要作用共享夹具fixtures可以在多个测试文件中共享夹具避免重复代码。夹具可以用于设置测试环境、准备测试数据、初始化资源等。钩子函数hooks可以自定义 pytest 的行为例如添加自定义的启动和清理逻辑、修改测试报告等。插件配置可以加载和配置 pytest 插件。自定义命令行选项可以通过钩子函数添加自定义命令行选项并在夹具或测试中使用。使用特点自动发现pytest 会自动发现 conftest.py 文件无需导入。作用域conftest.py 文件可以放在任何目录中其作用域为该目录及其所有子目录。可以在不同的目录中放置多个 conftest.py 文件子目录中的 conftest.py 会覆盖父目录中的同名夹具或钩子。不可导入测试文件不需要导入 conftest.py 中的夹具pytest 会自动注入。共享夹具可以用于跨测试文件共享夹具特别是当多个测试文件需要相同的设置时。# tests/conftest.pyimportpytestimporttempfileimportosimportjsonfromunittest.mockimportMock,patchfromPyQt5importQtWidgetsfromPyQt5.QtCoreimportQTimerimportserial# 用于mockfromcore.utils.log_emitterimportget_log_emitter# ----------------------------- 全局 fixture -----------------------------pytest.fixture(scopesession)defqt_app():QApplication 单例 fixtureappQtWidgets.QApplication.instance()ifappisNone:appQtWidgets.QApplication([])yieldapp# 避免退出时崩溃ifapp:app.quit()pytest.fixturedefqtbot(qt_app,qtbot):pytest-qt 的 qtbot自动使用 qt_appreturnqtbotpytest.fixturedefmock_serial(mocker):Mock pyserial.Serialmock_sermocker.patch(serial.Serial)mock_ser.return_value.is_openTruemock_ser.return_value.in_waiting0mock_ser.return_value.read.return_valuebmock_ser.return_value.write.return_valueNonereturnmock_serpytest.fixturedefmock_log_emitter(mocker):Mock LogEmitter 单例emitterget_log_emitter()mocker.patch.object(emitter,info)mocker.patch.object(emitter,warning)mocker.patch.object(emitter,error)mocker.patch.object(emitter,debug)mocker.patch.object(emitter,send)mocker.patch.object(emitter,receive)mocker.patch.object(emitter,alarm)returnemitterpytest.fixturedeftemp_settings():临时 settings.jsonwithtempfile.NamedTemporaryFile(modew,suffix.json,deleteFalse)asf:config{serial_config:{port:COM99,baud:9600,protocol:D,parity:None,kbd_address:1,default_cam_id:1}}json.dump(config,f)pathf.nameyieldpath os.unlink(path)pytest.fixturedeftemp_macro_dir(tmp_path):临时宏目录macro_dirtmp_path/resources/macrosmacro_dir.mkdir(parentsTrue,exist_okTrue)yieldstr(macro_dir)# ----------------------------- 常用 mock -----------------------------pytest.fixturedefmock_virtual_device(mocker):Mock VirtualDevicedevicemocker.MagicMock()device.process_command.return_valuebACKdevice.get_status_dict.return_value{pan:0.0,tilt:0.0}returndevice# ----------------------------- 参数化数据 -----------------------------pytest.fixture(params[b\xff\x01\x00\x02\x20\x20\x43,b\xa0\x01\x00\x00\x00\x00\x00\xaf])defsample_frame(request):D 和 P 协议示例帧returnrequest.param# ----------------------------- 清理 -----------------------------pytest.fixture(autouseTrue)defcleanup():yield# 可在此清理临时文件、停止定时器等两者对比特性conftest.pypytest.ini格式Python 代码INI 配置文件主要用途夹具、钩子、插件配置选项、参数位置可在多级目录通常只在根目录内容动态代码逻辑静态配置加载顺序多个文件层级加载单个文件下一步安排单元测试优先模块先写tests/unit/test_protocol.pybuild/parse 函数集成测试tests/integration/test_serial_protocol.pyUI 测试tests/ui/test_keyboard_joystick.py需要 pytest-qt端到端tests/e2e/test_macro_flow.py键盘 → 宏 → 协议 → 模拟器上一篇 项目硬件相关测试的 Mock 技巧详解总目录Python开发软键盘全程总览下一篇