4. 测试需求分析
好,咱们进入第四章。前面三章我们把硬件、系统、网络都搞定了,现在这台工控机已经能跑能联网了。但说实话,这离「能干活」还差得远。
你想想看,座舱测试最烦人的是什么?是你要反复在工控机和开发机之间来回跑。改个脚本要插U盘,看个日志要蹲在机器前面,版本管理全靠「_final_真的不改了.zip」——这哪行?
所以这一章,我们把基础开发环境配齐。说白了,就是让你能远程干活、版本可控、脚本能跑。我在项目里见过太多人卡在这些基础配置上,一卡就是半天,不值当。
4.1 SSH 服务:远程登录的基石
SSH 这东西,做测试的几乎天天用。但很多人只是「会用」,没想过怎么配才安全、才顺手。
我个人习惯,装完系统第一件事就是开 SSH。为什么?因为我不想一直蹲在工控机前面。把机器往机柜里一塞,后面所有操作都在笔记本上完成,这才是正经开发姿势。
4.1.1 安装与启动
Ubuntu 22.04 默认没装 SSH 服务端,需要手动来。命令很简单:
# 更新包索引
sudo apt update
# 安装 OpenSSH 服务端
sudo apt install openssh-server -y
# 检查服务状态
sudo systemctl status ssh
# 如果没启动,手动启动并设置开机自启
sudo systemctl start ssh
sudo systemctl enable ssh
装完之后,在笔记本上试一下能不能连:
ssh username@工控机IP
能连上就对了。连不上?八成是防火墙没放行,或者 IP 配错了。
/etc/ssh/sshd_config 里改 Port 字段,改完记得重启服务。
4.1.2 密钥登录配置
密码登录虽然方便,但每次都要输密码,而且安全性一般。我建议你配密钥登录,一劳永逸。
# 在笔记本上生成密钥对(如果还没有)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 把公钥传到工控机
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@工控机IP
# 测试免密登录
ssh username@工控机IP
配好之后,再改一下 SSH 配置文件,禁用密码登录:
sudo vim /etc/ssh/sshd_config
# 找到下面两行,改成这样
PasswordAuthentication no
PubkeyAuthentication yes
# 重启服务
sudo systemctl restart ssh
PasswordAuthentication no 之前,一定要确保密钥登录已经能用了。我曾经有一次手快,先改了配置,结果密钥没传上去,自己把自己锁在外面了……最后只能接显示器键盘去改回来,尴尬得很。
4.2 VNC 远程桌面:图形化操作的救星
SSH 虽然好,但有些场景还是得看桌面。比如调试 HMI 界面、操作一些图形化工具,光靠命令行搞不定。
VNC 的方案很多,我推荐用 TigerVNC,轻量、稳定,在座舱测试场景里够用了。
4.2.1 安装 TigerVNC
sudo apt install tigervnc-standalone-server tigervnc-common -y
4.2.2 配置 VNC 用户
每个用户需要单独配置 VNC。先设置密码:
vncpasswd
# 输入两次密码,会生成 ~/.vnc/passwd 文件
然后创建启动配置文件 ~/.vnc/xstartup:
#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XDG_CURRENT_DESKTOP=ubuntu:GNOME
export GNOME_SHELL_SESSION_MODE=ubuntu
exec /usr/bin/gnome-session
给执行权限:
chmod +x ~/.vnc/xstartup
4.2.3 启动 VNC 服务
# 启动 :1 号显示器
vncserver :1 -geometry 1920x1080 -depth 24
# 查看已启动的 VNC 会话
vncserver -list
在笔记本上用 VNC Viewer 连接 工控机IP:5901,就能看到桌面了。
xstartup 文件的问题。我遇到过 GNOME 和 VNC 不兼容的情况,后来换成 xface4 桌面环境就好了。轻量级桌面在远程场景下反而更稳定。
4.3 Git 版本控制:代码的后悔药
做座舱测试,脚本会越写越多。没有版本控制,改坏了只能拍大腿。Git 这东西,我建议你从一开始就用起来,别等到代码乱成一锅粥再后悔。
4.3.1 安装与基础配置
sudo apt install git -y
# 配置用户信息(提交代码时会用到)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 推荐配置:换行符处理
git config --global core.autocrlf input
# 推荐配置:中文显示不乱码
git config --global core.quotepath false
4.3.2 创建测试脚本仓库
我习惯在工控机上建一个本地仓库,所有测试脚本都放里面:
mkdir ~/test_scripts
cd ~/test_scripts
git init
# 创建第一个测试脚本
echo 'print("Hello, Cockpit Test!")' > hello_test.py
git add hello_test.py
git commit -m "初始化测试脚本仓库"
4.3.3 远程仓库配置(可选但推荐)
如果团队有 GitLab 或 GitHub,建议把仓库推到远程,方便多人协作:
git remote add origin git@your-git-server:username/test_scripts.git
git push -u origin main
.gitignore 文件,把配置文件、日志文件、密码文件都排除掉。我见过有人把数据库密码直接提交到 Git 仓库的……那场面,相当尴尬。
4.4 Python3 环境:测试脚本的发动机
座舱测试,Python 是主力语言。Ubuntu 22.04 自带 Python3,但版本可能不是最新的,而且缺少很多测试需要的库。
4.4.1 确认 Python3 版本
python3 --version
# 输出类似:Python 3.10.12
3.10 版本够用了。如果项目要求更高版本,可以用 deadsnakes PPA 安装:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 -y
4.4.2 安装 pip 和虚拟环境
sudo apt install python3-pip python3-venv -y
# 升级 pip
pip3 install --upgrade pip
4.4.3 创建测试专用虚拟环境
我强烈建议每个项目用独立的虚拟环境,避免包冲突:
# 创建虚拟环境
python3 -m venv ~/venvs/cockpit_test
# 激活环境
source ~/venvs/cockpit_test/bin/activate
# 安装常用测试库
pip install pytest
pip install requests
pip install pyserial
pip install python-can
# 退出环境
deactivate
~/.bashrc 里加一个别名,快速激活虚拟环境:
echo 'alias ctenv="source ~/venvs/cockpit_test/bin/activate"' >> ~/.bashrc
source ~/.bashrc
以后只要输入 ctenv 就能进入测试环境,省事。
4.5 环境验证:确保一切就绪
配完之后,我建议你跑一个快速验证脚本,确保所有组件都能正常工作:
#!/bin/bash
# 环境验证脚本
echo "=== SSH 服务检查 ==="
sudo systemctl is-active ssh && echo "SSH: OK" || echo "SSH: FAIL"
echo "=== VNC 服务检查 ==="
vncserver -list 2>/dev/null | grep -q ":" && echo "VNC: OK" || echo "VNC: FAIL"
echo "=== Git 检查 ==="
git --version && echo "Git: OK" || echo "Git: FAIL"
echo "=== Python3 检查 ==="
python3 --version && echo "Python3: OK" || echo "Python3: FAIL"
echo "=== 虚拟环境检查 ==="
source ~/venvs/cockpit_test/bin/activate && python3 -c "import pytest; print('pytest:', pytest.__version__)" && deactivate && echo "VENV: OK" || echo "VENV: FAIL"
全部通过?恭喜,你的基础开发环境已经搭好了。后面写脚本、跑测试、远程调试,都会顺畅很多。