第二章:仿真环境搭建——Linux基础命令回顾、Python环境配置、虚拟环境管理
说实话,很多做测试的同学一上来就急着写脚本,结果环境没搭好,折腾半天跑不起来。我见过太多这样的案例了。这一章,咱们就把仿真环境的基础打扎实。
2.1 Linux基础命令回顾
仿真回归测试,说白了就是在Linux服务器上跑自动化。你连基本的文件操作、进程管理都不会,后面寸步难行。我个人习惯把常用命令分成几类,记牢了就够用。
2.1.1 文件与目录操作
这些命令我每天至少用几十次,闭着眼睛都能敲出来。
# 查看当前目录
pwd
# 列出文件(-l 显示详情,-a 显示隐藏文件)
ls -la
# 切换目录
cd /home/test/project
# 创建目录(-p 递归创建)
mkdir -p test_case/report
# 复制文件
cp source.py target.py
# 移动/重命名
mv old_name.py new_name.py
# 删除文件(-r 递归删除目录)
rm -rf temp_dir
# 查看文件内容(前10行)
head -n 10 log.txt
# 实时查看日志(这个在调试脚本时太常用了)
tail -f test.log
tail -f 看日志时,配合 grep 过滤关键字,比如 tail -f test.log | grep "ERROR",能快速定位问题。
2.1.2 权限与进程管理
嗯,这里要注意。很多新手在Linux上跑脚本,遇到权限问题就懵了。我曾经因为忘记给脚本加执行权限,排查了半小时。
# 修改文件权限(chmod 755 表示所有者可读写执行,其他人可读可执行)
chmod 755 run_test.sh
# 修改文件所有者
chown test_user:test_group test.py
# 查看进程
ps aux | grep python
# 强制结束进程(-9 是强制杀死)
kill -9 12345
# 后台运行脚本(nohup 让进程忽略挂断信号)
nohup python run_test.py &
kill -9 了一个正在写数据库的进程,结果数据损坏了。建议先用 kill -15 优雅终止,不行再上 -9。
2.1.3 文本处理三剑客
做测试的,天天跟日志、配置文件打交道。grep、sed、awk 这三个工具,你想想看,学会了能省多少事。
# grep:搜索关键字(-r 递归,-n 显示行号)
grep -rn "AssertionError" test_report/
# sed:替换文本(-i 直接修改文件)
sed -i 's/old_string/new_string/g' config.py
# awk:按列处理(默认以空格分隔)
awk '{print $1, $3}' test_result.txt
举个例子,我经常用一行命令统计测试结果:
# 统计日志中 PASS 和 FAIL 的数量
grep -c "PASS" test.log
grep -c "FAIL" test.log
2.2 Python环境配置
Python版本问题,可以说是测试环境里最大的坑之一。我见过团队因为有人用了Python 3.6,有人用了3.10,结果脚本跑出来的结果都不一样。
2.2.1 检查Python版本
# 查看Python版本
python --version
python3 --version
# 查看Python安装路径
which python3
2.2.2 安装Python(以Ubuntu为例)
# 更新包列表
sudo apt update
# 安装Python 3
sudo apt install python3 python3-pip
# 验证安装
python3 --version
pip3 --version
如果你用的是CentOS或RHEL,命令稍有不同:
sudo yum install python3 python3-pip
2.2.3 pip的基本使用
pip是Python的包管理工具。说白了,你要用第三方库,就得靠它。
# 安装包
pip install requests
# 安装指定版本
pip install pytest==7.4.0
# 卸载包
pip uninstall requests
# 列出已安装的包
pip list
# 导出依赖到文件(这个在分享项目时特别有用)
pip freeze > requirements.txt
# 从文件安装依赖
pip install -r requirements.txt
requirements.txt。这样别人拉下代码,直接 pip install -r requirements.txt 就能跑起来,省心。
2.3 虚拟环境管理
为什么要用虚拟环境?你想想看,项目A需要Django 2.2,项目B需要Django 4.0。如果都装到系统里,迟早要打架。虚拟环境就是给每个项目一个独立的Python空间。
2.3.1 venv:Python自带的虚拟环境
venv是Python 3.3+自带的,不需要额外安装。我个人比较推荐新手先用这个,简单直接。
# 创建虚拟环境(会在当前目录生成 venv 文件夹)
python3 -m venv venv
# 激活虚拟环境(Linux/Mac)
source venv/bin/activate
# 激活后,命令行前面会出现 (venv) 标识
# 这时候安装的包只在这个环境里生效
pip install pytest
# 退出虚拟环境
deactivate
(venv) 标识。我曾经忘了激活,直接把包装到了系统环境里,结果搞乱了。
2.3.2 pipenv:更高级的虚拟环境管理
venv虽然简单,但有个痛点:它不自动管理依赖版本。pipenv就是来解决这个问题的。它会自动生成 Pipfile 和 Pipfile.lock,锁定每个依赖的版本。
# 安装pipenv
pip install pipenv
# 创建虚拟环境并安装依赖
pipenv install requests
# 激活虚拟环境
pipenv shell
# 安装开发依赖(比如pytest只在开发时用)
pipenv install --dev pytest
# 查看依赖关系
pipenv graph
# 退出虚拟环境
exit
pipenv有个好处:它会自动检测项目根目录下的 Pipfile,你不需要手动指定环境路径。我团队现在统一用pipenv,省去了很多环境不一致的问题。
2.3.3 两种方式对比
| 特性 | venv | pipenv |
|---|---|---|
| 是否需要额外安装 | Python自带 | 需要 pip install |
| 依赖版本锁定 | 不支持 | 支持(Pipfile.lock) |
| 依赖关系图 | 不支持 | 支持(pipenv graph) |
| 学习成本 | 低 | 中 |
| 适用场景 | 个人小项目 | 团队协作项目 |
2.4 实战:搭建一个仿真测试环境
光说不练假把式。咱们来搭一个真实的仿真测试环境。
# 1. 创建项目目录
mkdir -p simulation_test/{scripts,test_cases,reports,config}
# 2. 进入项目目录
cd simulation_test
# 3. 创建虚拟环境(选一种方式)
# 方式一:venv
python3 -m venv venv
source venv/bin/activate
# 方式二:pipenv
pip install pipenv
pipenv install
# 4. 安装常用测试库
pip install pytest pytest-html requests
# 5. 生成依赖文件
pip freeze > requirements.txt
# 6. 验证环境
python -c "import pytest; print('环境搭建成功!')"
嗯,到这里,你的仿真测试环境就搭好了。后面写脚本、跑测试,都在这个环境里进行,不会污染系统Python。
setup_env.sh。这样新同事加入,或者换机器,直接跑脚本就行,不用每次都手动敲一遍。
这一章的内容就这些。说白了,Linux命令是基本功,Python环境是地基,虚拟环境是隔离墙。这三样搞定了,后面的自动化脚本才能跑得稳。下一章,咱们开始写第一个仿真测试脚本。