跳转至

最后更新:2026-09-04 01:19

实验16 数据驱动测试

16.1 实验目的

  • 知识目标:理解数据驱动测试的核心思想(测试数据与脚本分离);理解 ddt 库三要素(import ddt@ddt.ddt@ddt.data)的作用;
  • 技能目标:能创建 CSV 文件并用 Python 读取(跳过标题行);能用 ddt 库以多组数据批量驱动同一套测试脚本完成"批量查询"测试;
  • 素养目标:养成「改数据不改代码」的数据驱动思维,体会脚本与数据分离带来的维护便利。

16.2 实验环境

  1. 操作系统:Windows 10 / Windows 11;
  2. 工具:PyCharm + Python + Selenium + ddt 库;
  3. 浏览器:Chrome;
  4. 被测系统:人力资源综合服务系统(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:理解读取流程:

    1. 导入 CSV 代码库;
    2. 以只读形式打开文件;
    3. 进行数据格式转换(csv.reader);
    4. 用 for 循环打印除第一行标题之外的所有数据。
  • 步骤 3:代码实现:

    import csv  # 导入CSV代码库
    
    def read():  # 将数据读取封装成方法,方便调用
        path = r"D:\canshuhua\element1.csv"  # CSV文件路径
        stream = open(path, 'r')             # 以只读形式打开
        data = csv.reader(stream)            # 数据格式转换
        list = []                            # 存放读取的数据
        i = 0
        for row in data:                     # for循环读取
            if i != 0:                       # 跳过第一行标题
                list.append(row)
            i = i + 1
        return list
    
    if __name__ == '__main__':
        data = read()
        for row in data:
            print(row)
    

为什么要跳过第一行?

CSV 第一行一般是标题(列名),不是真实数据,所以读取时 i != 0 把它跳过。

常见错误与排错

  • 若读取为空或报路径错误:检查 CSV 路径拼写是否正确、文件是否另存为 CSV 格式(不是直接把 xlsx 改名);
  • 若中文乱码:CSV 用 UTF-8 编码保存(用记事本另存时选择 UTF-8)。

16.4.2 数据驱动测试(ddt 库)

1. 任务描述 使用 ddt 库实现数据驱动:测试数据与脚本分离,用多组数据批量执行。

2. 实验步骤

  • 步骤 1:环境准备——安装 ddt 库:
pip install ddt
  • 步骤 2:理解数据驱动三要素:
  • 头部导入:import ddt
  • 测试类前加装饰器:@ddt.ddt(表示该类采用 ddt 数据驱动);
  • 测试方法前指定数据:@ddt.data(...)

  • 步骤 3:理解代码编写思路:

  • 把测试数据单独存放
  • 编写脚本时调用存放的数据,逐条读取执行。

  • 步骤 4:实例需求:

  • 进入人力资源综合服务系统登录页面;
  • 输入用户名和密码,单击"登录";
  • 单击页面左侧"培训进修"按钮;
  • 在培训内容输入框中输入多组数据进行查询。

  • 步骤 5:代码实现(数据读取 + ddt 驱动,示意结构):

ddt数据驱动测试代码

图 16-1:ddt数据驱动测试代码
import unittest
import ddt
from readdata import read   # 引入上面写的 CSV 读取方法

data = read()               # 读取多组测试数据

@ddt.ddt
class TestX(unittest.TestCase):
    @ddt.data(*data)        # *data 把多组数据展开逐条传入
    def test_chaxun(self, row):
        # row 是一组数据,取 username/password/内容等字段
        username = row[0]
        password = row[1]
        content = row[2]
        # ... 登录 + 进入培训进修 + 输入 content 查询
        print(username, password, content)

if __name__ == '__main__':
    unittest.main()

数据驱动好在哪?

一份脚本 + 一份数据文件,就能批量跑成千上万条数据,改数据不用改代码。这正是"测试脚本与测试数据分离"的核心价值,也是国赛和实际项目高频考点。

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 实验总结

本次实验掌握了以下要点:

  1. 一是理解了数据驱动测试的核心思想——测试数据与脚本分离(对应知识目标);
  2. 二是掌握了 CSV 文件创建与读取流程(导入 csv → 只读打开 → 格式转换 → for 循环跳过标题行),以及 ddt 三要素实现多组数据批量执行(对应技能目标);
  3. 三是体会到「改数据不改代码」的维护便利,建立了数据驱动的测试思维(对应素养目标)。至此,自动化测试模块(实验13~16)全部完成:从浏览器操作、元素定位、鼠标键盘交互、等待窗口切换,到高级操作、Unittest 框架、数据驱动,已经具备完整的设计与执行能力。

16.6 作业提交

  1. 提交地点:吾爱作业网
  2. 提交资料:
  3. CSV 文件内容截图;
  4. 16.4.1 CSV 读取运行结果(控制台打印多行数据)截图;
  5. 16.4.2 数据驱动批量执行运行结果截图。
  6. 不会做时填写"心得感悟"(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 数据驱动(续)

实验素材下载

点击下方链接获取本节课全部资源(含课件、任务清单、安装包等): 🔗 夸克网盘

本站总访问 次 | 访客 人 | 本页阅读