6. 文件读写和数据驱动测试
文件读写是 Python 自动化测试中的基础能力。很多测试数据不会直接写在代码里,而是放在 JSON、YAML、CSV、Excel 等文件中。自动化脚本读取这些数据后,批量执行用例,这就是数据驱动测试的基本思路。测试工程师如果只会把参数写死在脚本里,后期维护成本会非常高。
面试中问文件读写和数据驱动,不是让你背 open 函数,而是看你是否理解测试数据和测试逻辑分离。好的自动化脚本应该做到:用例逻辑相对稳定,测试数据可以独立维护,新增用例尽量只加数据,不改代码。
一、为什么需要文件读写
测试项目中常见文件包括:
- JSON 接口测试数据;
- YAML 配置文件;
- CSV 批量参数;
- Excel 用例表;
- TXT 日志或结果;
- 测试报告;
- 上传文件;
- 下载文件校验。
文件读写能力让自动化脚本可以和外部数据交互。
二、基本文件读取
推荐使用 with open,它会自动关闭文件。
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
常见模式:
r:读取;w:写入,覆盖原内容;a:追加;rb:二进制读取;wb:二进制写入。
三、读取 JSON 数据
接口测试中 JSON 很常见。
import json
with open("cases.json", "r", encoding="utf-8") as f:
cases = json.load(f)
JSON 文件可以保存多条用例:
[
{"title": "正常登录", "username": "tester", "password": "123456", "expected": 0},
{"title": "密码错误", "username": "tester", "password": "wrong", "expected": 1001}
]
读取后可以循环执行。
四、读取 CSV 数据
CSV 适合简单表格数据。
import csv
with open("cases.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["username"])
DictReader 会按表头生成字典,可读性更好。
五、读取 Excel 数据
很多团队用 Excel 管理接口用例。Python 可以用 openpyxl、pandas 等读取。
面试中不一定要写完整代码,但要说清楚思路:读取每一行,转换成用例数据,再参数化执行。
Excel 常见字段:
- 用例名称;
- 请求方法;
- URL;
- Header;
- 请求参数;
- 预期 code;
- 是否执行。
六、数据驱动测试是什么
数据驱动就是把测试逻辑和测试数据分离。同一段测试代码,读取不同数据执行多条用例。
例如:
for case in cases:
response = send_request(case["method"], case["url"], case["payload"])
assert response["code"] == case["expected"]
新增用例时,只需要在数据文件中新增一行或一条 JSON。
七、数据驱动的优点
- 减少重复代码;
- 用例维护更方便;
- 测试数据和脚本分离;
- 非开发人员也能维护数据;
- 支持批量执行;
- 适合接口自动化和参数组合测试。
八、数据驱动常见问题
1. 数据格式不规范
字段缺失、JSON 格式错误、Excel 空单元格都会导致脚本失败。
2. 数据类型问题
Excel 读取数字可能变成浮点,字符串可能带空格。
3. 测试数据互相依赖
前一条用例影响后一条用例,导致结果不稳定。
4. 敏感信息明文保存
密码、Token、数据库账号不应随便写在用例文件里。
5. 路径写死
文件路径写死会导致换机器执行失败。建议使用相对路径或配置管理。
九、测试结果写入文件
可以写入简单结果:
with open("result.txt", "a", encoding="utf-8") as f:
f.write("登录用例执行成功\n")
实际项目中更常用 Allure、HTML 报告或日志系统,但文件写入是基础。
十、上传和下载文件测试
文件读写还和上传下载测试有关。
上传文件时要以二进制方式读取:
with open("demo.xlsx", "rb") as f:
files = {"file": f}
下载文件后要验证:
- 文件是否生成;
- 文件大小是否正确;
- 文件名是否正确;
- 文件内容是否正确;
- 文件格式是否正确。
十一、面试回答模板
如果面试官问“文件读写和数据驱动测试怎么理解”,可以这样回答:
文件读写在自动化测试中主要用于读取测试数据、配置和写入结果。比如接口自动化中,我会把用例数据放在 JSON、YAML、CSV 或 Excel 中,脚本读取后循环执行,这就是数据驱动。数据驱动的好处是测试逻辑和测试数据分离,新增用例可以只改数据文件,不需要复制代码。读取数据时要注意编码、文件路径、字段缺失、数据类型和敏感信息安全。文件读写也会用于上传下载测试,比如以二进制方式上传文件,并校验下载文件名、大小和内容。
十二、常见追问
追问:为什么不要把测试数据写死?
写死会导致维护困难,新增用例要改代码,不利于批量执行和数据管理。
追问:JSON 和 Excel 哪个好?
JSON 更适合结构化接口数据,Excel 更适合人工维护用例。实际看团队习惯。
追问:文件路径怎么处理?
尽量用相对路径、项目根路径拼接或配置文件,不要写死本机绝对路径。
十三、练习清单
- 用 open 读取 txt;
- 用 json.load 读取 JSON;
- 用 csv.DictReader 读取 CSV;
- 设计一份接口用例数据;
- 循环执行多条用例;
- 把结果追加写入文件;
- 处理文件不存在异常;
- 做一次文件上传;
- 校验下载文件;
- 准备数据驱动面试回答。
文件读写和数据驱动,是自动化测试从单条脚本走向框架化的关键。核心思想是让测试逻辑稳定,让测试数据可维护。
配套刷题:

