尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

简历技术栈全面复习——Python全栈

发布时间:2026/9/29 2:12:35

资讯中心
01
ARTICLE

简历技术栈全面复习——Python全栈

简历技术栈全面复习——Python全栈
Web浏览器 │ ↓ Flask-SocketIO │ ↓ Python测试平台 │ ┌────────────┼────────────┐ ↓ ↓ ↓ CAN测试 IMU测试 EtherCAT测试 │ ↓ C控制程序 │ ↓ 电机/设备同时 Python 还负责测试任务 ↓ 启动程序 ↓ 监控程序 ↓ 超时判断 ↓ 停止程序 ↓ 获取结果 ↓ SQLite ↓ PDF报告所以你这里的 Python本质上不是“写几个 Python 脚本。”而是Python 作为测试平台的上层调度与控制层。1、Python如何启动C程序这是你简历中的“Python桥接”非常重要的一部分。假设你有一个 C 程序ethercat_test.exePython需要启动 ↓ 等待 ↓ 获取输出 ↓ 判断结果 ↓ 必要时停止最常见的工具之一subprocess例如import subprocess process subprocess.Popen( [ethercat_test.exe] )可以理解成Python ↓ subprocess ↓ 启动C程序2、Python桥接你可以把它理解成Python负责“管理”C负责“干活”。例如用户点击 “开始测试” ↓ Python ↓ 启动C测试程序 ↓ C连接EtherCAT ↓ 执行测试 ↓ 输出结果 ↓ Python获取结果 ↓ 保存SQLite ↓ Web显示这就是你简历里的Python桥接。3、超时看门狗例如开始测试 ↓ 启动C ↓ 等待结果正常10秒 ↓ 完成异常C程序卡住 ↓ 一直不返回如果没有超时Python ↓ 永远等所以需要Watchdog即看门狗。例如规定最大执行时间 30秒流程启动任务 ↓ 开始计时 ↓ 任务运行 ↓ 检查是否完成 ├── 完成 → 正常结束 │ └── 30秒到了 ↓ 超时 ↓ 停止程序 ↓ 记录异常 ↓ 测试失败所以Watchdog 防止任务无限卡死4、互斥测试任务不能乱跑。比如用户A 点击开始EtherCAT测试 同时 用户B 又点击开始EtherCAT测试如果两个任务同时操作同一套EtherCAT设备可能发生任务A初始化 任务B也初始化 任务A控制 任务B控制这显然危险。所以需要Lock形成测试任务 ↓ 获取锁 ↓ 执行 ↓ 释放锁另一个任务等待5、FlaskFlask是Python Web框架。可以让你的 Python 程序变成Web服务器例如浏览器 ↓ HTTP ↓ Flask ↓ Python6、GET和POST这是Web必须掌握的。GET一般用于获取数据。例如GET /results意思给我测试结果。POST一般用于提交数据/执行操作。例如POST /test/start意思启动测试。于是你的测试平台可能是浏览器 ↓ POST /test/start ↓ Python ↓ 启动测试7、Flask-SocketIOHTTP更像浏览器 ↓ 请求 ↓ 服务器 ↓ 响应而 SocketIO 可以让浏览器 ↕ 服务器保持实时通信。例如Python测试程序 ↓ 进度 10% ↓ 浏览器然后Python ↓ 进度 20% ↓ 浏览器用户页面可以实时变化。浏览器 │ │ HTTP ↓ ┌──────────────┐ │ Flask │ └──────┬───────┘ │ │ SocketIO ↓ Python测试平台 │ ┌─────────┼─────────┐ ↓ ↓ ↓ CAN测试 IMU测试 EtherCAT测试 │ ↓ subprocess │ ↓ C程序 │ ↓ EtherCAT │ ↓ 电机测试过程中C / Python ↓ 产生进度 ↓ SocketIO ↓ 浏览器实时显示测试结束结果 ↓ SQLite ↓ PDF这就是你简历中这一整套 Python 技术栈背后的真实关系。8、 SocketIO普通 HTTP浏览器 │ │ POST /test/start ↓ Python │ │ 启动测试 ↓ 返回结果问题是假设测试运行 60 秒。浏览器发送POST /test/start然后呢如果一直等0s 10s 20s 30s ... 60s用户什么都不知道。所以我们希望测试开始 ↓ 10% ↓ 20% ↓ 30% ↓ ... ↓ 100%实时告诉浏览器。这就是 SocketIO 很适合干的事情。HTTP 你问我答 SocketIO 保持一条实时通信通道例如浏览器 ←────────→ PythonPython可以主动告诉浏览器test_started progress warning error test_finishedHTTP负责“我要开始测试”而SocketIO负责“现在测试进行到哪里了”这两个不是互相替代而是配合使用。9、SQLite现在测试完成以后测试结果放在哪里最简单的方法当然是result.txt但是工程里很快就不够用了。例如你有34个平台测试 14个ROS2控制测试简历里确实写了这一测试规模。你以后会想查询最近一次测试 某个关节测试 失败的测试 某一天的测试 某个设备的历史结果这时候就需要数据库。SQLite就是一个非常轻量的数据库。它甚至可以直接是一个文件test.db你的程序Python ↓ SQLite ↓ test.db不需要像大型数据库那样单独部署一个数据库服务器。所以非常适合测试工具 桌面工具 小型平台 设备测试系统数据库非常经典的四个操作C Create R Read U Update D Delete也就是增 查 改 删例如增保存一次测试结果查查询最近10次测试改修改测试备注删删除测试记录你以后看到CRUD直接想到数据库基本操作。浏览器 │ ┌──────────┴──────────┐ │ │ HTTP SocketIO │ │ ↓ ↓ Flask接口 实时事件 │ │ └──────────┬──────────┘ ↓ Python平台 │ ┌──────────┼──────────┐ ↓ ↓ ↓ 测试调度 状态管理 日志 │ ↓ subprocess │ ↓ C │ ↓ EtherCAT/CAN/IMU │ ↓ 设备 测试结束 ↓ SQLite ↓ 测试结果 ↓ PDF报告这才是你简历里的 Python 技术栈。10、pytest测试框架 ↓ 测试函数 ↓ fixture ↓ 参数化 ↓ mock ↓ 异常测试 ↓ 硬件依赖隔离 ↓ 自动化回归11、Mock假设你的函数def test_motor(): connect_motor() send_command() result read_feedback() return result如果每次测试都真的连接EtherCAT ↓ 启动电机 ↓ 读反馈会非常麻烦。因为没有硬件就不能测试。而且真实硬件测试慢 危险 不稳定 难重复所以可以Mock掉真实硬件。把真实电机替换成假的测试对象例如test_motor() ↓ Mock Motor ↓ 返回预设反馈Python │ ├── 模块/包 │ ├── 类/异常 │ ├── Thread / Lock │ ├── subprocess │ └── Python ↔ C │ ├── Flask │ ├── Route │ ├── HTTP │ ├── GET │ ├── POST │ └── JSON │ ├── Flask-SocketIO │ ├── Event │ ├── Progress │ ├── Stop │ └── Exception │ ├── SQLite │ ├── Table │ ├── Row │ ├── Column │ ├── Primary Key │ └── CRUD │ ├── pytest │ ├── assert │ ├── fixture │ ├── parametrize │ ├── mock │ └── exception │ └── PyInstaller一个 Python 项目如何从开发环境变成别人可以直接使用的工具。12、 PyInstaller你开发的时候可能是main.py test_runner.py database.py web.py config.py ...运行python main.py但是交付给测试人员的时候对方可能没有Python pip 各种依赖如果你让对方自己安装Python Flask Flask-SocketIO pytest 其他依赖非常麻烦。所以希望Python源码 ↓ 打包 ↓ test_platform.exe然后Windows ↓ 双击 ↓ 运行这就是 PyInstaller 的核心价值。简单理解你的Python程序 Python运行环境 依赖库 ↓ PyInstaller ↓ 可执行程序所以开发环境和用户环境被隔离了一部分。开发环境Windows ├── Python ├── VS Code ├── Git ├── C ├── DLL ├── 配置 └── 测试设备交付环境Windows ├── test_platform.exe ├── config ├── DLL ├── logs └── tests两者不一定一样。所以你必须考虑程序运行时到底依赖什么开发时C:\project\config.yaml你代码里写死open(C:\\project\\config.yaml)换电脑以后文件不存在所以工程中应该尽量避免绝对路径写死更合理的是程序目录 ↓ config ↓ config.yaml也就是让程序根据自己的运行位置寻找资源。13、SSH你的项目还涉及本地 / SSH执行。SSH可以简单理解成远程登录另一台机器并执行命令。例如你的电脑 │ │ SSH ↓ 远程测试电脑然后你可以启动程序 查看日志 停止程序 获取结果浏览器 ↓ 测试平台 ↓ SSH ↓ 机器人测试机 ↓ 启动C程序 ↓ EtherCAT ↓ 机器人这时候 Python 就相当于远程测试调度器。TestRunner │ ┌──────┴──────┐ ↓ ↓ LocalRunner SSHRunner ↓ ↓ 本机subprocess SSH ↓ ↓ C程序 远程C程序浏览器 ↓ Flask ↓ Python TestRunner ↓ 判断执行方式 ├──────────────┐ ↓ ↓ Local SSH ↓ ↓ subprocess SSH ↓ ↓ C程序 远程C程序 ↓ ↓ EtherCAT EtherCAT ↓ ↓ 设备 设备测试完成设备 ↓ 测试结果 ↓ Python ↓ SQLite ↓ Web ↓ PDF这就是一个完整的自动化测试平台。Python │ ┌───────────────────┼───────────────────┐ ↓ ↓ ↓ Web层 测试层 数据层 │ │ │ Flask TestRunner SQLite │ │ │ SocketIO Local / SSH CRUD │ │ │ │ subprocess │ │ ↓ │ │ C │ │ │ │ └───────────────设备测试───────────────┘ │ ↓ 日志 │ ↓ PDF │ ↓ 验收部署所以CMake负责把项目和测试构建起来CTest负责统一执行测试。14、Debug / Release构建的时候Debug主要调试 定位问题比如断点 变量 调用栈Release优化 部署 正式运行所以你实际工作中经常是开发 ↓ Debug 验证 ↓ Release15、单元测试和集成测试现在区分两个概念。单元测试测试一个比较小的模块frame_merge()输入1 2 4 3看输出是否正确重点是模块本身。集成测试测试多个模块连起来UDP ↓ Frame Parser ↓ Frame Merge ↓ Protobuf ↓ ZMQ检查整条链路是否正常。拿到项目后第一步 ↓ 找根CMakeLists.txt然后第二步 ↓ 找add_subdirectory知道项目分成哪些模块再看第三步 ↓ add_library add_executable知道有哪些库 有哪些程序再看第四步 ↓ target_link_libraries知道谁依赖谁再看第五步 ↓ find_package知道依赖哪些第三方库最后第六步 ↓ enable_testing add_test知道测试在哪里CMake │ ┌────────┴────────┐ ↓ ↓ 正式代码 测试代码 │ │ ↓ ↓ Libraries Test Apps │ │ └────────┬────────┘ ↓ Dependencies │ ↓ Build System │ ↓ Build │ ↓ CTest │ ┌────────┼────────┐ ↓ ↓ ↓ Unit Integration Protocol Test Test Test
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。