最后更新:2026-09-04 01:19
实验16 数据驱动测试¶
16.1 实验目的¶
- 知识目标:理解数据驱动测试的核心思想(测试数据与脚本分离);理解 ddt 库三要素(
import ddt、@ddt.ddt、@ddt.data)的作用; - 技能目标:能创建 CSV 文件并用 Python 读取(跳过标题行);能用 ddt 库以多组数据批量驱动同一套测试脚本完成"批量查询"测试;
- 素养目标:养成「改数据不改代码」的数据驱动思维,体会脚本与数据分离带来的维护便利。
16.2 实验环境¶
- 操作系统:Windows 10 / Windows 11;
- 工具:PyCharm + Python + Selenium + ddt 库;
- 浏览器:Chrome;
- 被测系统:人力资源综合服务系统(
http://192.168.X.XXX/suthr/logon)。
16.3 实验重难点¶
重点:CSV 文件读取流程;ddt 数据驱动的三要素(import、@ddt.ddt、@ddt.data)。
难点:数据格式转换与 for 循环逐行读取;装饰器(@ddt.ddt / @ddt.data)的理解与使用。
16.4 实验内容¶
16.4.1 CSV 文件读取¶
1. 任务描述 创建 CSV 文件,用 Python 读取除标题行以外的所有数据。
2. 实验步骤
-
步骤 1:前期工作——创建 CSV 文件:
- 新建一个 Excel 文件,放入三行数据(如"姓名 + 年龄",可随意写);
- 另存为 CSV 文件格式(如
element1.csv)。
-
步骤 2:理解读取流程:
- 导入 CSV 代码库;
- 以只读形式打开文件;
- 进行数据格式转换(
csv.reader); - 用 for 循环打印除第一行标题之外的所有数据。
-
步骤 3:代码实现:
为什么要跳过第一行?
CSV 第一行一般是标题(列名),不是真实数据,所以读取时 i != 0 把它跳过。
常见错误与排错
- 若读取为空或报路径错误:检查 CSV 路径拼写是否正确、文件是否另存为 CSV 格式(不是直接把 xlsx 改名);
- 若中文乱码:CSV 用 UTF-8 编码保存(用记事本另存时选择 UTF-8)。
16.4.2 数据驱动测试(ddt 库)¶
1. 任务描述 使用 ddt 库实现数据驱动:测试数据与脚本分离,用多组数据批量执行。
2. 实验步骤
- 步骤 1:环境准备——安装 ddt 库:
- 步骤 2:理解数据驱动三要素:
- 头部导入:
import ddt; - 测试类前加装饰器:
@ddt.ddt(表示该类采用 ddt 数据驱动); -
测试方法前指定数据:
@ddt.data(...)。 -
步骤 3:理解代码编写思路:
- 先把测试数据单独存放;
-
编写脚本时调用存放的数据,逐条读取执行。
-
步骤 4:实例需求:
- 进入人力资源综合服务系统登录页面;
- 输入用户名和密码,单击"登录";
- 单击页面左侧"培训进修"按钮;
-
在培训内容输入框中输入多组数据进行查询。
-
步骤 5:代码实现(数据读取 + ddt 驱动,示意结构):
数据驱动好在哪?
写一份脚本 + 一份数据文件,就能批量跑成千上万条数据,改数据不用改代码。这正是"测试脚本与测试数据分离"的核心价值,也是国赛和实际项目高频考点。
16.4.3 数据驱动-完整接线(读数据 → 驱动用例)¶
1. 任务描述 把 CSV 读取与 ddt 数据驱动串起来,跑通完整流程。
2. 实验步骤
-
步骤 1:确认 CSV 数据文件存在且字段顺序与读取逻辑一致。
-
步骤 2:确认
read()返回的是"去掉标题行"的列表。 -
步骤 3:运行脚本,观察每条数据都被逐条执行一遍(控制台打印 username/password/内容)。
-
步骤 4:检查测试结果:每条数据执行成功则通过,失败会有对应提示。
为什么 @ddt.data(*data) 要加 * 号?
read() 读回来的是装着多组数据的列表;*data 的作用是把这个列表展开,一组一组地传给 @ddt.data,这样每组数据都会生成一条用例逐条执行。忘了写 *,整套数据就会被当成"一条数据"处理。
常见报错排查
- 数据没逐条执行:检查
@ddt.data(*data)是否写了*(展开列表); - 读取为空:检查 CSV 路径是否正确、文件是否保存为 CSV 格式(不是 xlsx);
- 中文乱码:CSV 用 UTF-8 编码保存(用记事本另存时选择 UTF-8)。
16.5 实验总结¶
本次实验掌握了以下要点:
- 一是理解了数据驱动测试的核心思想——测试数据与脚本分离(对应知识目标);
- 二是掌握了 CSV 文件创建与读取流程(导入 csv → 只读打开 → 格式转换 → for 循环跳过标题行),以及 ddt 三要素实现多组数据批量执行(对应技能目标);
- 三是体会到「改数据不改代码」的维护便利,建立了数据驱动的测试思维(对应素养目标)。至此,自动化测试模块(实验13~16)全部完成:从浏览器操作、元素定位、鼠标键盘交互、等待窗口切换,到高级操作、Unittest 框架、数据驱动,已经具备完整的设计与执行能力。
16.6 作业提交¶
- 提交地点:吾爱作业网
- 提交资料:
- CSV 文件内容截图;
- 16.4.1 CSV 读取运行结果(控制台打印多行数据)截图;
- 16.4.2 数据驱动批量执行运行结果截图。
- 不会做时填写"心得感悟"(1~50 字)。
16.7 知识检测¶
- [ ] (填空)数据驱动测试的核心思想是测试数据与测试脚本分离(数据单独存放维护)。
- [ ] (填空)ddt 三要素:
import ddt、测试类前加 @ddt.ddt、测试方法前加 @ddt.data(...)。 - [ ] (选择)CSV 读取时跳过第一行,是因为第一行通常是( )。
- A. 空行 B. 标题(列名) C. 错误数据 D. 加密内容
查看解析
正确答案:B。CSV 第一行一般是标题(列名),不是真实数据,所以用 i != 0 跳过。
- [ ] (选择)
@ddt.data(*data)中*的作用是( )。 - A. 乘法运算 B. 把列表展开、逐条传给装饰器生成多条用例 C. 注释符号 D. 取地址
查看解析
正确答案:B。*data 把多组数据展开逐条传入,每组数据生成一条用例;漏写 * 数据不会逐条执行。
- [ ] (判断)CSV 文件出现中文乱码时,可以把文件用记事本另存为 UTF-8 编码。(对)
查看解析
对。CSV 用 UTF-8 编码保存(记事本另存时选择 UTF-8)可避免中文乱码。
本课相关资源¶
| 序号 | 资源名称 | 类型 | 说明 |
|---|---|---|---|
| 1 | 任务3.16 CSV文件读取方法使用.pptx | 课件 | CSV 读取 |
| 2 | 任务3.17 数据驱动测试方法使用.pptx | 课件 | ddt 数据驱动 |
| 3 | 任务3.18 数据驱动测试方法使用.pptx | 课件 | ddt 数据驱动(续) |
实验素材下载
点击下方链接获取本节课全部资源(含课件、任务清单、安装包等): 🔗 夸克网盘
