我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/6. 文件读写和数据驱动测试

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 更适合人工维护用例。实际看团队习惯。

追问:文件路径怎么处理?

尽量用相对路径、项目根路径拼接或配置文件,不要写死本机绝对路径。

十三、练习清单

  1. 用 open 读取 txt;
  2. 用 json.load 读取 JSON;
  3. 用 csv.DictReader 读取 CSV;
  4. 设计一份接口用例数据;
  5. 循环执行多条用例;
  6. 把结果追加写入文件;
  7. 处理文件不存在异常;
  8. 做一次文件上传;
  9. 校验下载文件;
  10. 准备数据驱动面试回答。

文件读写和数据驱动,是自动化测试从单条脚本走向框架化的关键。核心思想是让测试逻辑稳定,让测试数据可维护。

配套刷题: