第3章 Python基础回顾:环境配置与常用内置库

说实话,很多做测试的同学一开始都栽在环境配置上。我记得刚带团队那会儿,有个同事花了两天装Python,结果发现装了两个版本,pip还用不了——嗯,这种坑我踩过不止一次。这一章咱们就把这些基础打扎实,后面写脚本才不慌。

3.1 Python环境配置

Python版本怎么选?我个人建议直接用Python 3.8以上。为什么?因为现在主流的座舱测试框架基本都支持3.8+,像我们团队用的pytest、Appium这些,3.6以下已经跑不起来了。

我的经验:Windows用户记得勾选"Add Python to PATH",不然命令行敲python会报"不是内部或外部命令"。Mac用户直接用brew install python@3.10,干净利落。

验证环境是否装好,打开终端敲两行命令:

python --version
pip --version

能看到版本号,说明环境通了。如果pip报错,八成是PATH没配好。

3.2 pip源设置

pip默认源在国外,下载速度慢得让人抓狂。我在项目里遇到过,一个requests库下了五分钟还没完。解决办法很简单——换国内镜像源。

常用的几个源:

源名称 URL 推荐场景
清华源 https://pypi.tuna.tsinghua.edu.cn/simple 通用,稳定
阿里源 https://mirrors.aliyun.com/pypi/simple 速度最快
中科大源 https://pypi.mirrors.ustc.edu.cn/simple 教育网友好

永久设置方法(推荐):

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

临时用的话,安装时加 -i 参数就行:

pip install requests -i https://mirrors.aliyun.com/pypi/simple

小技巧:我习惯在项目根目录放一个pip.conf,这样不同项目可以用不同源。团队协作时特别方便,大家拉下来直接用,不用各自配。

3.3 虚拟环境管理

为什么要用虚拟环境?说白了就是隔离依赖。你想想看,项目A用Django 2.2,项目B用Django 4.0,装在一起肯定打架。虚拟环境就是给每个项目一个独立的"小房间"。

Python自带的venv就够用:

# 创建虚拟环境
python -m venv venv

# 激活(Windows)
venv\Scripts\activate

# 激活(Mac/Linux)
source venv/bin/activate

# 退出
deactivate

激活后,终端前面会出现 (venv) 标识,这时候pip安装的所有包都只在这个环境里生效。

避坑指南:我曾经把虚拟环境目录提交到Git仓库,结果队友拉下来后路径全乱了。记住,venv目录要加到.gitignore里。依赖管理用requirements.txt:

pip freeze > requirements.txt

我推荐用pipenv或者poetry管理依赖,但新手先用venv+requirements.txt,等熟悉了再升级。

3.4 常用内置库

Python内置库就是"开箱即用"的工具箱。写座舱测试脚本时,下面三个库几乎天天用。

3.4.1 os库——文件和路径操作

os库最常用的场景是拼接路径、判断文件是否存在、遍历目录。我写测试脚本时,经常用它来读取测试数据文件。

import os

# 获取当前脚本所在目录
current_dir = os.path.dirname(__file__)

# 拼接路径(自动处理不同系统的分隔符)
data_path = os.path.join(current_dir, "data", "test_cases.json")

# 判断文件是否存在
if os.path.exists(data_path):
    print("文件存在")
else:
    print("文件不存在,请检查路径")

# 遍历目录
for root, dirs, files in os.walk(current_dir):
    for file in files:
        if file.endswith(".json"):
            print(os.path.join(root, file))

注意:不要用字符串拼接路径,比如 current_dir + "/data/" + filename。Windows和Mac的路径分隔符不一样,os.path.join会自动处理。我见过太多因为路径问题导致的脚本报错了。

3.4.2 sys库——系统参数和退出

sys库最常用的是sys.argv和sys.exit。写命令行工具时,argv用来接收参数,exit用来控制退出码。

import sys

# 获取命令行参数
# 假设运行:python test_script.py --device emulator --log-level debug
script_name = sys.argv[0]  # test_script.py
device = sys.argv[1]       # --device
device_value = sys.argv[2] # emulator

# 简单参数解析(实际项目用argparse更规范)
if "--device" in sys.argv:
    idx = sys.argv.index("--device")
    device_name = sys.argv[idx + 1]
    print(f"测试设备:{device_name}")

# 退出脚本并返回状态码
# 0表示成功,非0表示失败
if not device_name:
    print("错误:未指定设备")
    sys.exit(1)

我在做座舱自动化测试时,经常用sys.exit(1)来标记测试失败,这样CI/CD流水线能自动识别。

3.4.3 subprocess库——执行系统命令

subprocess用来在Python里跑系统命令。比如启动模拟器、抓取日志、执行adb命令。

import subprocess

# 执行命令并获取输出
result = subprocess.run(
    ["adb", "devices"],
    capture_output=True,
    text=True,
    timeout=10
)

print(result.stdout)  # 标准输出
print(result.returncode)  # 返回码,0表示成功

# 检查adb是否连接设备
if "device" in result.stdout:
    print("设备已连接")
else:
    print("未检测到设备")

# 实时输出(适合长时间运行的命令)
process = subprocess.Popen(
    ["adb", "logcat", "-c"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True
)

# 等待命令完成
process.wait()

避坑指南:我曾经用os.system("adb reboot"),结果脚本卡死了。因为os.system会阻塞直到命令执行完,而adb reboot不会自动退出。改用subprocess.run并设置timeout参数,就能避免这种问题。

3.5 知识体系总览

下面这张图把本章的核心知识点串起来了,方便你对照复习:

Python基础回顾——知识体系 Python基础回顾 环境配置 pip源设置 虚拟环境管理 常用内置库 Python 3.8+ PATH配置 清华/阿里/中科大 pip config设置 venv创建/激活 requirements.txt os库 sys库 subprocess库 💡 核心要点 环境配置是基础 → pip源加速下载 → 虚拟环境隔离依赖 → 内置库简化开发

3.6 本章小结

这一章的内容说白了就是"磨刀不误砍柴工"。环境配好了,源设对了,虚拟环境用上了,后面写测试脚本才能顺风顺水。os、sys、subprocess这三个库,我几乎每个测试脚本都会用到,你练熟了就会发现——嗯,其实Python没那么难。

个人建议:别急着往下学,先把环境配好,跑通上面的代码示例。我见过太多人"眼高手低",结果写脚本时卡在路径问题上。基础打牢,后面才快。