跳转至

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

实验26 国赛备赛:自动化测试(Selenium + unittest + PO)

26.1 实验目的

  1. 熟悉国赛"任务五 自动化测试"的题型与要求(20 分,分值最高);
  2. 掌握 Selenium 各种元素定位 + 智能等待 + 截图 + alert 处理;
  3. 掌握 unittest 框架(setUp / tearDown)与数据驱动(ddt + CSV);
  4. 掌握 PO 设计模式(BasePage / LoginPage / AddPage)搭建自动化项目;
  5. 掌握 HTMLTestRunner 生成测试报告。

26.2 实验环境

  1. 操作系统:Windows 10 / Windows 11;
  2. 工具:PyCharm + Python + Selenium(实验6 已装好);
  3. 被测系统:国赛测试系统(登录 XTGLY / 123456);
  4. 参考报告模板:A10-自动化测试要求、A11-自动化测试报告模板。

26.3 实验重难点

重点:四道题的定位方法组合(NAME/ID/TAG_NAME/LINK_TEXT/CLASS_NAME/XPATH/CSS);unittest + ddt + CSV 数据驱动。

难点:题目4 PO 框架的完整搭建(目录结构、BasePage/LoginPage/AddPage 封装、run_test.py 用 discover + HTMLTestRunner);断言失败时截图。

26.4 实验内容

26.4.1 国赛"任务五 自动化测试"概览

1. 任务描述 了解自动化测试的评分点与报告要求。

2. 实验步骤

  • 步骤 1:任务分值:任务五自动化测试共 20 分,评分点:术语定义描述(1 分)、题目1(3 分)、题目2(4 分)、题目3(5 分)、题目4(7 分,分值最高)。

  • 步骤 2:报告要求:根据自动化测试情况,参考 A10/A11 模板,将全部脚本粘贴到模板,完成自动化测试报告。

  • 步骤 3:术语定义必背:

    • 为节省人力、时间或硬件资源,提高 测试效率,引入自动化测试概念;
    • Selenium 是一款针对 Web 应用 的功能自动化测试工具,主要用于回归测试、兼容性测试、大数据量测试。

自动化测试像什么?

自动化测试就像装了洗碗机:第一次摆好碗筷、设好程序要花点工夫,以后每顿饭按一个键就行——重复劳动交给机器,人只看结果。

常见错误与排错

  • 术语定义是必背送分点:关键词为"测试效率"(引入自动化测试的目的)和"Web 应用"(Selenium 的测试对象),写错直接丢分;
  • 报告须按 A10/A11 模板粘贴全部脚本,漏脚本就丢分。

26.4.2 题目1:基础定位 + 弹窗 + 截图

商品品牌新增测试用例表

图 26-1:商品品牌新增测试用例表

1. 任务描述 按 9 个步骤完成自动化脚本并执行。

2. 实验步骤

  • 步骤 1:设置智能时间等待 3 秒;

  • 步骤 2:引入 By 方法类;

  • 步骤 3:通过 NAME 属性定位用户名输入框,输入 XTGLY;

  • 步骤 4:通过 ID 属性定位密码输入框,输入 123456;

  • 步骤 5:通过 TAG_NAME 方法定位登录按钮,用 click() 点击;

  • 步骤 6:通过 LINK_TEXT 方法定位仓库信息按钮并点击;

  • 步骤 7:通过 TAG_NAME 复数形式 定位并点击第一个仓库的"禁用"按钮;

  • 步骤 8:通过 alert 的 accept 方法 关闭第一个弹窗;

  • 步骤 9:使用 get_screenshot_as_file 截图(命名 test_accept01.png,存放在 D 盘根目录)。

代码骨架:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.implicitly_wait(3)                     # 1 智能等待3秒
driver.get("...")                             # 进入登录页
driver.find_element(By.NAME, "username").send_keys("XTGLY")
driver.find_element(By.ID, "password").send_keys("123456")
driver.find_element(By.TAG_NAME, "button").click()   # 登录按钮
driver.find_element(By.LINK_TEXT, "仓库信息").click()
driver.find_elements(By.TAG_NAME, "button")[0].click()  # 复数定位第一个禁用
driver.switch_to.alert.accept()               # 8 关闭弹窗
driver.get_screenshot_as_file(r"D:\test_accept01.png")  # 9 截图

为什么用智能等待 implicitly_wait(3) 而不是 time.sleep(3)

智能等待像"外卖到了就开门"——最多等 3 秒,元素一出现立刻继续;sleep(3) 则是"死等满 3 秒才开门",浪费时间还不保险。

常见错误与排错

  • 定位方式别张冠李戴:用户名用 NAME、密码用 ID、登录按钮用 TAG_NAME、仓库信息用 LINK_TEXT、禁用按钮用 TAG_NAME 复数形式 find_elements
  • 截图用 get_screenshot_as_file,文件名 test_accept01.png 存放在 D 盘根目录;第一个弹窗用 alert 的 accept 方法关闭。

26.4.3 题目2:unittest 框架

1. 任务描述 搭建 unittest 框架完成登录与商品新增两条用例。

2. 实验步骤

  • 步骤 1:搭建 unittest 框架,引入 By 方法类;

  • 步骤 2:定义 setUp:启动浏览器、3 秒智能等待、窗口最大化;

  • 步骤 3:定义 tearDown:关闭浏览器;

  • 步骤 4:test_denglu01:进入登录页,CLASS_NAME 定位用户名、NAME 定位密码,输入 XTGLY/123456,ID 定位登录按钮点击;

  • 步骤 5:test_denglu02:NAME 定位用户名、ID 定位密码、TAG_NAME 定位登录按钮,XPATH 点击商品管理新增按钮,send_keys 上传图片,get_screenshot_as_file 截图;

  • 步骤 6:通过 unittest.main() 执行测试用例。

setUp / tearDown 像什么?

就像上体育课先整队、下课前再集合:setUp 是每条用例开跑前的固定准备(启动浏览器、智能等待、窗口最大化),tearDown 是跑完后的固定收尾(关闭浏览器)。

常见错误与排错

  • 题目2 的定位与题目1 不同:用户名用 CLASS_NAME、密码用 NAME、登录按钮用 ID,照题面写,别照抄题目1;
  • 用例写完别忘 unittest.main(),否则脚本不执行任何用例。

26.4.4 题目3:数据驱动(ddt + CSV)

1. 任务描述 新建 CSV 测试数据并用 ddt 驱动"商品分类"新增用例。

2. 实验步骤

  • 步骤 1:新建 csv 格式测试数据 testdata.csv,编写 csvv.py 脚本读取 CSV 中的测试数据(参考实验16);

  • 步骤 2:新建 test01.py

    1. 引入数据读取方法以及 ddt 方法类
    2. 引入 By 方法类;
    3. 搭建 unittest 框架;
    4. setUp:打开谷歌浏览器、5 秒智能等待、窗口最大化;
    5. tearDown:退出浏览器;
    6. ID 定位用户名输入框,输入 XTGLY;NAME 定位密码框,输入 123456;TAG_NAME 定位登录按钮点击进入系统首页;
    7. LINK_TEXT 定位点击"商品分类"按钮;XPATH 点击"新增"按钮;
    8. CLASS_NAME 定位商品分类名称输入框,使用数据驱动输入"商品分类名称";
    9. XPATH 定位并点击"保存"按钮;
    10. LINK_TEXT 定位并获取提示信息文字,用 assertEqual 断言验证预期和实际是否一致,不一致则截图
    11. unittest.main() 执行。

为什么要用 ddt + CSV 做数据驱动?

CSV 就像点名册:脚本按行读取数据逐条执行,要换测试数据只改表格、不用改代码——一套脚本测遍所有数据。

常见错误与排错

  • 断言用 assertEqual 验证预期与实际提示信息是否一致,不一致则截图——截图动作别漏;
  • csvv.py 读取 CSV 的写法参考实验16,文件路径写错会导致读不到数据。

26.4.5 题目4:PO 框架(分值最高,7 分)

1. 任务描述 按 PO 设计模式搭建完整自动化项目并生成 HTML 报告。

2. 实验步骤

  • 步骤 1:新建 ERP_PO 文件夹,其下新建 driver 文件夹Website 文件夹

ERP_PO项目目录结构

图 26-2:ERP_PO项目目录结构
  • 步骤 2:driver 文件夹下新建 driver.py 存放浏览器驱动;

  • 步骤 3:Website 文件夹下新建 test_case、test_report、test_data 文件夹

  • 步骤 4:test_case 下新建 model 文件夹page_object 文件夹

  • 步骤 5:model 下新建:

    • function.py:封装截图、数据驱动读取等方法;
    • myunit.py:封装 unittest 的 Setup(5 秒智能等待 + 窗口最大化)和 tearDown(退出浏览器);
  • 步骤 6:test_report 下新建:

    • BasePage.py:封装 selenium 基础操作类方法(get、find_element 等);
    • LoginPage.py:引入 BasePage 与 By,封装登录用例元素位置和操作(ID 封装用户名、NAME 封装密码、CLASS 封装登录按钮;封装输入用户名、密码、点击登录);
    • AddPage.py:引入 BasePage 与 By,封装商品品牌添加页面元素(LINK_TEXT 封装商品品牌按钮、XPATH 封装新增按钮、XPATH 封装名称输入框、CSS 封装保存按钮),封装添加成功/失败提示信息文字;
    • srceenshot 文件夹:存放测试截图;
  • 步骤 7:test_data 下新建 test_csv.csv 存放测试数据;

  • 步骤 8:test_report 下新建 test_add.py:引入 unittest、ddt 及封装好的 model/LoginPage/AddPage,编写 6 条测试用例,创建 data 参数接收测试数据,数据驱动输入用户名密码(XTGLY/123456)和商品品牌名称,进行截图,每条用例 assertIn 断言 对比提示信息与预期;

  • 步骤 9:Website 下新建 run_test.py:使用 discover 方法执行 test_add.py 并引入 HTMLTestRunner 生成 html 测试报告(title 为 Test Report,description 为 erp test)。

报告要求(A11 模板):目的 / 术语定义 / 执行结果(题目1-4 脚本、截图、是否执行成功;题目4 还需项目目录截图 + BasePage.py / LoginPage.py / AddPage.py / test_Add.py 脚本 + 测试报告截图)。

PO 设计模式像什么?

PO 就像给每个页面配一个"遥控器":按钮、输入框都封装成按键(LoginPage、AddPage),用例只管按遥控器;页面元素变了,只需改遥控器,不用改所有用例。

常见错误与排错

  • 目录层级易建错:ERP_PO 下分 driver 与 Website;Website 下分 test_case、test_report、test_data;test_case 下分 model 与 page_object——照步骤 1~7 逐层新建;
  • run_test.py 要用 discover 方法执行 test_add.py 并引入 HTMLTestRunner,报告 title 为 Test Report、description 为 erp test。

26.5 实验总结

本次实验完成了国赛"任务五 自动化测试"(20 分)的备赛训练:掌握四道题从基础到进阶的脚本(基础定位+弹窗+截图、unittest 框架、ddt+CSV 数据驱动、PO 设计模式),记住术语定义必背内容,掌握 A11 报告模板的填写。PO 框架(题目4,7 分)是最大分值点,务必熟练搭建目录结构并跑通 HTMLTestRunner 报告。

26.6 作业提交

  1. 提交地点:吾爱作业网
  2. 提交资料:
    • 题目1~3 脚本及运行成功截图;
    • 题目4 项目目录结构截图 + 各脚本截图 + HTML 测试报告截图。
    • 不会做时填写"心得感悟"(1~50 字)。

26.7 知识检测

  • [ ] (填空)为节省人力、时间或硬件资源,提高测试效率,引入自动化测试概念。
  • [ ] (填空)Selenium 是一款针对 Web 应用 的功能自动化测试工具。
  • [ ] (选择)unittest 框架中,每条用例执行前自动执行的固定方法是( )。
    • A. start B. setUp C. tearDown D. main
查看解析

正确答案:B。setUp 在每条用例前执行(启动浏览器、智能等待、窗口最大化),tearDown 在用例结束后执行。

  • [ ] (选择)题目4 PO 框架中,封装 selenium 基础操作类方法(get、find_element 等)的文件是( )。
    • A. BasePage.py B. LoginPage.py C. AddPage.py D. run_test.py
查看解析

正确答案:A。BasePage.py 封装基础操作,供 LoginPage / AddPage 引用。

  • [ ] (填空)题目4 使用 discover 方法执行 test_add.py,并引入 HTMLTestRunner 生成 html 测试报告。

本课相关资源

序号 资源名称 类型 说明
1 新建 DOCX 文档.docx 任务文档 四道题目要求
2 A10-自动化测试要求.doc 要求文档 题目明细
3 A11-自动化测试报告模板.doc 报告模板 报告结构
4 评分标准.docx 评分标准 任务五评分细则

实验素材下载

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

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